직접 참조를 통한 블루프린트 통신
블루프린트 간 통신의 가장 기본적인 방법은 직접 참조를 사용하는 것입니다.
이 방식은 한 블루프린트가 다른 블루프린트의 인스턴스를 직접 참조하여 그 속성이나 함수에 접근하는 방법입니다.
액터 참조 변수 생성 및 설정
1. 변수 생성
- 'My Blueprint' 패널에서 변수 추가 버튼 클릭
- 변수 타입을 원하는 액터 클래스로 설정 (예 : PlayerCharacter Reference)
2. 변수 설정
- 레벨에 배치된 액터를 변수에 할당
- 블루프린트 에디터의 디테일 패널에서 변수 값 설정
Get Actor of Class 노드 사용
특정 클래스의 액터를 찾아 참조할 때 사용합니다.
사용 방법
- 블루프린트 그래프에서 우클릭
- 'Get Actor of Class' 노드 추가
- 찾고자 하는 액터 클래스 선택
예제 : 게임 모드 참조 얻기
Cast To 노드를 이용한 타입 변환
다른 블루프린트 클래스의 특정 함수나 변수에 접근하기 위해 사용합니다.
사용 방법
- 액터 참조를 Cast To 노드에 연결
- Cast하고자 하는 특정 클래스 선택
예제 : 플레이어 캐릭터 참조 및 함수 호출
직접 참조 방식의 장단점
장점
- 구현이 간단하고 직관적
- 특정 인스턴스에 대한 정확한 제어 가능
- 성능 오버헤드가 적음
단점
- 강한 결합도로 인한 유지보수의 어려움
- 재사용성 감소
- 순환 참조 문제 발생 가능성
- 런타임에 참조가 유효하지 않을 수 있음
주의해야 할 점
1. Null 체크
- 참조된 액터가 존재하는지 항상 확인
2. 레벨 간 참조
- 다른 레벨의 액터를 참조할 때 주의 필요
- 가능한 동적 참조 방식 사용 (예 : 태그 기반 검색)
3. 에디터 전용 로직
- 에디터에서만 동작하는 참조 로직 구분
4. 참조 업데이트
- 게임 플레이 중 참조가 변경될 수 있는 상황 고려
- 필요시 참조 갱신 로직 구현
순환 참조 문제 피하기
순환 참조는 두 개 이상의 객체가 서로를 참조하는 상황으로, 메모리 누수와 성능 저하를 일으킬 수 있습니다.
방지 방법
1. 인터페이스 사용
- 직접 참조 대신 인터페이스를 통한 통신
2. 이벤트 기반 통신
- 직접 호출 대신 이벤트 디스패처 사용
3. 약한 참조 사용
- 언리얼 엔진의 약한 참조 시스템 활용
4. 중재자 패턴
- 직접 통신 대신 중앙 관리자를 통한 간접 통신
예제 : 플레이어와 인벤토리 시스템
이 예제에서 플레이어 캐릭터는 인벤토리 컴포넌트를 직접 참조하여 아이템을 추가하고 관리합니다.
이 방식은 간단하고 직관적이지만, 인벤토리 시스템을 다른 액터에서 재사용하기 어렵다는 단점이 있습니다.
직접 참조를 통한 블루프린트 간 통신은 간단하고 직관적인 방법입니다.