2017-12-04 2 views
0

BoxCollider 바운드 안에있는 벡터 (원점)에서 광선/구를 캐스팅하고 초과하지 않도록 maxDistance를 제한하려고합니다. 바운드 영역을 지정하고이 바운드 안의 오브젝트 만 layerMask로 누릅니다. 어떻게 이것을 달성합니까?경계 영역 내에서 GameObject 선택 (변환을 통해 일반 방향으로 gameObject를 선택 함)

또한 이것을 sphereCast로 캐스팅하고 여러 객체에 충돌이 발생하면 어떻게하면 sphereCast의 중심에 가장 가까운 객체 만 얻을 수 있습니까? 나는 꽤 오랫동안 주위를 수색했으나 거기에 그것을 얻을 수는 없었다.

편집 # 1

Example

내가 이전 답변에 감사하지만 내가 정말 무엇을 달성하고자하는 더 나은 정교이 편집을 업데이트합니다.

처음 묻는 질문에 실종 된 rayCast/sphereCast를 해결하는 방법이 아직 모호했습니다. 어느 쪽이 좋을지는 궁극적으로 target/sphereCast 반경의 크기에 따라 놓치게됩니다.

마지막 목표는 gameObject를 선택하고 놓치지 않도록 방향 입력을하는 것입니다. 나는 이미이 바운딩 박스를 가지고 List 내 gameObject의 변형을 수집하고 표준화 된 방향을 제공하는 게임 패드 아날로그 스틱으로 입력하면 그 일반적인 방향으로 하나를 선택하고 싶다. 그러나 나는 단지 rayCast/sphereCast에서 이것을 수행하는지 알고 있습니다. 불필요한 코드 블록이라고 생각되는 타겟을 놓치지 않도록 입력마다 여러 번 캐스팅해야합니다. 이상적인 것은 다음과 같습니다 : 정규화 된 input dir : vector2 (1,0, 0) 원점에서 2시 위치에 자주색 타겟이 선택됩니다.

답변

0

센터에 가장 가까이 가려면 콜리 더의 변환을 가져 와서 센터에서 위치를 빼는 루프를 만들 수 있습니다. 그런 다음 최소 크기를 선택하십시오. 성능을 향상 시키려면 크기 제곱을 사용할 수 있습니다.

박스 콜 리더 내부에서 물건을 집기 위해서만, 상자의 가장 큰 치수와 같은 반경의 구형 캐스트를 사용하는 것이 하나의 방법입니다. 이것은 상자 밖에서도 도달 할 수 있지만 상자 안의 모든 것을 얻을 수 있습니다. 그런 다음 전통적인 충돌 검사를 사용하여 박스 콜리더 내부에 있는지 수동으로 확인할 수 있습니다.

0

1 : 그것은 상황에 완벽로

내가 제안은 Physics.OverlapBox

를 보라 :

지정된 상자 만지거나 내부의 모든 colliders를 찾아보십시오.

매개 변수로 상자 콜라이더의 중심과 크기를 전달할 수 있습니다. 그러면 겹치는 (히트) 콜리더 배열이 반환되고 첫 번째 콜라이드를 사용할 수 있습니다.

2 :

여전히 SphereCast를 사용하려는 경우, 당신이 간단하게 사용할 수 있습니다, 당신은 당신의 경계로 충돌 장치가있는 경우 collider 재산

0

에 명중 된 첫 번째 개체가 RaycastHit 객체를 채 웁니다 Collider.bounds.extents 또는 Collider.bounds.size을 사용하여 충돌 자의 크기를 얻은 다음 (시작 위치에 따라) 구형 캐스트의 최대 크기를 설정하십시오. 예 :SphereCast가 큐브의 중간에서 시작되면 Collider.bounds.extents의 값 중 하나를 최대 크기로 사용하기 만하면됩니다.

두 번째 질문의 경우 Physics.SphereCastAllRaycastHits의 배열을 반환합니다. 이들은 레이어 캐스팅 원점에서 충돌자가 히트 한 지점까지의 거리를 반환하는 속성을가집니다. 간단히 배열을 반복하고 가장 가까운 거리의 객체를 사용하여 가장 가까운 객체를 얻을 수 있습니다.

또한 Physics.SphereCast은 가장 먼저 얻은 것 (따라서 가장 가까운 것)을 반환해야한다고 생각합니다. 그러나 이것이 항상 원하는대로 동작한다면 확신 할 수는 없지만 Physics.SphereCastAll 메서드를 사용하는 것보다 성능면에서 더 좋으므로 테스트 해 볼 가치가 있습니다.