发布时间:2024-03-28 15:01
关于Instanced Static Mesh Component
的原理参阅
UE4 ISM(实例化静态网格体)理解
蓝图里的实现呢,比较简单。
通过使用Instanced Static Mesh Component
和Spline 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;