先来说一说这个问题的起源吧。最近想做一个类似于火焰的特效,是由大量的烟雾粒子组成的那种类似于烟雾的火焰。在制作大量烟雾粒子之前首先要制作出第一个粒子。
制作一个粒子表现的话首先要先实例化一个Instance,这个实例首先依附在一个Acor上。当然,像Unity的脚本函数一样,在Scene中制作一个Actor然后把脚本当做一个ActorComponent的方案是可行的。然后在脚本中使用this->GetOwner()
即可以获取到这个Actor。可以使用this->GetOwner()->GetName()
来获取到Actor的名字。
参考链接:
在这里遇见了一个问题。就是在使用UE的UE_LOG
打印输出的时候发生了类型错误。
- 在
UE_LOG
中使用的都是基础类型,%d,%s
等等。 GetName()
函数返回的变量类型则是UE的FString
类型
解决例子:1
2// Actor component .cpp file
UE_LOG(LogTemp, Log, TEXT("show value: : %s", *(this->GetOwner()->GetName()));
解决案参考:
能够获取到Parent的Actor就可以根据自身的Actor来制作InstanceStaticMeshComponent了。
InstanceStaticMeshComponent
使用方法参照:
下一步就是发生问题的地方,为制作好的InstanceStaticMeshComponent添加StaticMesh。
上网查查资料就有,这篇文章就行
照着做本来不会出错的但是我一运行,UE4肯定Crash。
原因就在于题目所提到的关于ContructorHelpers::FObjectFinder
的使用上。总结来说就是这个函数只能运行在类的构造函数中,或者构造函数里调用的函数中。
解决文章:
这个回答中有提到。之后再整理。