Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

시작은 0부터

18. Physics.OverlapSphere, Physics.Raycast, Transform.Rotate 본문

Unity 학습일지

18. Physics.OverlapSphere, Physics.Raycast, Transform.Rotate

0base 2022. 9. 18. 23:59

Physics.OverlapSphere(Vector3 position, float radius, int layerMask)

: position을 기준으로 radius 만큼의 원형 반경으로 주변을 검사하여 layerMask에 해당하는 layer를 가진 콜라이더를 감지하여 bool 값으로 반환한다. AI의 행동 반경을 설정할 때 유용하게 쓰인다.

 

Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask)

: origin을 시작점으로 direction 방향으로 maxDistance만큼 레이를 쏴서 layerMask를 제외한 콜라이더의 정보(hitInfo)를 bool값으로 반환한다. OverlapSphere를 사용할 때는 해당 레이어를 검출했는데 이 기능을 사용할 때는 설정한 레이어를 찾지 못해서 왜 그런가 했더니 'layerMask에 입력한 레이어를 제외하고 검사'하는 것이었다. 이 기능을 사용하면서 layerMask에 해당하는 레이어만 찾아내고 싶을 때는 layerMask 입력란에 '~' 를 앞에 쓰고 해당 레이어를 쓰면 된다.

예를 들어 Ground 라는 레이어만 검사하고 싶을 때는 '~Ground' 로, Ground만  검사에서 제외하고 싶을 때는 'Ground'를 쓰면 된다.

 

네비메쉬로 움직이는 AI를 '차량'으로 구현하고자 하는데, 네비메쉬는 RigidBody와는 다른 방식으로 작동하기 때문에 RIgidBody의 중력값을 적용받지 않아 직접 중력을 구현해야한다. 문제는 차량이라 경사로를 오를 때 차량의 기울기를 수정해주는 기능을 넣지 않으면 차량이 마치 이잣짐 짐처럼 경사를 오르는 기현상이 발생한다. 이 문제를 해결하기 위해 생각한 방법은 일단 레이캐스트를 전방으로 쏴서 전방에 땅으로 설정된 레이어가 검출되면 오르막길로 인식하여 기울기를 위쪽으로 향하게 하고, 전방에 땅 레이어가 검출되지 않으면 바닥에 레이어를 쏴서 땅이 검출될 때 까지 아래로 기우는 식으로 주먹구구식으로 일단 구현해보려고 하는데, 이때 기우는 식을 transform.Rotate(-1,0,0)로 사용하여 Update마다 -1기울게 해보려고 했는데 식을 잘못 써서 원하는 것처럼 매 프레임마다 기우는 것이 아니라 설정한 값으로 바로 바뀌고 고정되버렸다. Rotate는 기존 기울기값에 해당 값만큼 더한다고 생각했는데 결과물을 보니 그게 아닌 것 같다. 내가 생각하는 것처럼 구현하려면 Rotate(x,y,z)가 아니라 Rotate(원하는 방향 * 값 * 시간) 식으로 했을 떄 생각했던 결과가 나왔다.

transform.Translate(x,y,z)처럼 동일하게 동작하는 개념이라고 생각했는데 확실히 결이 다른 걸 알게되었다.

 

 

'Unity 학습일지' 카테고리의 다른 글

17. UI, Blend Tree  (0) 2022.09.13
16. AddRelativeForce, Wheel Collider  (0) 2022.09.01
15. Raycast  (0) 2022.08.30
14. Lightmap, Animator Layer, Rigidbody.MovePosition  (0) 2022.08.29
13. Matrix4x4, lossyscale, TRS  (0) 2022.08.27