유니티(Unity 3D) 헬기 비행 시뮬레이터 만들기 Part 2
헬기동체, Main Rotor, Tail Rotor 에 회전 적용하기
앞장에서는 인터넷에서 다운로드한 헬기모델을 유니티 프로젝트로 임포트하여 화면에 헬기를 배치했습니다
여기서는 헬기의 동체와 메인로터 그리고 테일로터를 회전하도록 스크립트를 작성해보겠습니다.
모델에 회전을 적용할 때 미리 확인할 내용은 회전체의 중심이 어디에 위치하는지 확인하고 오브젝트의 중심과 회전의 중심이 일치하지 않는 경우에는 유니티에서 보정한 후에 회전을 위한 스크립트를 적용해야 한다는 것입니다.
오브젝트가 회전할 때는 회전의 중심이 지정되어 있는데, 3D 모델링 툴에서 작성할 때 그 중심이 정해지기 때문에 유니티에 임포트된 회전체의 중심을 변경할 수는 없습니다.
이런 경우에 유용하게 사용할 수 있는 방법은 유니티에서 GameObject > Create Empty 를 선택하여 화면에 형태가 없는 빈 게임 오브젝트를 추가하고 빈 게임 오브젝트에 회전하고자 하는 오브젝트를 자식으로 추가해서 빈 게임 오브젝트에 회전을 적용하면 됩니다
아래의 그림은 헬기의 동체와 메인로터(Main Rotor), 테일로터에 빈 게임오브젝트를 설정하고 회전 중심을 보정하여 회전을 적용한 결과입니다.
화면을 캡쳐하여 애니메이션 gif 파일로 저장해주는 툴은 GifCam 이라는 프로그램인데 프리웨어이고 다음 링크를 통해 다운로드할 수 있다
http://blog.bahraniapps.com/category/gifcam/
헬기동체, Main Rotor, Tail Rotor 에 회전을 적용한 결과 화면
프로젝트 설정 및 회전을 적용한 스크립트
위의 화면에서 Hierarchy 뷰에 표시된 사각형은 빈 게임 오브젝트이며 그 안에 각각 회전하는 오브젝트를 자식으로 포함하고 있다.
프로젝트 뷰의 Assets/Scripts 안에 있는 스크립트는 아래와 같이 작성하여여 Hierarchy 뷰의 빈 오브젝트로 드래해주면 된다
Helicopter.cs
using UnityEngine; using System.Collections; public class Helicopter : MonoBehaviour { public float rotSpeed; void Start () { rotSpeed = 20.0f; } void Update () { transform.Rotate (Vector3.up * Time.deltaTime * rotSpeed); } }
MainRotor.cs
using UnityEngine; using System.Collections; public class MainRotor : MonoBehaviour { public float rotSpeed; void Start () { rotSpeed = 1500.0f; } void Update () { transform.Rotate (Vector3.up * Time.deltaTime * rotSpeed); } }
TailRotor.cs
using UnityEngine; using System.Collections; public class TailRotor : MonoBehaviour { public float rotSpeed; void Start () { rotSpeed = 1500.0f; } void Update () { transform.Rotate (Vector3.right * Time.deltaTime * rotSpeed); } }
다음 장에서는 헬기가 지상에서 이동하는 기능을 구현해보겠습니다