[UE5] TIL - 29 <SetRootComponent(), RootComponent = Target>

ChangJin·2024년 5월 1일
0

Unreal Engine5

목록 보기
57/114
post-thumbnail

2024-05-01

깃허브!
https://github.com/ChangJin-Lee/ARproject
https://github.com/ChangJin-Lee/ToonTank

느낀점
SetRootComponent()와 RootComponent = Target 의 차이에 대해서 조사해봤다. 멤버 함수와 멤버 변수의 차이라고 생각했는데 사용하는 방법에서도 차이가 있었다.

TIL

  • SetRootComponent()
  • RootComponent = Target

SetRootComponent()

https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/GameFramework/AActor/SetRootComponent?application_version=5.3

https://forums.unrealengine.com/t/whats-the-difference-between-setrootcomponent-and-rootcomponent/451679


  • AActor의 하위에 있다.
  • Sets root component to be the specified component. NewRootComponent's owner should be this actor.
  • 런타임 중에 사용하고 기존에 있는 RootComponent를 새로운 RootComponent로 대체한다. SetUpAttachment로 부착해놓은 Component들은 SetRootComponent() 이후에 새롭게 부착해야한다.
  • RootComponent = Target 보다 좀 더 안전하다고 한다.

  • Actor.h에 찾아가보니 다음과 같이 구현되어있다.
  • 함수 내부를 잘 보면 여기서 RootComponent = NewRootComponent; 을 사용하고 있다. 이걸 직접 만드는 것이 RootComponent = Target; 이다.

bool AActor::SetRootComponent(class USceneComponent* NewRootComponent)
{
	/** Only components owned by this actor can be used as a its root component. */
	if (ensure(NewRootComponent == nullptr || NewRootComponent->GetOwner() == this))
	{
		if (RootComponent != NewRootComponent)
		{
			Modify();

			USceneComponent* OldRootComponent = RootComponent;
			RootComponent = NewRootComponent;

			// Notify new root first, as it probably has no delegate on it.
			if (NewRootComponent)
			{
				NewRootComponent->NotifyIsRootComponentChanged(true);
			}

			if (OldRootComponent)
			{
				OldRootComponent->NotifyIsRootComponentChanged(false);
			}
		}
		return true;
	}

	return false;
}


RootComponent = Target

https://www.unrealengine.com/ko/blog/we-are-updating-unreal-engine-twinmotion-and-realitycapture-pricing-in-late-april


  • The component that defines the transform (location, rotation, scale) of this Actor in the world, all other components must be attached to this one somehow
  • 모든 다른 component는 RootComponent에 부착되어야 한다.

  • Actor.h에 다음과 같이 선언되어 있따.
protected:
	/** The component that defines the transform (location, rotation, scale) of this Actor in the world, all other components must be attached to this one somehow */
	UPROPERTY(BlueprintGetter=K2_GetRootComponent, Category="Transformation")
	TObjectPtr<USceneComponent> RootComponent;
profile
게임 프로그래머

0개의 댓글