Outer? Owner?
GetOwner()라는 함수의 설명을 보니
'Follow the Outer chain to get the AActor that 'Owns' this component'
해당 컴포넌트를 가진 AActor를 구하기 위해 Outer Chain을 따릅니다. 라 한다.
해당 컴포넌트를 가진 Actor를 찾는다는건 알겠는데 Outer Chain은 또 뭔뜻일까 싶었다.
언리얼에서 생성되는 모든 액터들은 포인터를 가지고 있다고 한다.
어떤 오브젝트가 더이상 사용되지 않는다면 가비지 컬렉션 (Garbage Collection)에 의해 메모리에서 소멸시키는데
이를 위해 모든 오브젝트는 누군가 알고 있어야 한다.
A는 B가 가지고 있고 B는 C가 가 가지고 있고 C는 D가 가지고 있다! 라는 정보를 마치 트리 처럼 연결되어 있는거 같다.
A의 Outer는 B이고 B의 Outer는 C이고 C의 Outer는 D이고....
그리고 이러한 연결을 Outer Chain이다 (라고 이해함)
Outer는 어떤 오브젝트를 가지고 있는 오브젝트이고
Owner는 어떤 컴포넌트를 가지고 있는 액터라 한다.
어떻게 연결이 되었는지 궁금하여 실제로 로그로 출력 하고 싶어 이것저것 찾아봐서 아래와 같은 코드를 썼다.
Mover (Component) =Outer=> StaticMeshActor_51 (Actor) =Outer=> PersistentLevel (Level) =Outer=> Dungeon (World) =Outer=> /GameUEDPIE_0_Dungeon (Package)
와 같은 OuterChain을 볼 수 있다.
Mover (Component) -Owner-> StaticMeshActor
StaticMeshAtor를 가진 상위 Actor가 없기 때문에 여기까지 출력 되었다.
그런데 왜 이름이 StaticMeshActor_51일까...?
내 Actor의 이름은 SM_Crypt_Wall_Decorative_D인데 말이다..
찾아보니 GetName()은 오브젝트의 ID Name을 반환한다고 한다. (문서에는 나와있지 않은거 같은뎅..)
ID Name이 뭔가 하니 Outliner에서 ID Name을 확인 할 수 있다.
여기에 Mover Component가 들어있는 Actor의 ID Name이 StaticMeshActor_51인걸 확인할 수 있다.
그럼 진쨔 이름을 확인하고 싶을땐? (내가 생각한 이름은 Label이었다.. 자세히 보니 Outliner에도 Label이라 되어있네.ㅋ)
Actor는 GetActorLabel() 혹은 GetActorNameOrLabel() 라는 함수로 이름을 가져올 수 있다.
Obejct는 관련 문서를 찾을 수 없었다... (나중에 뭔가 찾는다면 업데이트할 예정이다)
https://forums.unrealengine.com/t/what-is-meant-by-outer-object/143892/2
https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-object-handling-in-unreal-engine
https://forums.unrealengine.com/t/what-is-the-return-of-aactor-getname/288236/6
https://community.gamedev.tv/t/ue-5-getowner-getname-id-name-issue/197346/3
'Unreal Engine > UE5' 카테고리의 다른 글
UE5 - 반사 시스템 (Reflection System) :: 리플렉션 시스템 ? 🌈 (0) | 2024.07.26 |
---|---|
UE5 - 문자열 손질 (String Handling) :: FName vs FString vs FText🔡 (2) | 2024.07.16 |
UE5 - 총명한 가리키개 (Smart Pointer) (0) | 2024.07.11 |