Behavior - Invoke Unity Evnets옵션
Input Behavior를 Invoke Unity Events로 선택하면 다음과 같이 유저가 정의한 액션인 Move와 Attack이 Unity Event타입의 속성으로 표시된다. 일반적은 UI Button이벤트를 연결하는 방식이다. 공토으로 발생하는 3개의 이벤트도 같이 표시된다.
이상태에서는 스크립트에서 연결할 이벤트가 없으므로 PlayerCtrl을 다음과 같이 수정해준다.
#region SEND_MESSAGE #region UNITY_EVENTS 는 코드의 영역을 정의하는 전처리기 이다.
Invoke Unity Events를 선택했을때 넘어오는 파라미터는 InputAction.CallbackContex타입으로 입력값은 ReadValude<T>() 함수를 이용해 전달 받는다. Move Action을 Vector2로 정의했기 때문에
Vector2 dir = ctx.ReadValue<Vector2>(); 와 같이 받아와야 한다. 나머지는 Send Messages 옵션과 동일하다
#pragma warning disable IDE0051 //함수나 변구를 정의후 사용하지 않는 경고문구를 비활성화하는 구문
using UnityEngine;
using UnityEngine.InputSystem; //Inputsystem사용을 위해 추가된 namespace
public class PlayerCtrl : MonoBehaviour {
private Animator anim;
private Vector3 moveDir;
void Start () {
anim = GetComponent<Animator>(); //Animator컴포넌트를 연결
}
void Update () {
if(moveDir != Vector3.zero) {
transform.rotation = Quaternion.LookRotation(moveDir); //캐릭터회전
transform.Translate(Vector3.forward * Time.deltaTime * 4.0f); //이동
}
}
#region SEND_MESSAGE
void OnMove(InputValue value) {
Vector2 dir = value.Get<Vector2>();
moveDir = new Vector3(dir.x,0, dir.y);
anim.SetFloat("Movement", dir.magnitude);
Debug.Log($"Move = ({dir.x},{dir.y})");
}
void OnAttack() {
Debug.Log("Attack");
anim.SetTrigger("Attack");
}
#endregion
#region UNITY_EVENTS
public void OnMove(InputAction.CallbackContext ctx) {
Vector2 dir = ctx.ReadValue<Vector2>();
moveDir = new Vector3(dir.x,0,dir.y);
anim.SetFloat("Movement", dir.magnitude);
}
public void OnAttack(InputAction.CallbackContext ctx) {
Debug.Log($"ctx.phase={ctx.phase}");
if (ctx.performed) {
Debug.Log("Attack");
anim.SetTrigger("Attack");
}
}
#endregion
}
스크립트에서 이벤트를 정의해 줬으니 이제 연결하자
Player Action 옆 ▶를 눌러 펼치면 Move(CallbackContex) List is Empty인데 +를 눌러준후 하이라키의 warrior를 끌어다 연결해준다. Attack도 끌어다 준다
이제 No Function을 눌러 OnMove와 OnAttack를 각각 연결해준다.
실행해보면 다음과 같이 3가지 상태가 차례로 호출되는 걸 확인할 수 있다.
'유니티게임강좌 > Input System' 카테고리의 다른 글
[Input System] Behavior - Invoke C# event - Direct Binding (0) | 2023.03.28 |
---|---|
[Input System] Behavior - Invoke C Sharp Events (0) | 2023.03.28 |
[Input Systems] Behavior - Send Message (0) | 2023.03.27 |
[Input Systems] Behavior 속성 (0) | 2023.03.27 |
[Input System] Player Input 컴포넌트 적용 (0) | 2023.03.27 |