이번 포스팅에서는 저번에 포스팅한 transform.Translate를 이용해서 간단한 이동을 구현해보겠습니다. transform.Translate는 순간이동형 이동으로 물리적인 연산보다는 단순 이동에 관련된 부분에 사용합니다.
보드게임의 말의 이동이나 고전 탑뷰 RPG에서 캐릭터의 이동 등에 주로 사용됩니다.
1. 예문
1.1 WASD키 입력으로 X, Y에 값을 직접 넣기

이 스크립트는 방향키 WASD의 입력에 따라서 moveX, moveY의 값이 정해지면서 방향이 정해지고 그 방향에 속도와 시간을 곱해서 이 스크립트가 심겨진 오브젝트를 이동시킵니다.
예를들어 W,A를 같이 입력하면 moveX는 -1, moveY는 1이 들어가게 되며 Vector3타입 move에 좌표값으로 (-1, 1, 0f)가 들어가고 여기에 속도와 시간값이 들어가면서 좌상단으로 오브젝트가 지속적인 순간이동을 합니다. 속도와 시간의 곱의 값이 그리 크지 않기 때문에 실제로는 매우 짧은거리를 지속적으로 순간이동하기 때문에 부드럽게 보입니다.

transform.Translate()는 움직일 오브젝트의 transform타입.Translate()를 입력하게 되는데 만약 이 스크립트가 들어가는 오브젝트를 움직인다면 this.transform.Translate()가 되고 transform특성상 this.를 생략할 수 있어서 transform.Translate()가 됩니다.
만약 이 스크립트가 담긴 오브젝트가 말고 다른 오브젝트를 이동시킨다면 Start()보다 위에서 Transform otherObject; 를 만들고 otherObject를 인스펙터에서 box를 드래그하거나 GameObject.Find(“Box”); 등으로 할당한 후에 otherObject.Translate() 형식으로 사용할 수 있습니다.
1.2 GetAxisRaw를 통해 방향값 받기

위에 예문에서는 단순히 x, y라는 변수에 단순 WASD 입력으로 -1, 1값을 미입력시 강제로 0을 반환합니다. 하지만 이것은 방향키 입력에 대해서 반응하는 것이 아닌 WASD키 입력으로 반응하는 것이기 때문에 WASD가 아닌 다른 키로 이동하고 싶다면 문제가 발생합니다.
그럴 때 GetAxisRaw를 사용해서 수평(Horizontal)과 수직(Vertical) 이동값을 받아서 사용합니다. 이 기능을 사용하면 FPS게임에서 주로 쓰는 WASD말고도 숫자키 옆에있는 방향키에도 반응을 하게 됩니다. 물론 무엇이 적합한지는 사용자마다 다르니 원하는대로 사용하면 됩니다.
2D의 경우 지금의 예문처럼 Vector3에 한축을 사용하지 않거나(Z축을 0f로 사용) Vector3대신 Vector2를 사용하면 되고 좌표값은 Horizontal, Vertical만을 사용하면 됩니다.
오늘은 간단하게 오브젝트를 키 입력받고 순간이동형태로 움직이는 transform.Translate에 대해 알아봤습니다. 물리연산을 생각하고 이동하는 기능은 아니기 때문에 최신게임보다는 물리적용이 되지 않는 옛날 게임의 이동구현을 할 때 유용합니다.
예를들면 단순 비행기 슈팅게임에서 캐릭터 이동을 해도 되고 공격시 나가는 미사일도 이런방식으로 이동시켜도 됩니다. 그 외에도 단순 순간이동이기 때문에 다른곳에서도 유용하게 쓸 수 있습니다.
중앙기준 배경의 80%정도만 인게임 화면으로 사용하고 외곽 지역을 평소에 보여주지 않다가 지진같이 흔들리는 효과를 줄 때 Translate를 반복하는 형식으로도 사용할 수도 있습니다. 더 적합한 방법이 있더라도 내가 원하는거 구현하는게 재밌는거니 최적화라던지 복잡한건 이후에 생각하는게 좋아보입니다.
이것으로 이번 포스팅을 마칩니다.