이벤트 스케치 (오브젝트 상호작용 구현)
- 오브젝트 상호작용을 구현하는 방식에는 두 가지가 있음: 직접 통신(Direct Communication), 이벤트 디스패치(Event Dispatching)
- 전등을 켜고 끄는 기능을 구현하는 과정을 설명하면서 각 방식의 개념과 문제점, 해결 방법을 정리할 예정이다
직접 통신 방식 (Direct Communication)
기본 개념
- 직접 통신 방식에서는 특정 객체가 직접 다른 객체의 함수를 호출하여 상호작용을 수행함
- 예제: 캐릭터가 전등을 켜거나 끄는 기능을 구현할 때, 캐릭터가 직접 전등 객체를 찾아서 조작하는 방식
구현 과정
전등 객체(Lamp) 생성
- 전등의 색상과 범위를 설정하는 기능을 Construction Script에서 구현
충돌 처리
- 캐릭터가 전등과 충돌 후 F키를 눌러 전등을 조작할 수 있도록 설정
- 다운 캐스트(Down Casting)를 이용하여 충돌한 객체가 전등인지 확인
검증 방법
- Is Valid 노드를 활용하여 널 포인터 및 댕글링 포인터(Dangling Pointer) 방지
- Get 노드를 우클릭하여 검증된 Get 변환 기능 활용 가능
문제점 및 해결 방법
책임 분리 원칙 위반
- 전등의 기능은 전등 객체가 직접 가지고 있어야 하며, 캐릭터가 전등의 내부 기능을 직접 구현하면 안 됨
- 해결 방법: 전등이 스스로 상태를 변경하도록, 외부에서는 ToggleLight() 같은 함수를 호출하는 방식 사용
객체 관리 문제
- 현재 구현 방식에서는 전등만 처리하도록 되어 있음. 만약 문 객체도 추가된다면 각각 개별적으로 관리해야 하는 문제가 발생
- 해결 방법: 이진 검색 트리(Binary Search Tree) 등의 자료구조를 활용하여 오브젝트 정보를 효율적으로 저장하고 관리
Set 노드 사용 시 Null
- Set 노드를 사용할 때 기본값이 없으면 Null 상태가 됨
이벤트 디스패치 방식 (Event Dispatching)
기본 개념
- 함수 포인터를 활용하여 특정 객체가 직접 다른 객체의 기능을 호출하지 않고, 이벤트를 통해 간접적으로 실행하는 방식
- 유니티의 델리게이트(Delegate)와 유사한 개념
- 전등의 기능은 전등 객체가 가지고 있지만, 캐릭터는 이벤트를 통해 해당 기능을 실행하도록 설정
구현 과정
이벤트 디스패처 생성
- 캐릭터에서 Event Dispatcher를 생성하고 ED_UseObject라는 이벤트 디스패처를 만듬
- 이 이벤트는 오브젝트와의 상호작용을 위한 기본 구조이며, 순회(Iteration), 등록(Register), 해제(Unbind), 호출(Call) 기능만 제공함
이벤트 등록 및 호출
- 전등에서 Bind를 통해 이벤트를 등록
- 캐릭터가 ED_UseObject 이벤트를 호출하면 전등이 등록된 함수 실행
문제점 및 해결 방법
선택적 실행 불가능
- 기본적인 Event Dispatcher는 등록된 모든 함수를 실행함
- 해결 방법: 실행할 이벤트를 개별적으로 나누거나, 특정 조건에 맞는 이벤트만 실행하도록 추가적인 로직 구현
핵심 개념: 호출(Bind), 바인드(Bind), 언바인드(Unbind)
- Bind: 특정 객체의 함수를 이벤트에 연결
- Unbind: 연결된 함수를 제거하여 더 이상 실행되지 않도록 함
- Call: 바인딩된 함수를 실행
추가적인 구현 방식
- 언리얼이 제공하는 Assign을 사용하면 자동으로 바인딩이 이루어지지만, 여기서는 수동으로 바인딩하여 직접 컨트롤할 예정
- Create Event 기능을 이용하여 원하는 시그니처(Signature)를 설정하고, 필요한 이벤트를 정의한 후 Bind를 통해 연결하면 됨
정리
직접 통신 (Direct Communication) 이벤트 디스패치 (Event Dispatching)
개념 | 특정 객체가 직접 다른 객체의 함수를 호출 | 이벤트를 통해 간접적으로 호출 |
장점 | 간단하고 직관적인 구현 가능 | 코드의 결합도를 낮추고 유지보수 용이 |
단점 | 객체 간 결합도가 높아 유지보수가 어려움 | 선택적 실행이 어려워 추가적인 로직 필요 |
검증 방법 | Is Valid 체크 | Bind, Unbind, Call 활용 |
'Unreal' 카테고리의 다른 글
[Unreal] 4월 2일 수업정리 (0) | 2025.04.02 |
---|---|
[Unreal] 4월 1일 수업정리 (0) | 2025.04.01 |
[Unreal] 3월 28일 수업정리 (0) | 2025.03.28 |
[Unreal] 3월 27일 수업정리 (0) | 2025.03.27 |
[Unreal] 3월 26일 수업정리 (0) | 2025.03.26 |