내일배움캠프/Unity
Unity Input System (Send Messges / Invok Unity Events 차이점)
danpat77
2025. 3. 4. 20:50
Unity에서 플레이어를 움직이게 하는 방식은 여러가지가 있는데 그 중 하나의 방법이 Input System을 활용하여 움직이는 것이다.
Input System은 사용자가 기기, 터치, 제스처를 사용하여 게임이나 앱을 제어할 수 있도록 도와주는 패키지이다.
Input System에서는 입력 이벤트의 처리 방법이 4가지가 있다.
방식 | 설명 |
Send Messages | 특정 함수"OnJump()" 등를 자동으로 호출 |
Broadcast Messages | 부모-자식 관계의 모든 오브젝트에서 함수 호출 |
Invoke Unity Events | "UnityEvent"를 이용한 이벤트 방식으로 호출 |
Invoke C# Events | C# 델리게이트 이벤트를 호출 |
이중에 가장 많이 사용하는 "Send Messages", "Invoke Unity Events"를 비교해 보자
Send Messages
우선 "Send Messages"는 스트립트의 특정 함수를 자동으로 호출하는 방식으로 입력이 발생하면 "PlayerInput" 컴포넌트가 해당 오브젝트의 모든 컴포넌트에서 특정 함수를 찾아 호출한다.
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
void OnJump() // 함수명이 액션과 일치해야 함
{
Debug.Log("Jump");
}
}
이런 식으로 스크립트에 함수를 작성하여 호출를 하는데 함수명이 액션과 일치해야 작동을 한다.
Invoke Unity Events
다음으로 "Invoke Unity Events"는 "Unity Event" 시스템을 이용해서 사용자의 입력을 이벤트처럼 사용하는 방식으로 "PlayerInput"에서 버튼을 눌렀을 때 특정 함수에 연결하여 실행한다.
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Events;
public class PlayerController : MonoBehaviour
{
public void OnJumpInput(InputAction.CallbackContext context)
{
if (context.phase == InputActionPhase.Started) // 키가 눌렸을 때 실행
{
Debug.Log("Jump");
}
}
}
이런 식으로 함수를 작성하고 "PlayerInput"에 Events에 함수를 연결하여 작동을 한다.
장단점
방식 | 장점 | 단점 |
Send Messages | 별도 설정 없이 간단한 코드로 사용 가능 | 모든 컴포넌트를 검색하기 때문에 성능 부담이 있음 |
Invoke Unity Events | 유연하게 이벤트를 추가/제거 가능, 퍼포먼스 최적화 | 초기 설정이 필요하고 직접적인 코드 연결이 필요함 |
이렇게 "Send Messages" 방식은 간단한 테스트나 빠르게 프로토타입을 만들 때 용이하고 "Invoke Unity Events" 방식은 최적화와 유지보수가 중요한 프로젝트에서 용이하다.