2017-03-17 1 views
0

저는 플레이어 (우주선)가 주변 행성의 중력에 의해 영향을받는 2D 우주 세계가있는 Unity 프로젝트를 가지고 있습니다. 그러나 중력에 대한 뉴턴의 법칙을 사용하고 있습니다. (F = G * (M * m)/r^2)),이 문제는 중력의 견인력이 전체 레벨에서 활성화된다는 것입니다.Unity | CircleCollider2D.radius가 동일한 값을 반환합니다.

우주의 영향력을 중력이 영향을 미치지 않는 곳으로 제한하기 위해 영향 범위를 사용하고 있습니다.이 작업을 수행하려면 지구의 반경이 있어야합니다.

문제는 내 행성의 크기 (또는 "축척")가 모두 같지는 않지만 프리 팹이 동일하다는 것입니다. 따라서 CircleCollider 구성 요소의 반지름은 1.5이며 원래 크기를 나타냅니다. 규모에 관계없이 동일하게 유지됩니다. 수동으로 크기를 조정하더라도 장면 뷰에서 충돌자가 커지지만 그 값은 같습니다.

그래서 Planet1의 눈금은 (20,20,20)이고 Planet2의 눈금은 (10,10,10)입니다. 그것들은 다른 스케일을 가지고 있지만 CircleCollider는 씬 뷰에서 분명히 두 배 정도 크더라도 1.5의 값을 가지고 있습니다.

나는 어디에서나 보았지만 CircleCollider.radius 값을 지구 규모로 조정하는 방법을 아직 찾지 못했습니다. CircleCollider 반경은 필요하지 않지만 Planet 반경 만 가져야합니다.

답변

2

그래서 나는 colliders를 시각적으로 이해 했으므로 올바르게 작동하지만 값을 얻으려고 노력하고 일부 지역 값을 반환합니다. 규모에 따라 곱하면됩니다!

Vector3 scl = gameObject.transform.scale(); 
float colliderRadius = radius*scl; 

참고 : 의사 코드와 유사하도록 Unity가 열리지 않았습니다.

+0

그리고 게임을 할 준비가되면 게임을하고 싶습니다. 또한 개발에 좀 더 도움이 필요하면 몇 시간을 쓸 수 있습니다 =) – maximelian1986

+0

더 많은 유니티 (ish) 구문에서 나는 다음과 같이 표현해야합니다. 'Vector3 scl = Planet.transform.localScale(); float colliderRadius = radius * scl;' 하지만 'Transform'에는 'localScale'에 대한 정의가 없습니다. –

+0

localScale의 올바른 구문은 다음과 같습니다. transform.localScale + = new Vector3 (0.1F, 0 , 0);'. 그리고 게임에 대한 링크를 게시하게되어 기쁩니다;) –

관련 문제