입력 액션
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 46번째.
키를 하나씩 테스트하면 스크립트가 키보드에 종속됩니다. 대신 액션은 플레이어가 하는 동작의 이름을 지정하고, 프로젝트에서는 어떤 키, 스틱, 버튼이 해당 동작을 실행하는지 지정합니다. 새 Unity 6 프로젝트에는 이러한 액션 세트(InputSystem_Actions 에셋, 프로젝트 전체 액션으로 설정됨)가 포함되어 있으며, Player 맵에는 Move(WASD, 화살표 키, 게임패드의 왼쪽 스틱), Look(마우스 또는 오른쪽 스틱), Attack(마우스 왼쪽 버튼 및 Enter), Interact(E, 누르고 있는 동안), Crouch(C), Jump(Space 및 게임패드의 남쪽 버튼), Previous 및 Next(1 및 2), Sprint(Left Shift)이 있습니다. 이 액션들은 시작 시 활성화되어 있으며, InputSystem.actions.FindAction("Jump")를 사용하면 이름으로 액션을 가져올 수 있습니다. 이 횡스크롤 집게 크레인은 x와 y축으로 움직이며 Jump로 집습니다.
using UnityEngine;
using UnityEngine.InputSystem;
public class ClawCrane : MonoBehaviour
{
public float speed = 3f;
private InputAction moveAction;
private InputAction jumpAction;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
jumpAction = InputSystem.actions.FindAction("Jump");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;
if (jumpAction.WasPressedThisFrame())
Debug.Log("Grab!");
}
}액션은 Start에서 한 번 가져와 InputAction 필드에 보관합니다. Move는 Vector2를 반환합니다. x는 키보드의 오른쪽과 왼쪽, y는 위쪽과 아래쪽이며, 값은 정규화되므로 W와 D를 함께 누르면 (1, 1)이 아니라 (0.71, 0.71)이 됩니다. 이 크레인은 횡스크롤 게임이므로 y를 높이로 사용합니다. 위에서 내려다보는 게임이라면 z에 사용합니다. 버튼 액션은 키 입력과 마찬가지로 WasPressedThisFrame(), WasReleasedThisFrame(), IsPressed()로 확인합니다. 두 가지 실수는 예외를 발생시킵니다. 이름의 철자를 틀리면 FindAction이 null을 반환하고(처음 읽을 때 NullReferenceException 발생), Move에서 ReadValue<Vector3>()를 사용하면 키를 누르는 즉시 InvalidOperationException이 발생합니다. Move는 Vector2를 사용하기 때문입니다.
챌린지
중급측량사는 위에서 내려다본 설원을 측량하며, 길에 꽂을 flags(3개)를 가지고 있습니다. 스크립트에는 speed(4), flags, flagPrefab과 목록 planted가 있습니다. 프로젝트의 액션을 사용하세요:
- Move는 초당
speed단위의 속도로 측량사를 눈밭 위로 이동시킵니다. x축을 따라 오른쪽과 왼쪽으로, z축을 따라 위쪽과 아래쪽으로 움직입니다. - Jump를 누를 때마다 깃발 하나를 꽂습니다. 측량사의 x와 z 위치에 y값 0.75로
flagPrefab의 복사본을 만들고planted에 추가합니다.flags중 하나를 사용하고,Flags left: 2와 같이 남은 개수를 기록합니다. 깃발이 남아 있지 않으면 Jump를 눌러도 아무것도 꽂지 않습니다. - Attack(왼쪽 클릭)을 누를 때마다 마지막으로 꽂은 깃발을 뽑습니다. 깃발을 파괴하고 목록에서 제거하며,
flags가 1 증가하고 같은 문장을 기록합니다.
플레이를 누르고 깃발 세 개를 꽂은 다음 하나를 뽑고, 확인을 누르세요.
직접 해보기
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Surveyor : MonoBehaviour
{
public float speed = 4f;
public int flags = 3;
public GameObject flagPrefab;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// Move, Jump, Attack 액션을 찾습니다
}
void Update()
{
// Move로 이동하고, Jump로 깃발을 꽂고, Attack으로 깃발 하나를 뽑습니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.