关于Acotor的根组件和附加组件

关于Acotor的根组件和附加组件

根节点

Actor 默认有DefaultSceneRoot
默认DefaultSceneRoot
创建3个静态网格体

FirstMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("FirstMesh"));
SecondMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("SecondMesh"));
ThirdMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ThirdMesh"));

编译后第一个网格体成为了根组件,后面的网格体默认附加到根组件上,因为只能有一个根组件。
第一个网格体成为了根节点
这个时候指定第二个网格体为根组件:

RootComponent = SecondMesh;

// 使用下面方法也可以设置根节点
// SetRootComponent(SecondMesh); 

编译后:
在这里插入图片描述

SetupAttachment

可以使用SetupAttachment将一个组件附加到另一个组件上

	/** 
	* 初始化注册组件时要附加的所需的Attach Parent和SocketName。
	* 通常打算从其所属Actor的构造函数中调用,
	* 并且在未注册组件时,应优先于AttachToComponent进行调用
	* @param  InParent				依附到的父组件
	* @param  InSocketName			要附加到父项上的可选套接字,默认NAME_None
	*/
	void SetupAttachment(USceneComponent* InParent, FName InSocketName = NAME_None);


例如:

ThirdMesh->SetupAttachment(SecondMesh);

编译后:
在这里插入图片描述

AttachToComponent

	/** 
	* 初始化注册组件时要附加的所需的Attach Parent和SocketName。
	* 通常打算从其所属Actor的构造函数中调用,
	* 并且在未注册组件时,应优先于AttachToComponent进行调用
	* @param  Parent				依附到的父组件
	* @param  AttachmentRules       附加方式
	* @param  SocketName			要附加到父项上的可选套接字,默认NAME_None
	*/
	void AActor::AttachToComponent(USceneComponent* Parent, const FAttachmentTransformRules& AttachmentRules, FName SocketName)

FAttachmentTransformRules:

  • KeepRelativeTransform(保持两个物体之间的相对位置不变)
  • KeepWorldTransform(保持连个物体在世界的位置不变)
  • SnapToTargetNotIncludingScale(保持物体的缩放对齐到目标上)
  • SnapToTargetIncludingScale(随目标的缩放)

例如:

ThirdMesh->AttachToComponent(SecondMesh, FAttachmentTransformRules::KeepRelativeTransform);

编译后也可以达到同样的结果
在这里插入图片描述

SetupAttachment 和 AttachToComponent的区别,可以参考这篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值