Unreal
[Unreal] 4월 1일 수업정리
k-codestudy
2025. 4. 1. 14:28
문과 의자 상호작용 및 이벤트 디스패처 정리
실습
- Chair와 Door를 만들어 각각 20과 10을 출력하도록 구현
- 콜리전을 추가하여 충돌 처리
- ThirdPersonCharacter에서 이벤트 디스패처를 활용하여 F 키 입력 시 동작 구현
핵심 개념 정리
이벤트 디스패처를 사용하는 이유
- ThirdPersonCharacter에서 F 키 입력 시 특정 액터(Chair, Door)와 상호작용해야 함
- Chair와 Door는 Actor를 상속받았지만, 서로 다른 클래스 -> 직접 호출이 어려움
- 이벤트 디스패처를 사용하면 다형성을 적용하여 여러 개체를 하나의 방식으로 처리 가능
함수 포인터와 이벤트 디스패처
- Chair와 Door는 서로 다른 자료형이지만, 함수 포인터를 사용하면 통합적으로 호출 가능
- 이벤트 디스패처는 이벤트를 발생시키는 객체와 이벤트를 처리하는 객체를 분리
-> ThirdPersonCharacter가 키 입력을 받고, Chair나 Door가 이에 반응하도록 설계
이벤트 디스패처 구현 흐름
ThirdPersonCharacter에서 이벤트 디스패처 생성
- ed-use라는 이벤트 디스패처 생성 (int 값을 인자로 받음)
- F 키를 누르면 10이 전달되도록 설정
Chair와 Door에서 이벤트를 바인딩
- ThirdPersonCharacter가 ed-use를 호출하면 Chair와 Door에서 해당 값을 받아 처리
이벤트 디스패처 활용 정리
이벤트 디스패처를 활용하는 장점
- 여러 개의 액터(Door, Chair)가 독립적으로 반응 가능 (1 대 다 구조)
- ThirdPersonCharacter는 Door와 Chair의 구체적인 내용을 몰라도 상호작용 가능 -> 결합도 감소
- 코드가 깔끔해지고 유지보수가 쉬워짐
이벤트 디스패처가 필요한 이유
- ThirdPersonCharacter에서 직접 Door와 Chair를 제어하면 객체 관리가 어렵고 코드가 복잡해짐
- 충돌(콜리전) 처리는 각 객체에서 수행해야 유지보수와 확장성이 좋아짐
- 키 입력 처리는 ThirdPersonCharacter에서 발생하지만, 동작은 Door와 Chair에서 수행
충돌(콜리전)과 키 입력 처리 흐름
충돌 처리
- Sphere와 box에 pawn과 오버랩 시 충돌을 감지하도록 설정
- Chair와 Door 충돌이 발생했을 때만 ThirdPersonCharacter와 상호작용
키 입력 처리
- ThirdPersonCharacter에서 F 키 입력 시 이벤트 디스패처를 호출
- Door와 Chair는 이벤트 바인딩을 통해 ThirdPersonCharacter의 이벤트를 수신
- Door는 10, Chair는 20을 출력
액터 시퀀스를 활용한 문 애니메이션
액터 시퀀스를 사용하는 이유
- 문이 열리는 애니메이션을 간단하게 구현 가능 (Transform 보간)
- 시퀀서(Sequencer) 탭을 활용하여 직관적으로 편집 가능