오브젝트의 이동에는 여러방법이 있다.

Position을 직접이동,

Translate를 이용하여 포지션 변경,

Velocity 적용,

Force 적용.

 

 

물리 실험을 위한 오브젝트 2개를 생성한다.

각 오브젝트에 Rigidbody2d와 2d collider 컴퍼넌트를 추가해준다.

 

<Translate>

위와같이 Translate에 Vector값을 넣을때는 deltaTime을 이용해야한다. 각 프레임마다 같은 값을 적용하기 위해서.

(deltaTime이 뭔지 모르면 검색!)

 

해당 스크립트를 움직일 오브젝트에 추가하면, 오브젝트를 이동 시킬 수 있다.

 

여기서 다람쥐를 빨간 오브젝트에 부딪치면, 계속 튕겨져 나오는 것을 알 수 있다.

왜 이런 현상이 나오냐면,

Translate는 오브젝트를 이동할때 물리 연산을 하지 않기 때문이다.

단순히 Position을 이동 시키기 때문에, 이동후 물리연산으로 튕겨 나오는 것이다.

그래서, 물리 연산이 필요한 이동이라면 사용하지 않는것이 좋다.

Rigidbody BodyType이 Kinematic이라면 사용해도 상관없을듯 하다. 물리연산이 필요하지 않기때문에.

 

 

다음은 Rigidbody의 Velocity를 이용한다.

 

<Velocity>

우선 Rigidbody2D를 사용하기 위해 rigidbody를 가져온다.

 

Velocity는 단순히 원하는 속도를 넣어주면된다.

여기서는 속도가 10이다.

 

 

게임을 실행시켜보면 더이상 오브젝트가 튕겨 나오지 않고 붙어버리는 것을 볼 수 있다.

Velocity는 위치이동을 하기전에 먼저 물리연산을 하기때문에 위와같은 현상이 나오지 않는다.

고로, 물리연산이 필요한 이동은 Velocity나 Force를 사용하면 된다.

 

 

<AddForce>

 

AddForce 말 그대로 힘을 가하는것이다. 그렇기 때문에 연속적으로 힘을 가해주면,

끊임없이 속도가 붙는다.

예를 들어 방망이로 야구공을 한번 치면 AddForce를 한번 부른것과 같다.

 

그렇기 때문에 오브젝트의 이동을 구현하기에는 까다롭고(하지만 이동에 많이 사용함),

폭발이나, 물리적으로 큰힘을 줄 때 사용한다.

 

AddForce의 두번째 매개변수는 다음과 같다.

2D에서는 Acceleration과 VelcotiyChange는 없다.

 

+ Recent posts