유니티(Unity 3D) 헬기 비행 시뮬레이터 만들기 Part 03
헬기의 지상 이동 구현
앞장에서는 헬기 모델의 동체와 메인로터, 테일로더에 회전을 적용해 봤는데, 여기서는 헬기가 지상에서 이동하는 기능을 구현해보겠습니다.
전후 방향키(UP, DOWN)를 이용하여 헬기의 이동속도를 결정하고, A, D 키를 이용하여 헬기의 이동방향을 조종하도록 해보겠습니다.
즉, UP 키를 오래 누르고 있을수록 이동속도는 증가하고 UP 키에서 손을 떼면 그 속도가 그대로 유지되며 DOWN키를 누르면 속도가 줄어들고 결국 속도가 0에 도달하면 이어서 후진이 됩니다.
A 키를 누르면 헬기의 마스트를 중심으로 동체가 왼쪽으로 회전하고, D키는 우측으로 회전하게 됩니다.
A 혹은 D키를 오래 누르고 있을수록 회전속도가 가속되고, UP, DOWN 키도 오래 누르고 있을수록 가속되는 특성은 동일합니다
A, D 키를 동시에 누르면 지상 이동시 브레이크가 작동되어 헬기가 지상에서 이동하던 헬기가 멈추게 됩니다. 브레이크는 즉시 작동하는 것이 아니라 이동속도에 따라서 감속이 완료되는 시간만큼 이동하다가 결국 멈추도록 스크립트를 작성했습니다.
지상이동과 브레이크 동체의 회전을 테스트한 결과 ( gif 애니메이션의 프레임 수가 낮아서 실제보다 부드럽게 보이지는 않음)
앞장에서 작성했던 스크립트에 이동기능을 추가함
Helicopter.cs
using UnityEngine; using System.Collections; public class Helicopter : MonoBehaviour { public float rotSpeed; public float moveSpeed; void Start () { rotSpeed = 0.0f; moveSpeed = 0.0f; } void Update () { if (Input.GetKey (KeyCode.A)) { rotSpeed += -0.1f; } else if (Input.GetKey (KeyCode.D)) { rotSpeed += 0.1f; } else { if(rotSpeed>0) rotSpeed += -0.2f; else if(rotSpeed<0) rotSpeed += 0.2f; } // 지상에서 헬기동체의 Y축 중심 회전 transform.Rotate (Vector3.up * Time.deltaTime * rotSpeed); //UP, DOWN 키를 동시에 누르면 브레이크를 작동한다 if (Input.GetKey ("up") && Input.GetKey ("down")) { if(moveSpeed>0) moveSpeed += -0.01f; else if(moveSpeed<0) moveSpeed += 0.01f; if(Mathf.Abs(moveSpeed)<0.05f) moveSpeed = 0f; } // UP 키는 전방속도, DOWN키는 후방속도 조절 if (Input.GetKey ("up")) { moveSpeed += 0.002f; } else if (Input.GetKey ("down")) { moveSpeed += -0.002f; } // 전방행(Z축방향)으로 1초에 1m 속도로 이동 transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed); } }
다음 장에서는 헬기가 수직으로 이륙 및 강하하는 기능을 구현해보겠습니다