UE_使用Instanced Mesh Component 和 Spline 在蓝图和c++中区别

关于Instanced Static Mesh Component的原理参阅
UE4 ISM(实例化静态网格体)理解

想实现一个简单的围栏效果,效果如下:
在这里插入图片描述

蓝图里的实现呢,比较简单。

通过使用Instanced Static Mesh ComponentSpline Component组件就能把逻辑实现。

在这里插入图片描述

在蓝图里实现上述逻辑,在Consturct Script的脚本里会自动把上述逻辑,添加的实例销毁,而c++里需要手动调用
在这里插入图片描述
不然上次生成的实例还在。

在蓝图里添加AddSplineMeshComponent时,截图如下:
在这里插入图片描述
传入的Relative Transform为空,默认Transform{FRotator(0,0,0),FVector(0,0,0),FVector(1,1,1)}

在c++里没有AddSplineMeshComponent相应的函数,在Actor里有两个添加组件的方式
如下:

UActorComponent* AddComponent(FName TemplateName, bool bManualAttachment, const FTransform& RelativeTransform, 
const UObject* ComponentTemplateContext, bool bDeferredFinish = false);

UActorComponent* AddComponentByClass(TSubclassOf<UActorComponent> Class, bool bManualAttachment, 
const FTransform& RelativeTransform, bool bDeferredFinish);

在这里使用AddComponentByClass

USplineMeshComponent* SplineMeshComponent = Cast<USplineMeshComponent>(AddComponentByClass(USplineMeshComponent::StaticClass(),
false,FTransform{FRotator(0,0,0),FencePost->GetComponentLocation(),FVector(1,1,1)},false));

需要设置AddComponentByClass的位置为FencePost->GetComponentLocation()就是栏杆的位置,这点与蓝图不同。不然c++生成的围栏始终在坐标原点。

蓝图里是Construct Script
c++里是virtual void OnConstruction(const FTransform& Transform) override;

最后的最后,如果您觉得这篇文章帮助到您,请资助下这位朋友的粮食,谢谢!

请添加图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值