- Unity의 물리엔진(PhysX)을 사용하는 게임 오브젝트의 물리적 특성을 관리하는 컴포넌트
- 중력, 충돌, 마찰 등 물리적인 법칙을 따라 게임 오브젝트가 동작하도록 함
방향키를 눌렀을 때 플레이어 오브젝트의 이동(움직임)을 구현하는 여러 방법이 있다.
단순 이동을 위해서는 transform.Translate()처럼 게임 오브젝트의 Transform 값을 직접적으로 변경하는 방법도 있다. 그러나 이 방법은 물리 엔진을 무시하기에 충돌이나 중력처럼 물리적 현상의 영향을 받지 않는다. 이는 물리적 충돌 반응을 구현하려면 직접 코드를 추가해야만 하므로, 이동 중 벽에 부딪히는 등의 물리적 현상이 필요한 '플레이어 이동/점프' 구현 시에는 적합하지 않다.
따라서 우리는 오브젝트에 물리적 효과를 자동으로 적용되게 하는 컴포넌트인 Rigidbody를 사용할 것이다! 플레이어 오브젝트에 Rigidbody를 적용하고, Rigidbody가 제공하는 오브젝트 위치 이동 메서드를 사용해 움직임을 구현해 보자 :>
: Rigidbody 컴포넌트에서 제공하는 함수로, 오브젝트를 지정된 위치로 이동시키는 함수이다. 이는 즉각적으로 위치를 바꾸지만, 물리 엔진의 출돌 반응을 유지하며 부드럽게 이동하는 것이 특징이다. 따라서 플레이어 캐릭터처럼 직접 제어를 해야 하는 객체에 적합하다.
ex) FPS 캐릭터 이동, 2D 플랫폼 게임의 캐릭터 이동
방향키를 눌렀을 때 오브젝트가 해당 방향으로 이동하도록 하기 위해 MovePosition()을 사용한다!
MovePosition()
Movespeed 조정
→ 현재 캡슐에 있는 (물리엔진을 다루는) Rigidbody를 가져와서 움직임을 구현했다.
*GetComponent<T>() : 해당 GameObject에 있는 컴포넌트를 찾고, 이를 반환하는 함수
: MovePosition()과 마찬가지로 Rigidbody 컴포넌트에서 제공하는 것으로, 오브젝트에 힘을 가해 움직임을 발생시키는 함수이다. 공이 굴러가거나, 캐릭터가 바람, 총알, 폭발에 의해 밀리는 등 물리적인 움직임이 필요한 객체에 사용된다.
AddForce() 함수는 힘을 가하는 방식인 ForceMode를 지정하는데, 그 종류는 다음과 같이 4가지가 있다.
: Force, Acceleration, Impulse, VelocityChange
AddForce()
*Project Settings - Input - Input Manager에서 버튼 설정 가능
*Vector3.up은 위쪽 방향으로 1을 의미 : (0, 1, 0)
프로젝트 생성 시 기본으로 Main Camera가 생성된다. 이 Main Camera가 캡슐(플레이어)을 따라다니도록 스크립트로 구현해 보자! :>
카메라 이동
→ offse값 계산은 게임 오브젝트 생성 시 최초로 1회만 실행되면 되므로 Awake() 함수에 작성한다.
→ 카메라 이동은 항상 player의 움직임에 따라 움직여야 하므로 LateUpdate()에 작성한다.
📝
Rigidbody 컴포넌트를 사용해 플레이어의 이동과 점프를 구현하고, 카메라가 플레이어를 따라다니도록 카메라의 이동도 스크립트로 구현해 보았다 :>
다음에는 물리 충돌을 배우면서, 장애물과 부딪힐 때 이벤트를 발생시키도록 구현해 보자!🤗