본문 바로가기

Unity3D/Object Movement

Unity3D Object Movement example

Unity3D에서 오브젝트(GameObject)를 이동하게 하는 예


테스트 환경

Windows 7, Unity3D 4.0, C#


1. Unity3D를 실행한다


2. 메뉴에서 GameObject > Create Other > Cube 를 선택하면 Scene 뷰에 큐브가 하나 나타난다.

  - 위에서 생성한 가장 간단한 Cube를 이동하는 방법을 알아보는 것이 이번글의 목적이다


3. Project 뷰의 Assets 항목에서 마우스 우측 > Create > Folder 선택 > 생성된 폴더의 이름을 Scripts 로 변경한다.

  - 위에서 생성한 폴더에 스크립트를 생성하려고 한다


4. 새로 생성한 Scripts 폴더 위에서 마우스 우측 > Create > C# Script > 생성된 스크립트의 이름을 임의로 CubeMovement 로 변경하고 <엔터>를 누른다

  - 위와같이 새로 생성된 스크립트의 아이콘에서 이름을 변경하고 엔터키를 누르면 동일한 이름의 C# 클래스가 생성된다.


5. 스크립트 아이콘을 마우스로 드래그하여 Hierarchy 뷰에 있는 Cube 안에 넣어주면 스크립트는 Cube 오브젝트를 구성하는 하위 콤포넌트로서 스크립트가 기능하게 된다. 또는 Scene 뷰에서 Cube가 선택된 상태에서 스크립트 아이콘을 드래그하여 Inspector 뷰의 하단으로 옮기면 위와 동일한게 Cube의 콤포넌트로서 스크립트가 등록된다.


6. Scene 뷰에서 Cube가 선택된 상태에서 Inspector 뷰의 하단에 Cube의 콤포넌트로서 CubeMovement 스크립트가 등록되어 있는 것을 확인한다.


7. 위에서 생성한 CubeMovement 스크립트 아이콘을 더블클릭하거나 마우스우측을 눌러 Open을 선택하면 MonoDevelop 라는 이름의 에디터에 CubeMovement 클래스가 기본코드를 가지고 열린다. 아래 참조

using UnityEngine;

using System.Collections;


public class CubeMovement : MonoBehaviour {


// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

}


8. 위의 기본 코드를 아래처럼 변경하여 Cube가 우측으로 이동하도록 작성한다

using UnityEngine;

using System.Collections;


public class CubeMovement : MonoBehaviour {

// Use this for initialization

void Start () {

this.transform.position = new Vector3(0f,0f,0f); // Cube의 초기 위치를 지정한다

}

// Update is called once per frame

void Update () {

this.transform.Translate(new Vector3(0.1f,0f,0f)); // Cube가 매 프레임마다 0.1F 단위로 이동하게 한다. 상대적인 위치를 지정함

}

}


9. 위의 코드를 저장하고 Unity3D 화면의 상단에 있는 삼각형 버튼(Play 버튼)을 눌러서 Game 뷰에서 Cube가 우측으로 이동하는 것을 확인한다


시스템과 무관하게 일정한 초당 속도를 설정하는 예


10. 위의 코드에서 이동속도는 매 프레임당 0.1F 씩 이동하는 것이므로 시스템에 따라서 속도가 모두 다를 수 있다. 그러므로 실행되는 시스템에 무관하게 속도를 제어하기 위해서는 매 프레임에 소요되는 시간에 따라서 이동량도 달라져야 한다. 다음과 같이 설정하면 매초당 1.0F 의 속도를 일정하게 유지할 수 있다.

  this.transform.Translate(new Vector3(1f,0f,0f) * Time.deltaTime);


눌린 방향키에 따라서 이동방향 전환

// Update is called once per frame

void Update () {

//좌우 방향키 감지

float xVal = Input.GetAxis("Horizontal"); //right:+, left:-

//상하 방향키 감지

float yVal = Input.GetAxis("Vertical");   //up:+, down:-

Debug.Log("x:"+xVal+", y:"+yVal);

this.transform.Translate(new Vector3(1f,0f,0f)* Time.deltaTime * xVal);

this.transform.Translate(new Vector3(0f,1f,0f)* Time.deltaTime * yVal);

}