728x90

이 글은 [따라하면서 배우는 고박사의 유니티 기초] 강의의 게임오브젝트 이동 강의를 정리한 글이다. 

 

학습 페이지

 

www.inflearn.com

 


프로젝트 생성

스크립트 환경에서 물리(장애물)가 없는 환경에서 게임 오브젝트를 이동해볼 것이다.

2D 프로젝트를 생성한다.


 플레이어 오브젝트 생성

오브젝트를 이동시키기 위해 player 이미지를 가져온 후, 2D 오브젝트> Sprite 에서 원하는 오브젝트를 생성한다.

오브젝트의 이름을 Player로 설정하고, 저장한 이미지를 sprite 오브젝트 > sprite Renderer 에 넣는다. 

 

 


Transform.position

오브젝트의 위치를 Transform 영역에서 조정할 수 있으며, 포지션 정보를 바꾸게 되면 오브젝트의 위치가 바뀌게 된다, 

실제 게임 진행시에는 유니티 에디터나 inspector view와 같은 화면을 볼 수 없기 때문에 스크립트에 있는 코드를 이용하여 포지션을 움직여야한다. 

유니티에서는 각각의 게임 오브젝트에 소속된 컴포넌트에 접근할 수 있으며, 컴포넌트 내부에 클래스에 있는 변수 데이터를 사용하거나 수정하고, 사용자가 만든 함수를 호출할 수 있다.

 

 

 

Movment2D라는 스크립트를 생성한 다음에 player에 컴포던트로 적용하자.

 

 

​이후에 스크립트 편집기를 열어서 코드를 수정한다. 

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private void Awake()
    {
        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        transform.position = transform.position + new Vector3(1, 0, 0) * 1;
    }
}

같은 게임 오브젝트에 포함되어 있는 transform의 경우 소문자를 이용하여 접근할 수 있다.

transform.position은 내가 소속되어 있는 게임 오브젝트의 위치 즉 나의 위치라고 생각할 수 있다. 

위의 코드는 오른쪽 방향으로 1만큼 움직이는 동작이 실행된다.

 

 


Update() 함수 사용과 Time.deltaTime

 

게임이 실행되는 동안 계속 움직이도록 하고 싶다면 Update() 함수를 사용하면 된다.

Update 함수에서 지속적으로 이동 회전 등을 증감 행위를 했을 때에는 Time.deltaTime을 곱해주어야 한다.

Update()가 FPS에 따라 1초에 몇 번 호출될지 결정되기 때문이다.

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private void Update()
    {
        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        transform.position += Vector3.right * 1 * Time.deltaTime;
    }
}

방향 값이 1 단위이고 Time.deltaTime가 곱해져 있다면, 속도 값이 1초에 움직이는 거리와 동일하게 설정된다.

위의 예시 코드는 1초에 오른쪽으로 1만큼 움직이도록 동작한다. 

 

 

Time.deltaTime

 
 

 


Input.GetAxisRaw()

원하는 방향키를 입력하였을 때, 이동 방향을 제어할 수 있도록 한다. 코드는 아래와 같이 작성되었다.

 

위의 코드에서 사용되는 Input Class는 유니티에서 제공하는 클래스로 키보드, 마우스, 자이로센서 등의 모든 입력과 관련된 기능을 제공한다. 

Input.GetAxisRaw() 함수는 유니티에 미리 설정된 단축키를 이용하는 함수이다. 설정된 단축키는 Edit > Project Setting > Input Manager 에 들어가면 확인할 수 있다. 

 

위의 코드를 실행하면, 원하는 방향으로 상하좌우 움직일 수 있다. 

 

+ Recent posts