[Unity] 사용자의 입력으로 오브젝트 이동시키기

스윗포테이토·2023년 1월 5일
0

유니티

목록 보기
7/7

Input class

유니티에서 입력을 감지할 때 일반적으로 Input 클래스를 사용한다.

methods

  • GetKeyDown() - 키가 눌리는 순간을 감지
  • GetKeyUp() - 키를 놓는(release) 순간을 감지
  • GetKey() - 키가 누르고(hold) 있는지 감지

위의 3개가 일반적으로 쓰이는 메소드이며, 파라미터로는 키코드 또는 이름을 줄 수 있다.

KeyCode

우선 키코드는 키보드의 있는 키에 매핑된 번호라고 볼 수 있으며,

KeyCode.Space // space bar
KeyCode.Escape // Esc

위와 같이 불러서 쓸 수 있다.

즉, 사용자가 화살표 키를 누를 때마다 캐릭터를 이동시키고 싶다면, 아래와 같은 로직을 사용할 수 있다.

if (Input.GetKeyDown(KeyCode.RightArrow) {
	// 오른쪽으로 이동
    transform.Translate(Vector3.right * Time.deltaTime * step);
}
if (Input.GetKeyDown(KeyCode.LeftArrow){
	// 왼쪽으로 이동
    transform.Translate(Vector3.left * Time.deltaTime * step);
}

그러나, 위와 같이 짠 경우, 캐릭터의 이동은 끊겨 보일 것이다. 우선 GetKeyDown 메소드를 사용했기 때문에, 사용자가 키를 한번 누를 때 마다 이동이 한번씩만 이루어질 것이다. 오른쪽 끝으로 가고 싶은 경우 키를 연타해야 하는 것이다. 이럴 때 사용할 수 있는 메소드로 GetAxis()가 있다.

GetAxis()

  • GetAxis()
    가상 축에 대해 입력값을 [-1, 1] 사이의 float 형으로 반환해주는 메소드이다.

파라미터로 axisName를 받는데, 이 축은 유니티 에디터의 Input Manager에서 작성할 수 있다.

[Unity Editor] > [Edit] > [Project Settings]

[Input Manager] > [Axes]

이미 작성된 축이 몇가지 있다.
이 중 "Horizontal"을 열어보면, Positive Button으로 right, Negative Button으로 left 키가 지정된 것을 볼 수 있다. 즉, 해당 축의 입력을 받으면 좌우 화살표 키의 입력을 [-1, 1] 범위로 돌려준다는 것이다.

위의 코드를 GetAxis()를 사용해서 다시 구현해보면 아래와 같다.

float horizontalInput = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * Time.deltaTime * speed * horizontalInput);

오른쪽이 Positive라고 했으므로 Vector3.right를 단위 벡터로 사용하여 이동을 주었다.


reference

Document - Input Class
Document - KeyCode

profile
나의 삽질이 미래의 누군가를 구할 수 있다면...

0개의 댓글