-
[Unity]유니티 입문하기 6-2(키 입력, 이동 구현)프로그래밍 2023. 8. 2. 14:15
이전 글에서는 스크립트를 통해 오브젝트와 컴포넌트에 접근하고, 이를 이용해 오브젝트를 비활성화해보거나 위치를 바꿔보거나 했습니다.
이번 글에서는 사용자의 키 입력을 인식해 플레이어 캐릭터가 움직이도록 구현해보겠습니다.
Input.GetKey()
키보드 입력을 인식하기 위해서는 Input 클래스의 GetKey() 메서드가 필요합니다.
GetKey() 메서드는 특정한 키의 코드를 입력받아, 해당 키를 누른 상태라면 true를, 해당 키가 눌려있지 않다면 false를 반환하는 메서드입니다.
물론 각 키가 어떤 코드를 가지고 있는지 외울 필요는 없고, KeyCode.(원하는 키)를 이용하면 해당 키의 키코드를 바로 사용할 수 있습니다.
void Update() { if(Input.GetKey(KeyCode.W)){ this.transform.Translate(0, 1, 0); } }
이렇게 Update() 메서드 안에 if문과 GetKey() 메서드를 조합하면, 매 프레임마다 키 입력을 확인해 안쪽의 코드를 수행하는 오브젝트를 만들 수 있습니다.
그런데, 못 보던 메서드가 if문 안에 들어있습니다.
transform.Translate() 메서드는 x, y, z입력한 값만큼 오브젝트의 위치를 이동시켜 주는 메서드입니다.
이 메서드 덕분에 transform.position에 직접 접근하지 않아도 오브젝트의 위치를 조절할 수 있죠.
위 코드를 PlayerController에 넣은 뒤 실행하여 W키를 눌러보면, 오브젝트가 위로 이동하는 것을 볼 수 있습니다.
void Update() { if(Input.GetKey(KeyCode.W)){ this.transform.Translate(0, 1, 0); } if(Input.GetKey(KeyCode.A)){ this.transform.Translate(-1, 0, 0); } if(Input.GetKey(KeyCode.S)){ this.transform.Translate(0, -1, 0); } if(Input.GetKey(KeyCode.D)){ this.transform.Translate(1, 0, 0); } }
움직이고자 하는 방향에 맞춰 값을 적절하게 변환해 A, S, D키도 인식하게 만들어봤습니다.
그런데, 코드를 직접 실행해 보니 매 프레임마다 오브젝트를 1씩 움직이는 것은 너무 빠른 것 같습니다.
이 숫자를 0.1 정도로 줄이면 딱 좋을 것 같은데, 이렇게 속도를 바꿔야 할 때마다 각 if문의 숫자를 하나하나 바꿔주는 것은 너무 비효율적인 것 같습니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 0.05f; void Update() { if(Input.GetKey(KeyCode.W)){ this.transform.Translate(0, speed, 0); } if(Input.GetKey(KeyCode.A)){ this.transform.Translate(-speed, 0, 0); } if(Input.GetKey(KeyCode.S)){ this.transform.Translate(0, -speed, 0); } if(Input.GetKey(KeyCode.D)){ this.transform.Translate(speed, 0, 0); } } }
그러니, 이렇게 speed 변수를 선언해서, 키 입력을 받았을 때 프레임당 이동하는 값을 speed 변수로 설정해 주게 되면
speed 변수의 값만 조절하게 되면 모든 방향으로의 이동속도가 바뀌게 됩니다.
0.1f를 기준으로 조금씩 값을 조절해 가며, 마음에 드는 속도를 찾아보도록 합시다.
또한, 변수를 선언할 때 public을 붙였기 때문에, 해당 변수는 인스펙터 창에서도 확인하고 편집할 수 있습니다.
'프로그래밍' 카테고리의 다른 글
[Unity]유니티 입문하기 6-3 번외(한번에 투사체 여러개 발사하기) (0) 2023.08.03 [Unity]유니티 입문하기 6-3(투사체 발사) (0) 2023.08.02 [Unity]유니티 입문하기 6-1(오브젝트 활성화/비활성화, 위치 조정) (0) 2023.08.01 [Unity]유니티 입문하기 5-5(C# 기초개념 - 제어문) (0) 2023.07.28 [Unity]유니티 입문하기 5-4(C# 기초개념 - 연산자 심화) (1) 2023.07.27