Unreal

[Unreal] 3월 31일 수업정리

k-codestudy 2025. 3. 31. 14:19

이벤트 스케치 (오브젝트 상호작용 구현)

  • 오브젝트 상호작용을 구현하는 방식에는 두 가지가 있음: 직접 통신(Direct Communication), 이벤트 디스패치(Event Dispatching)
  • 전등을 켜고 끄는 기능을 구현하는 과정을 설명하면서 각 방식의 개념과 문제점, 해결 방법을 정리할 예정이다
 

직접 통신 방식 (Direct Communication)

기본 개념

  • 직접 통신 방식에서는 특정 객체가 직접 다른 객체의 함수를 호출하여 상호작용을 수행함
  • 예제: 캐릭터가 전등을 켜거나 끄는 기능을 구현할 때, 캐릭터가 직접 전등 객체를 찾아서 조작하는 방식

구현 과정

전등 객체(Lamp) 생성

  • 전등의 색상과 범위를 설정하는 기능을 Construction Script에서 구현

 

충돌 처리

  • 캐릭터가 전등과 충돌 후 F키를 눌러 전등을 조작할 수 있도록 설정

  • 다운 캐스트(Down Casting)를 이용하여 충돌한 객체가 전등인지 확인

검증 방법

  • Is Valid 노드를 활용하여 널 포인터 및 댕글링 포인터(Dangling Pointer) 방지
  • Get 노드를 우클릭하여 검증된 Get 변환 기능 활용 가능

F키를 눌렀을 때 꺼지는것을 확인할 수 있음

문제점 및 해결 방법

책임 분리 원칙 위반

  • 전등의 기능은 전등 객체가 직접 가지고 있어야 하며, 캐릭터가 전등의 내부 기능을 직접 구현하면 안 됨
  • 해결 방법: 전등이 스스로 상태를 변경하도록, 외부에서는 ToggleLight() 같은 함수를 호출하는 방식 사용

객체 관리 문제

  • 현재 구현 방식에서는 전등만 처리하도록 되어 있음. 만약 문 객체도 추가된다면 각각 개별적으로 관리해야 하는 문제가 발생
  • 해결 방법: 이진 검색 트리(Binary Search Tree) 등의 자료구조를 활용하여 오브젝트 정보를 효율적으로 저장하고 관리

Set 노드 사용 시 Null 

  • Set 노드를 사용할 때 기본값이 없으면 Null 상태가 됨
 

이벤트 디스패치 방식 (Event Dispatching)

기본 개념

  • 함수 포인터를 활용하여 특정 객체가 직접 다른 객체의 기능을 호출하지 않고, 이벤트를 통해 간접적으로 실행하는 방식
  • 유니티의 델리게이트(Delegate)와 유사한 개념
  • 전등의 기능은 전등 객체가 가지고 있지만, 캐릭터는 이벤트를 통해 해당 기능을 실행하도록 설정

구현 과정

이벤트 디스패처 생성

  • 캐릭터에서 Event Dispatcher를 생성하고 ED_UseObject라는 이벤트 디스패처를 만듬
  • 이 이벤트는 오브젝트와의 상호작용을 위한 기본 구조이며, 순회(Iteration), 등록(Register), 해제(Unbind), 호출(Call) 기능만 제공함

이벤트 등록 및 호출

  • 전등에서 Bind를 통해 이벤트를 등록

충돌 범위 내에서 F키를 눌렀을 때 꺼지는 것을 확인
밖으로 나와 F키를 눌러도 실행이 안되는 모습 확인

  • 캐릭터가 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