스파르타 내배캠 34일차 TIL
C1조_ 1조라도 안 보이면
https://rollingball-coding.tistory.com/54
Input System
스파르타 내배캠 28일차 TILC1조_ 1조라도 안 보이면 게임 개발 숙련 주차가 시작됐다. 이번주는 유니티 3D를 배우게 된다. 간단한 3D RPG 생존 게임을 진행하게 될 것 같다. 오늘은 발제와 SA, 2시
rollingball-coding.tistory.com
Invoke Unity Events 관해서 썼는데 왜 또 쓰나요? Send Message랑 Invoke Unity Events는 다르다고!
Invoke Unity Events과 Send Message 차이점
- Invoke Unity Events : 버튼 식으로 사용, 클래스 이름은 마음대로 지어도 되지만 접근 제한자는 public으로 선언해야 input system에 등록할 수 있다.
- Send Message : 지정된 메소드 이름으로 작성해야지 유니티가 인식한다. 다로 등록하지 않아도 유니티가 함수를 읽고 값을 넘겨준다.
Input System : Send Message
behavior에 관계 없이 action 작성법은 모두 동일하다. 그러니 위의 글을 참고하면 좋을 것 같다. 차이점은 값을 받아오면서 들어나는데 비교하면서 설명을 해보려고 한다.
Invoke Unity Events
위의 글에서 처럼 Invoke Unity Events는 메소드 명을 마음대로 지어도 되지만 입력했을 때 아래와 같이 inputaction.callbackcontext로 받아온다.

쉽게 말하면 눌렀을 때 돌아오는 내용에 대해서 context로 받아오는 것인데 이때 InputActionPhase라는 데이터가 있다. 총 다섯가지 단계로 다음과 같다. Interaction의 타입에 따라 달라진다.
- Started : 실행 시작 시 호출
- Performed : 실행 확정 시 호출
- Canceled : 실행 종료 시 호출
- Disabled : 액션이 활성화되지 않음
- Waiting : 액션이 활성화되어 있고 입력을 기다리는 상태
그래서 사용자가 필요한 상태에서 작동되게 하면 된다. 만약에 예시 코드처럼 움직임을 적용 시키고 싶은 상황이라고 가정하자. 우리는 키보드에서 움직임을 담당하는 키를 눌렀을 때 인식된 값을 받아오고 싶기 때문에 실행 중인 실행 확정 시 호출되는 performed를 이용하게 된다.
Send Message


Send Message는 inputValue로 값을 받아오는데 이 값에는 우리가 지정했던 action type이 적용되어 있다. OnMove에는 Vector2 값이 지정되어 있기 때문에 우리가 받아올 때도 Vector2 받아와야 한다.
주로 사용하는 것은 코드에서도 확인 가능한 Get<Vector2>()와 isPressed가 있다. 전자는 위에서 설명한 것과 같이 값을 받아오는 것이고 후자는 버튼이 눌렸는지에 대한 bool 값을 받아올 수 있다.
그럼 shift를 눌렀을 때 플레이어가 달리게 하려면 어떻게 해야할까?
Action에서는 Button으로 지정되어 있을 것이고 스크립트에서는 inputvalue로 가져올 수 있을 것이다. 눌렸을 때 플레이어의 달리기 속도가 변해야 하니 value.isPressed를 하면 되는 것이 아닌가. 그렇게 하면 우리가 원하는 시도와 다르게 구현된다. 우리는 누르고 있는 상태인 눌렀을 때와 눌렀다가 뗀 상태를 확인해야 한다. 움직임은 키보드를 누르지 않으면 0 값으로 돌아가니 괜찮지만 button은 그렇지 않다. 사용자가 눌렀던 사실에 대한 값만 있기 때문에 알 수 없다. 그래서 우리는 단순 키 입력도 value 값으로 받아와야 한다.

integer로 받아오게 되면 눌렀을 때 1의 값을 뗐을 때 0의 값을 받아올 수 있다. 이때 if문을 이용해서 shift를 누르고 있을 때만 플레이어가 달릴 수 있게 구현할 수 있었다.
결론
버튼 식은 해제 됐을 때 다시 넣어줘야 하는 불편함이 있다 하지만 뭘랄까. 아직 내가 send message가 익숙하지 않아서 그런가, 나는 invoke식이 편한 것 같다. 더 직관적이라고 해야하나? 하지만 팀원분은 send message 형식이 더 사용하기 편하다고 하니 사람바이사람인 것 같다. 내일은 애니메이션 작업을 해야하니 하는 겸 델리게이트 이벤트를 이용하는 것에 대해 정리 해봐야겠다.
'Unity > TIL' 카테고리의 다른 글
Unity FBX 파일, 에셋 애니메이션 (2) | 2024.06.07 |
---|---|
Unity 팀프로젝트 현황 (1) | 2024.06.05 |
유니티 숙련 팀프로젝트 게임 기획 (0) | 2024.06.03 |
3번째 과제 마무리 (1) | 2024.05.30 |
3번째 갠플 중간 과정 (1) | 2024.05.29 |