유니티

유니티 물체 이동하기 AddForce / ForceMode / AddTorque

nock_ji 2022. 4. 11. 18:53

TIL

 

📝  Rigidbody

📝  물체 속도 설정해서 움직이기

📝  물체에 힘을 가해서 움직이기

📝  버튼 입력으로 움직이기

📝  회전력을 주어 움직이기 

 

 


 

👩‍💻  RigidBody

 

물리효과를 받기 위한 컴포넌트

RigidBody를 가지게 되면 중력의 영향을 받습니다 

 

 

🔎  RigidBody를 이용하여 오브젝트를 움직이는 여러 방법을 살펴보겠습니다 

 

 

🔻 Rigidbody component를 Ball 에 추가한 후, Rigidbody를 변수로 가져오기 위해서 스크립트를 새로 만들어 추가합니다 

 

 

가운데 있는 줄무늬 공이 오늘의 메인 오브젝트 입니다 

 

 


 

Ball Script 

👩‍💻 코드 흐름은 선언 -> 초기화 -> 호출 

 

 

📍 선언 

Rigidbody rigid;

 

변수명 rigid 인 Rigidbody component 선언 

 

 

 

 

📍 초기화 

void Start()
{
	rigid = GetComponent<Rigidbody>();
}

GetComponent<T>  : 자신의 T타입 컴포넌트를 가져오는 메서드

rigid는 Rigidbody 컴포넌트를 가져왔습니다

 

 

 

📍 호출 

Rigidbody를 이용하여 오브젝트를 움직이는 방법은 여러가지 입니다

속도올리기, 물체에 힘을 가해서 움직이기, 회전력으로 움직이기하나씩 실행해보겠습니다 

 

 


 

👩‍💻  속도 올리기

 

📌  velocity 

       rigidbody의 속도를 나타냅니다 , Vector 계열 , 일정 속도 유지

       

 

 

 

🔻  velocity  |  오른쪽 방향으로 움직이는 로직 

 

 

Vector3.right 는 좌표 (1, 0, 0)과 같습니다

.

.

.

 

 

 

 

 

 

 

 

🔻   velocity  |  설정한 Vector3 좌표로 움직이는 로직 

 

 

void Start에서는 해당 좌표까지 도달하고 중력에 의해 호선을 그리며 튕겨져 나갑니다

.

.

.

 

 

 

 

 

 

 

🔻  velocity  |   Vector3 좌표로 움직이는 로직을 FixedUpdate에서 실행시켰을 때 

 

.

.

.

1초에 60번 반복되기 때문에 계속해서 뻗어나가는 모습을 볼 수 있습니다 

 

 

 

📣  Rigidbody를 다루는 경우, Update가 아닌 FixedUpdate를 사용해야합니다 

Update는 프레임 속도에 영향을 받기 때문에 불안정하며, 과도한 Update 호출보다 규칙적이고 표준화된 FixedUpdate가 적합합니다 

 

 

 


 

 

👩‍💻  물체에 힘을 가해서 움직이기

 

 

📌  AddForce(Vec)

rigidbody에 힘을 가해 가속도를 줍니다. 오브젝트의 질량에 따라 가속도가 달라집니다 

 

rigidbody.AddForce(Vector3 * force, ForceMode.mode);

 

 

 

📌  ForceMode.

힘을 주는 방식 (가속, 무게 반영)

 

- 연속적인 힘

가속 추가, 굴러가고 있는 중에 사용 

.Force  :  무게 적용

.Acceleration  :  무게 무시

 

- 순간적인 힘

순간적인 속도를 붙여주는 방식, 정지상태에서 이동할 때

.Impulse  :  무게 적용

.VelocityChange  :  무게 무시

 

FoceMode.Impulse 를 가장 많이 사용합니다

 

 

 

 

🔻 AddForce |  캐릭터 점프할 때 많이 쓰는 로직 

 

.

.

오브젝트의 질량에 따라 힘의 크기도 달라집니다

Mass 무게 값이 클수록 움직이는데 더 많은 힘이 필요합니다 

 

 

 

 

 

 

🔻 AddForce  |  캐릭터 제자리 연속 점프

 

AddForce로 인해 버튼을 계속 누르면 연속적으로 점프를 빠르게 하여 높이 올라갑니다

Input Jump는 스페이스바를 누르면 로직을 실행합니다

 

.

.

 

 

 

🔻  스페이스 바로 연속 제자리 점프 & 상하좌우 방향키를 이용하여 힘을 가해 공 움직이기 

 

.

.

각 방향키마다 0.2f의 힘을 주어 가속도를 붙여줄 수 있습니다

5개의 공의 Mass가 모두 동일하기 때문에 줄무늬 공의 힘에 의해 밀려납니다 

 

 

 

 

📣  AddForce의 힘 방향으로 계속 속도 velocity가 증가합니다 

 

📣  Rigidbody를 사용한 이동은 Transform보다 자연스럽습니다 

 


 

👩‍💻​  회전력을 주어 움직이기 

 

📌  AddTorque (Vec)

Vec 방향을 축으로 회전력이 생깁니다 

 

Rigidbody.AddTorque(Vector torque);

 

 

🔻  back 좌표 (0, 0, -1) 를 회전축으로 하여 회전하는 로직입니다 

 

📣  Vec를 축으로 삼기 때문에 이동방향에 주의해야 합니다 

 

.

.