[C#, 유니티] Unity3D_이동 매커니즘 (컴포넌트 컨트롤러)

2022. 8. 10. 17:00코딩 2막 <C#개념편>

728x90

왼쪽이 경사 / 오른쪽이 계단

계단과 경사 같은 지형을 만들어서

캐릭터가 지형을 이동할 수 있는지

확인해보겠습니다

오늘은 유니티 3D 객체의 이동과 관련된 3가지 이동 방식에 대해서 배우겠습니다

그 순서는 다음과 같습니다

  • Rigidbody 컴포넌트를 통해 힘(Force) 또는 속력(Velocity)을 통한 객체의 이동
  • Rigidbody가 없는 CharacterController 컴포넌트를 통한 객체의 이동
  • Raycast를 이용하여 지정된 좌표의 방향으로 객체가 이동하는 NavMeshAgent

입력관리자(InputManager)


rigidbody(강체) 

물체에 질량을 갖게 해주는 컴포넌트

물체에 속력과 힘을 가하여 움직이게 만들수 있음

중력에 영향을 받기때문에 별도의 선택이 없다면 수직 아래 방향으로 떨어짐

리지드바디가 없다면 어떻게 될까?

frame

1초마다 화면에 출력되는 횟수

frame이 높을수록 부드럽게 게임이 진행됨(즉, 좋은컴 win)

*deltaTime - 1 frame 동안 소요되는 시간 

=> 시간 동기화에 사용. update에서는 반드시 deltaTime을 진행 해줘야됨

 

결론


PlayerRigidController Script


CharacterController

캐릭터컨트롤러는 물리적 영향이 필요없는 FPS같은 게임류에서

주로 적용하는 게임적 이동 컴포넌트입니다

결론


playercharaterController Script


Navigation

경로상태 시스템 

게임상에서 경로를 탐색하는 작업이 결코 빠르지 않음

Raycast

ray는 광선의 의미

ray는 예측이 필요할 때 쓰인다 (raycast를 통해 부딪히는 지점이 있는지 예측)

즉 네비게이션과 같이 목적지가 중요한 경우 자주 쓰인다

Camera.main : 태그가 "camera"인 오브젝트 = "Main Camera"
        카메라로부터 마우스 좌표 위치를 관통하는 광선 생성((ง •_•)ง 메인카메라를 쓰는 방법이 그다지 좋지않음)
  ray.origin : 광선의 시작 위치
            ray.direction : 광선의 진행 방향

Physics.Raycast() : 광선을 발사해서 부딪히는 오브젝트를 검출 (광선에 부딪히는 오브젝트가 있으면 true)
            ray.origin 위치로부터 ray.direction 방향으로 무한한 길이(Mathf.Infinity)의 광선 발사
            광선에 부딪히는 오브젝트의 정보를 hit에 저장

결론


PlayerNavController Script


<참고>

여러가지 게임들의 기믹(가속과 감속)
NavMesh Baking - Unity Official Tutorials
Raycasting - Unity Official Tutorials

공감해주셔서 감사합니다

728x90