관리 메뉴

개발블로그

[유니티 C#] GetAxis, GetAxisRaw. 오브젝트가 바라보는 방향으로 이동하기 본문

Unity/스크립팅

[유니티 C#] GetAxis, GetAxisRaw. 오브젝트가 바라보는 방향으로 이동하기

dvmoo 2021. 9. 29. 11:59

💪 GOAL

 - GetAxis || GetAxisRaw를 이용해서 오브젝트를 이동시킨다.

- 오브젝트가 바라보는 방향으로 이동시킨다.

 


 

🔶 Input.GetAxis(string name)

 : 키보드와 조이스틱 입력값에 대해 -1에서 1까지의 값을 가진다.

  독립적인 프레임 속도로 작동하고, 부드러운 이동이 필요한 경우에 사용한다.

 

🔶 Input.GetAxisRaw(string name)

 : 키보드와 조이스틱 입력값에 대해 -1에서 1까지의 값을 가진다.

   키보드나 조이스틱을 눌렀을 때 즉각 반응이 필요한 경우에 사용한다.

 

 


실습 버전 :: 2020.3.14f

 

그림 1 Edit - Project Settings

 

그림 2 Project Settings - Input Manager

 

GetAxis의 매개변수로는 string name이 들어간다. 

이곳에 들어가는 string nameEdit - Project Settings - Input Manager 에서 확인할 수 있다.

 

 

Character 스크립트를 생성해서 오브젝트를 움직여보자.

 

그림 3

 

씬에 Plane(바닥)을 만들고, Capsule을 배치했다.Capsule에  Character 스크립트를 추가하고 스크립트를 작성했다.

using UnityEngine;

public class Character : MonoBehaviour
{
    [SerializeField] float _speed = 0f;

    void Update()
    {
        float xx = Input.GetAxisRaw("Horizontal");
        float zz = Input.GetAxisRaw("Vertical"  );

        transform.Translate(((Vector3.forward * zz) + (Vector3.right * xx)) * _speed * Time.deltaTime);
    }
}

 

 

GIF1 

인스펙터에서 _speed 값을 설정 후 실행한 결과이다.

방향키로 이동버튼을 누르면 제대로 이동하는 것을 확인할 수 있다.

 

 

✔ GetAxisRaw와 GetAxis의 움직임 차이

 

GIF 2 GetAxisRaw 
GIF3 GetAxis

 

GetAxisRaw와 GetAxis의 움직임을 확인해보면

GetAxisRaw는 조금 딱딱하게 움직이는 반면 GetAxis는 조금 더 부드럽게 움직이는 것을 확인할 수 있다.

 

상황에 맞게 GetAxis & GetAxisRaw를 사용하면 될 것 같다.

 

 


✔ 오브젝트가 바라보는 방향으로 이동하기

그림 4

 

오브젝트의 앞부분을 확인하기 위해서 Capsule의 자식으로 Cube를 생성해서 붙여주었다.

 

 

🔶 Quaternion.LookRotation

: 백터 방향을 바라보는 회전 상태를 반환한다.

 

 

using UnityEngine;

public class Character : MonoBehaviour
{
    [SerializeField] float _speed = 0f;
    // ①
    Vector3 _lookDir;

    void Update()
    {
    	// ②
        if (Input.GetKey(KeyCode.UpArrow   ) ||
            Input.GetKey(KeyCode.DownArrow ) ||
            Input.GetKey(KeyCode.LeftArrow ) ||
            Input.GetKey(KeyCode.RightArrow))
        {
            float xx = Input.GetAxis("Horizontal");
            float zz = Input.GetAxis("Vertical"  );

	    // ③
            _lookDir = (xx * Vector3.right) + (zz * Vector3.forward);

	    // ④
            transform.rotation = Quaternion.LookRotation(_lookDir);
            transform.Translate(Vector3.forward * _speed * Time.deltaTime);
        }

    }
}

① 오브젝트에게 바라보는 방향을 알려줘야하기 때문에 Vector3 _lookDir를 선언.

② 키보드 방향키 중 어떤 방향키가 눌렸을 때든 움직여야 하므로 조건문 선언.

③ 방향키의 입력에 따라 받은 값을 바라보는 방향을 정해준다.

④ 바라보는 방향을 향해 오브젝트를 회전한다.

 

 

GIF4

 

 

방향키를 눌러서 이동할 때 바라보는 방향을 향해 오브젝트가 회전하는 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

* 공부하는 단계입니다. 잘못된 부분이 있다면 피드백 부탁드립니다😊

* e-mail : heehee970@naver.com