| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- 게임용어
- 프로그래밍
- 게임 회사
- 게임분석
- 블렌더
- materialpropertyblock
- 나만의 견해
- 내일배움캠프
- spritelibrary
- 유니티
- 공부
- 뭐드라
- 취미
- 까먹기전에메모
- til
- 붕괴스타레일
- 코딩
- LookAt
- spritemask2d
- 취업
- 스파르타내일배움캠프TIL
- 붕괴 스타레일
- 원신
- 스파르타내일배움캠프
- c#
- 컴포넌트
- ag 내일배움캠프
- 점프
- 연습
- 후기
- Today
- Total
덴바의 노트
내일배움캠프 16일차 TIL - NEW INPUT SYSTEM(2) 본문

오늘은 마지막으로 Input System의 Behavior에 대해서 가볍게 포스팅 해보려고 합니다.
오늘의 키워드
- Input System Behavior

Player Input에 있는 Behavior를 눌러 보면 4가지 선택지가 나옵니다.
1. Send Messages
2. Broadcast Messages
3. Invoke Unity Events
4. Invoke C Sharp Events
1. Send Messages는 유니티에서 지원하는 기본적인 기능입니다.

위와 같이 기본적으로 유니티에서 존재하는 메서드로 Component 클래스에 존재하는 메서드입니다.
기능은 간단합니다.
함수명을 해당 오브젝트에 장착되어 있는 스크립트 중에서 찾고,
존재할 경우 해당하는 함수를 실행하는 방식입니다.

그렇기에 Send Messages를 Behavior로 설정 시 아래와 같이 On + Action명으로
PlayerInput은 SendMessages를 실행합니다.
ex) SendMessages("OnMove");
public void OnMove(InputValue value)
{
Vector2 moveInput = value.Get<Vector2>().normalized;
CallMoveEvent(moveInput);
}
즉, 해당 게임오브젝트에 함수를 위와 같이 만들어두면, 해당 함수가 실행된다는 것입니다.
2. Broadcast Messages 또한 유니티에서 지원하는 기본적인 기능입니다.

Send Messages와 크게 다를바 없이, 실행하고 싶은 메서드명을 string으로 넣습니다.
그렇게되면 해당 오브젝트와 해당 오브젝트의 자식 오브젝트 모두가 가지고 있는 스크립트 중에서
해당 메서드명과 동일한 메서드를 모두 실행합니다.
단, Broadcast 방식은 저는 그다지 추천하지 않습니다.
사용을 무조건 하면 안된다는 것은 아닙니다만,
특정한 경우를 제외하면 사용을 자제하는 편이 좋다고 봅니다.
이유는 프로그램의 부하가 커질 것이기 때문입니다.
실질적 프로젝트를 하게되면 오브젝트가 가지고 있는 자식 오브젝트는 매우 많아질 것입니다.
그렇게 되면 Broadcast 방식은 모든 자식 오브젝트들을 확인해가며 메서드를 실행해야 합니다.
즉 딜레이가 너무 커지게 되는 것이죠.
예를 들어서 Player의 경우 Character 3D 모델링의 경우 Bone 때문에
수많은 오브젝트들이 자식 오브젝트들로 존재하기 때문에
만약, 캐릭터 관련해서 Broadcast를 시도한다면,
해당 프로그램의 부하는 매우 커질것입니다.
3. Invoke Unity Events 방식은 지금까지와는 조금 다릅니다.

위에서 보이듯이 Invoke Unity Events 방식은 On + Action명의 방식을 사용하지 않습니다.
유니티의 Button처럼 오브젝트를 넣고 내부에 존재하는 스크립트의 기능을 Invoke하는 방식을 사용합니다.
물론 반드시 Drag & Drop을 할 필요는 없습니다.
이 또한 스크립트 내부에서 AddListener를 이용하여 함수를 연결하여 사용할 수 있습니다.


4. Invoke C Sharp Events는 설정한 키들을 바탕으로 유니티가 C# 코드를 직접 만들어줍니다.

지금까지 Action, Action maps등을 작업했던 Input Action Asset 파일을 눌러보면,
Inspector에 위와 같은 창이 뜹니다.
그곳에서 Generate C# Class를 체크하고 Apply하면,
해당 폴더에 C# 스크립트가 하나 생성됩니다.

위와 같이 C#으로 Input Actions에 대한 내용과 기능을 구현해냅니다.
자세히 보면 해당 스크립트 생성자에 FromJson이 있는데 이는,

제가 만든 스키마, ActionMaps, Action 등에 대한 상세한 내용을 Json으로 저장하고
실행할 때는 DeSerialize하여 다시 값을 넣습니다.
위과 같은 방식으로 플레이어가 설정한 Input Actions를 외부에서 관리할 수도 있겠죠

또한 위에 사진에서 보면
Send Messages 처럼 On + Action의 구조로
각 CallbackContext에 기능이 저장되어있습니다.
즉, Invoke C Sharp Events는 만들어진 스크립트를 이용하여 Input System을 처리하는 방식입니다.
오늘의 회고
지금까지 유니티의 Input System 중 Behavior에 대해서 간단히 포스팅해봤습니다.
Behavior가 무려 4가지나 있다는 점에서 어떤 것을 사용할 지 매우 고민이 될거라 생각이 듭니다.
저는 주로 Send Messages나 Invoke C# Events를 사용합니다.
상황에 맞게 어떤게 편할지는 아직 감이 오지 않지만,
분명 많이 사용하다보면 각 상황에 맞는 Behaviors를 선택할 수 있을거라 생각합니다.

'프로그래밍 노트 > TIL' 카테고리의 다른 글
| 내일배움캠프 18일차 TIL (0) | 2024.05.13 |
|---|---|
| 내일배움캠프 17일차 WIL - 라디안 (0) | 2024.05.10 |
| 내일배움캠프 15일차 TIL - NEW INPUT SYSTEM(1) (0) | 2024.05.08 |
| 내일배움캠프 14일차 WIL (1) | 2024.05.03 |
| 내일배움캠프 13일차 TIL (0) | 2024.05.02 |