개발블로그
[유니티 C#] GetAxis, GetAxisRaw. 오브젝트가 바라보는 방향으로 이동하기 본문
💪 GOAL
- GetAxis || GetAxisRaw를 이용해서 오브젝트를 이동시킨다.
- 오브젝트가 바라보는 방향으로 이동시킨다.
🔶 Input.GetAxis(string name)
: 키보드와 조이스틱 입력값에 대해 -1에서 1까지의 값을 가진다.
독립적인 프레임 속도로 작동하고, 부드러운 이동이 필요한 경우에 사용한다.
🔶 Input.GetAxisRaw(string name)
: 키보드와 조이스틱 입력값에 대해 -1에서 1까지의 값을 가진다.
키보드나 조이스틱을 눌렀을 때 즉각 반응이 필요한 경우에 사용한다.
실습 버전 :: 2020.3.14f
GetAxis의 매개변수로는 string name이 들어간다.
이곳에 들어가는 string name은 Edit - Project Settings - Input Manager 에서 확인할 수 있다.
Character 스크립트를 생성해서 오브젝트를 움직여보자.
씬에 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);
}
}
인스펙터에서 _speed 값을 설정 후 실행한 결과이다.
방향키로 이동버튼을 누르면 제대로 이동하는 것을 확인할 수 있다.
✔ GetAxisRaw와 GetAxis의 움직임 차이
GetAxisRaw와 GetAxis의 움직임을 확인해보면
GetAxisRaw는 조금 딱딱하게 움직이는 반면 GetAxis는 조금 더 부드럽게 움직이는 것을 확인할 수 있다.
상황에 맞게 GetAxis & GetAxisRaw를 사용하면 될 것 같다.
✔ 오브젝트가 바라보는 방향으로 이동하기
오브젝트의 앞부분을 확인하기 위해서 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를 선언.
② 키보드 방향키 중 어떤 방향키가 눌렸을 때든 움직여야 하므로 조건문 선언.
③ 방향키의 입력에 따라 받은 값을 바라보는 방향을 정해준다.
④ 바라보는 방향을 향해 오브젝트를 회전한다.
방향키를 눌러서 이동할 때 바라보는 방향을 향해 오브젝트가 회전하는 것을 확인할 수 있다.
* 공부하는 단계입니다. 잘못된 부분이 있다면 피드백 부탁드립니다😊
* e-mail : heehee970@naver.com
'Unity > 스크립팅' 카테고리의 다른 글
[유니티 C#] Action 사용 - 이벤트(event), 강한 결합(Tight Coupling) 해소 (0) | 2021.10.13 |
---|---|
[유니티 C#] 유한 상태머신(Finite State Machine, FSM) (0) | 2021.10.13 |
[유니티 C#] Action 과 Func (0) | 2021.09.04 |
[유니티 C#] 유니티의 시간 마법사 Time.timeScale, 그리고 Time.unscaledTime (0) | 2021.08.11 |
[유니티 C#] Time.deltaTime, Application.targetFrameRate을 통한 프레임 제어 (0) | 2021.08.04 |