[내일배움캠프 TIL] Unity의 Input System (2)

KYJ의 Tech Velog·2023년 9월 27일
0

TIL

목록 보기
39/71

Today I Learned

오늘은 Unity의 Input System에 대해 이야기해보고자 합니다.

Today I Done

이전 TIL에 이어서 오늘은 Input System의 입력값을 스크립트에 전달하는 것을 이야기해보도록 하겠습니다.

Input System

이전 TIL에서 Player 오브젝트에 추가했던 Player Input 컴포넌트의 Behavior를 무엇으로 설정하냐에 따라 스크립트 작성 방식이 달라집니다.

  • Send Messages, Broadcast Messages : Unity의 Send Message 기능을 사용하여 특정 함수를 호출
  • Invoke Unity Events, Invoke C Sharp Events : Unity나 C#의 이벤트 기능을 사용

스크립트에서 Input System의 기능을 사용하려면 다음과 같은 namespace를 적용해야 합니다.

using UnityEngine.InputSystem;

Send Messages

  • 특정 키 입력이 들어오면 특정 함수를 자동으로 호출
  • Broadcast Messages의 경우, 하위 계층에 있는 오브젝트들까지 제어 가능
  • 함수명이 "On + Actions name"으로 구성 (Move라는 액션이라면 함수명은 OnMove)

Move 액션이 있다고 가정합니다. 다음과 같이 OnMove 함수를 이용할 수 있습니다.

private Vector3 moveDirection;
private float moveSpeed = 3f;

void Update()
{
	bool hasControl = (moveDirection != Vector3.zero)
    
    if (hasControl)
    {
    	transform.rotation = Quaternion.LookRotation(moveDirection);
        transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
	}
}

void OnMove(InputValue value)
{
	Vector2 input = value.Get<Vector2>();
    
    if (input != null)
    {
    	moveDirection = new Vector3(input.x, 0f, input.y);
    }
}

Invoke Unity Events

  • Unity의 Event를 사용
  • 해당 Actions에 대한 입력이 들어왔을 경우, 설정한 이벤트 함수를 호출

public void OnMoveInput(InputAction.CallbackContext context)
{
	Vector2 input = value.Get<Vector2>();

    if (input != null)
    {
    	moveDirection = new Vector3(input.x, 0f, input.y);
    }
}

함수명을 굳이 OnMove로 지어줄 필요는 없습니다. 위의 사진처럼 Inspector에서 이벤트 함수를 잘 추가해주면 됩니다.

Tomorrow's Goal

  • 팀 프로젝트 필수 요구사항 구현
  • 코드 카타 Clear
  • 알고리즘 문제 풀이 공유

0개의 댓글