이벤트 호출 문제
문제점
- 이벤트 Invoke 당시 Vector2 값이 있는데
- 이벤트를 수신하는 코드에서 Vector2 값이 zero가 되는 문제
확인사항 1 : Event Invoke 확인
- 이벤트에서 Invoke 확인
- 플레이어 및 Goblin 모두 이벤트 메서드를 상속 받기 때문에 Tag를 활용한 이벤트 주체 확인
protected void CallMoveEvent(Vector2 direction)
{
OnMoveEvent?.Invoke(direction);
if (gameObject.CompareTag("Goblin"))
{
Debug.Log($"꼬부꼬부 Call Move Invoke 디렉션 {direction}");
}
}
- FixedUpdate에서 rigidbody 값을 변경하는 최종 움직임 코드 확인
private void ApplyMovement(Vector2 direction)
{
direction *= _characterStatsHandler.CurrentStates.speed;
if (gameObject.CompareTag("Goblin"))
{
Debug.Log($"꼬부꼬부 ApplyMove Before디렉션 {direction}");
}
_rigidbody2D.velocity = direction;
}
- 결괏값
- 정상적으로 Invoke 를 하고 있지만, 결과
direction
이 Vector2.zero 가 나오는 상황 - 컴포넌트에는 정상적으로 접근하는 것으로 확인되어 스크립트가 오브젝트에 정상적으로 할당 된 것으로 판단
확인사항 2 : Move 수신자 확인
- ApplyMovement 전에 direction을 할당하는 이벤스 수신자 확인
private void Move(Vector2 direction)
{
if (gameObject.CompareTag("Goblin"))
{
Debug.Log($"꼬부꼬부 Move After 디렉션 {direction}");
}
_moveDirection = direction;
}
- 결괏값
- 해당 메서드가 호출 되지 않음
- Move 메서드 실행이 안되므로 Invoke를 수신 받는 초기화 부분 확인
확인사항 3 : 이벤트 수신자 초기화 확인
- 해당 MoveEntities 클래스 초기화 Start 확인
private void Start()
{
_inputEvents.OnMoveEvent += Move;
if (gameObject.CompareTag("Goblin"))
{
Debug.Log($"꼬부꼬부 OnMove 이벤트 호출!");
}
}
- 결괏값
- 정상적으로 구독하는 것을 확인함
- 이벤트 구독 후 왜 Move 메서드가 실행되지 않는지 확인해야 함
문제점 파악
- 아래는 Goblin 객체의 Component 입니다.
- Class 상속 구조는 다음과 같습니다.
상속 다이어 그램
- 문제는 Input System의 경우 플레이어의 Input 을 관리하게 되는데
- 이때 Goblin의 오브젝트의 움직임 까지 제어를 하게 되어 호출 문제가 발생
-
Input System
스크립트를 Goblin 오브젝트에서 제거하여 필요없는 이벤트 호출을 제거하면 해결될 것으로 예상