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

发布时间:2024-03-28 15:01

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

想实现一个简单的围栏效果,效果如下:
UE_使用Instanced Mesh Component 和 Spline 在蓝图和c++中区别_第1张图片

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

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

UE_使用Instanced Mesh Component 和 Spline 在蓝图和c++中区别_第2张图片

在蓝图里实现上述逻辑,在Consturct Script的脚本里会自动把上述逻辑,添加的实例销毁,而c++里需要手动调用
UE_使用Instanced Mesh Component 和 Spline 在蓝图和c++中区别_第3张图片
不然上次生成的实例还在。

在蓝图里添加AddSplineMeshComponent时,截图如下:
UE_使用Instanced Mesh Component 和 Spline 在蓝图和c++中区别_第4张图片
传入的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;

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号