유니티 엔진의 이동 구현

유니티 엔진은 게임 개발에 있어서 가장 많이 사용되는 게임 엔진중 하나입니다. 누구나 쉽게 접할 수 있어서 게임 개발을 한번 찍먹해보고 싶다고 생각될 때 주로 쓰입니다.

이번 글에서는 유니티로 제작되는 게임중 가장 기초적인 이동방식 3가지를 소개해드리겠습니다.

 

1.Transform.Translate

Transform.Translate는 해당 오브젝트를(캐릭터가 될 수도 있고, 화살같은 투사체가 될 수도 있음) 특정 좌표로 이동시키는 가장 직관적인 방법입니다. 물리엔진과 상관없이 특정좌표로 이동시키기 때문에 속칭 순간이동에 가까운 이동을 보여줍니다.

순간이동이기 때문에 정상적이면 이동할 수 없는 벽이라던지, 중력을 거스르는 동작, 다른 오브젝트를 관통하는 등의 이동형태를 보여주기 때문에 이동에 제약을 주려면 이동하기 전에 이동이 가능한 곳인지 먼저 체크하는 로직을 넣고 이동이 불가능한 곳이면 이동하지 않게 제약을 줍니다.(ex : 테트리스 블록을 좌우로 움직일때 외벽 너머로 이동 못하게 막기)

 

2.Rigidbody.AddForce

Rigidbody.AddForce는 해당 오브젝트에 물리엔진을 적용시킨체로 힘을 가해서 움직입니다. 이동을 유지시키면 점점 가속도가 붙는 특징이 있습니다. Transform.Translate보다 좀 더 부드럽게 이동합니다. 레이싱카 같이 점점 가속도를 줘야 하는 곳에서 사용할 수 있습니다.

하지만 이 역시도 가속도가 너무 높아지면 예기치 않은 동작이나 벽을 관통하는 등의 문제가 생깁니다. 가속도를 주되 최대 속도에 제한을 줍니다. 가속도를 받아 이동하기전에 최대속도에 도달하면 더이상 가속하지 않게 제약을 줍니다.

 

3.Rigidbody.velocity

Rigidbody.velocity는 AddForce와 달리 가속도 없이 일정속도로 움직입니다. 초보강좌에서 가장 많이 쓰이며 단순하게 이동을 구현하기에 좋습니다.

Transform.Translate와 달리 Rigidbody의 물리연산이 적용되서 중력의 영향을 받습니다. Rigidbody 컴포넌트의 useGravity 속성을 ‘False’로 변경하면 중력의 영향을 받지 않게 할 수 있습니다. 주로 단순한 NPC라던지 투사체 등을 구현하는데 사용됩니다.

이 역시 벽을 관통하는 등의 버그가 발생할 수 있으므로 충돌로직을 설정해줘야 합니다.

댓글 남기기