본문 바로가기
C#

[C#][Unity] 유닛 이동 기능 만들기

by teamnova 2021. 8. 29.

안녕하세요.

스틱 코드를 사용하여 키보드 A, W, S, D를 입력하면 유닛(오브젝트)이 이동하는 기능을 만들어보겠습니다.

 

실행 환경

개발 툴: Unity 2020.3.9f1

IDE : Rider


예제에 사용할 오브젝트들을 만들어보겠습니다.

 

유니티 프로젝트 실행 후

Hierarchy 창에서 우클릭하면 아래와 같은 사진처럼 화면이 나오는데

여기서 Terrain, Cube 오브젝트를 선택해서 생성해줍니다.

 

다음으로 큐브의 위치를 Terrain 정중앙으로 배치하기 위해 큐브 오브젝트를 선택 후

Transform -> Position 값을 x: 50, y: 1, z: 50으로 설정합니다.


다음으로 C# 코드를 실행하기 위한 설정 작업을 진행하겠습니다.

 

1. C# 파일 생성

Assets 창 안에서 마우스 우클릭하면 아래와 같은 사진처럼 메뉴 창이 나오는데

Create -> C# Script를 선택해 줍니다. 파일 이름은 MoveScript로 만들어 보겠습니다.

 

2. 오브젝트에 C# 파일 추가

게임 오브젝트 선택 후 만들었던 C#파일을 드래그 앤 드롭으로 Inspector 창 안으로 넣어주면,

아래 사진과 같이 내용이 추가되는 것을 확인할 수 있습니다.


다음 예제에 사용할 코드를 작성해보겠습니다.

 

스틱 코드를 활용한다면, 클래스에서 'mo' 까지만 작성했을 때 '유닛 이동 기능 생성' 이벤트가 나타납니다.

 

'유닛 이동 기능 생성' 이벤트를 누를 경우 코드가 자동으로 완성됩니다.

함수를 사용하기 위해 FixedUpdate() 함수 안에 아래 사진처럼 함수 이름을 추가해줍니다.

 

<최종 코드>

using UnityEngine;

public class MoveScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Move();
    }
    
    void Move()
       {
           float _speed = 10f;
    
           // Quaternion.LookRotation: 벡터 매개변수의 방향으로 쳐다보게끔 자신의 방향을 회전시켜주는 함수
           // Quaternion.Slerp: 좀 더 부드럽게 회전시켜주는 함수
           if (Input.GetKey(KeyCode.W)) {
               transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), 0.2f); 
               transform.position += Vector3.back * Time.deltaTime * _speed;
           }
           
           if (Input.GetKey(KeyCode.S)) {
               transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), 0.2f); 
               transform.position += Vector3.forward * Time.deltaTime * _speed;
           }
           
           if (Input.GetKey(KeyCode.A)) {
               transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), 0.2f); 
               transform.position += Vector3.right * Time.deltaTime * _speed;
           }
           
           if (Input.GetKey(KeyCode.D)) {
               transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.left), 0.2f); 
               transform.position += Vector3.left * Time.deltaTime * _speed;
           }
       }
}

프로젝트를 실행하면 아래 사진같이 키보드 A, W, S, D를 입력하면 오브젝트가 이동하는 것을 확인할 수 있습니다.