본문 바로가기
TIL/유니티

오브젝트 움직이기(4)

by jaemmm 2020. 10. 7.

다시 돌아온 유니티 공부 시간!!!! 짝 짝 짝

 

이번에도 저번과 마찬가지로 오브젝트를 움직이는 법에 대해서 배워보도록 하겠습니다.

 


시작하기에 앞서 유니티에서는 Rigidbody를 지원해주는데 이 Rigidbody 유니티 안에서 조정하기에는 한계가 있기 때문에 직접 스크립트로 들고 와서 써주어야 합니다.

 

그렇기에 스크립트에서 Rigidbody를 변수로써 사용할려고 합니다.

 

코드를 새로 만들기 위해서는 처음에 배운것처럼 선언 >> 초기화 >> 호출을 해줘야 합니다. 

 

 

 

GetComponent는 유니티의 컴포넌트를 가지고 오겠다는 의미입니다.

 

 

 

먼저 오브젝트에 속도를 설정하는 방법에 대해서 알아보겠습니다.

 

Rigidbody에서 속도는 velocity이며 방향은 left를 넣었습니다.

 

 

위에서 떨어지면서 왼쪽으로 움직이기는 했으나 바닥에 닿은 뒤로는 움직이지 않습니다.

 

움직이지 않은 이유는 Box Colider가 아래의 사진과 같이 사각형으로 되어있기 때문입니다.

 

만약 원형이었다면 계속해서 왼쪽으로 움직일 것입니다.

 

 

다음으로는 방향에 따른 속도를 직접 정해보도록 하겠습니다.

 

 

당연히 2D이기때문에 x와 y값만 입력하면 됩니다.

 

 

하지만 이 코드는 현재 Awake함수 안에 들어있는데 FixedUpdate에 들어가면 또 다른 결과가 나오게 됩니다.

 

 

결과가 다르게 나오는 이유는 저번 함수를 정리했던 시간에 알아본 적이 있는데 다시 한번 설명하자면, Awake 및 Start는 게임이 시작될 때 딱 한 번만 실행되는 함수이며 Update와 FixedUpdate는 게임이 실행되는 동안에 계속해서 불러오는 함수이기 때문입니다.

 

물론 Rigidbody 관련 코드는 FixedUpdate 함수에 써주는 것이 가장 좋습니다. 

 

 


 

다음으로 오브젝트에 힘을 가해서 움직이는 법에 대해서 알아보겠습니다.

 

 

 

힘을 가하는 것은 AddForce를 사용하면 되는데 그 안에는 속도와 가하는 힘의 타입을 기입해야 합니다.

 

여기서도 아까와 같이 Vector에는 직접 방향에 따른 속도를 쓸 수도 있습니다.

 

2D에서는 힘의 타입은 두가지로 Impulse와 Force가 있습니다.

(Force는 다음 시간에 따로 다루도록 하겠습니다.)

 

Impulse : 순간적인 힘

 

Force : 연속적인 힘

 

참고로 Impulse와 Force는 모두 오브젝트 무게의 영향을 받습니다.

 

Impulse

 

마치 점프하는 것처럼 순간적으로 위로 팍 튀는 것을 볼 수 있습니다.

 

이렇게 되면 이제 오브젝트가 점프를 하는 것도 구현할 수 있을 것입니다.

 

GetButtonDown안에 들어가는 것은 유니티의 Input Manager에 Jump를 쓰겠습니다.

 

이대로 실행하면 오브젝트가 점프가 되는 것은 맞으나 한 가지 문제점이 생깁니다.

 

 

 

보통 점프라 하면 한번 점프를 하게되면 바닥에 닿아야 다시 점프를 할 수 있어야 합니다.

 

(물론 2단 점프를 할 수도 있습니다만)

 

지금 저 상태는 spcae를 연속해서 누르고 있었습니다.

 

한번 점프를 하면 바닥에 닿기전까지는 점프를 못하도록 해야 합니다.

(이것은 다음 시간에 다뤄보도록 하겠습니다.)

 

 

이제 이 가하는 힘을 받아서 오브젝트를 움직여 보도록 하겠습니다.

 

 

 

 

 

뭔가 많이 이상하지만 그래도 점프와 이동을 구현했다는 거에 큰 만족감이 생깁니다. ㅎㅎㅎㅎ

 

 


 

 

이렇게 오늘은 Rigidbody를 컴포넌트에서 가져와서 속도와 힘이 가해지는 타입에 대해서 배워보았습니다.

 

점점 어려워지는 내용도 많아지고 배웠던 내용들도 끊임없이 쓰이기 때문에 처음부터 다시 복습할 필요가 있을 것 같습니다.

 

오늘의 배움은 여기까지 하도록 하겠습니다.

 

투 비 컨티뉴

 

'TIL > 유니티' 카테고리의 다른 글

오브젝트 움직이기(3)  (0) 2020.09.26
오브젝트 움직이기(2)  (0) 2020.09.22
오브젝트 움직이기(Input)  (0) 2020.09.19
2D 애니메이션 (2)  (0) 2020.09.01
2D 애니메이션  (0) 2020.09.01

댓글