【UnrealEngine5】一些杂七杂八的备忘录
这篇文章主要目的是记录一些,没怎么搞懂没法写成单独文章的内容备忘,毕竟人不能踩进同一条河流两次,但是可以两次掉进同一个坑嘛~蓝图的重新编译
起因是原本打算制作一个下面样子的自定义蓝图,蓝图的图里的每个节点都是通过蓝图定义出来的,在编译的时候把图里的数据变成generatedclass里的数据,但是每次节点对应的蓝图编译完generatedclass里面对应的实例就变成了一坨nullptr,这让我很头大,但是在蓝图的图里的对应节点却正常刷新成了新的generatedclass。
NodeData对应的蓝图重新编译之后在蓝图中的NodeData全部没啥问题,但是Nodes里面的全挂了
根据我高超的绿皮能力,在没看懂Blueprint到底是怎么把SkeletonGeneratedClass和ReinstGeneratedClass变成GeneratedClass的情况下我做出了一个大胆的假设——因为我Compile的时候是直接把数据赋值到Nodes里面去的,NodeData的Outer有问题所以才导致了空指针问题。为此我把Nodes.Add(NodeData)变成了Nodes.Add(StaticDuplicateObject(NodeData)) 完美解决了这个问题,所以我大胆猜测一个逻辑。
Blueprint在编译以后会重新生成GeneratedClass, 旧的GeneratedClass会被销毁掉,而所有引用旧的GeneratedClass的Object会被Reinstanced,但是由于某些诡异的原因,只有Object对应的Outer下面的引用会被替换掉,而其他地方会被替换为nullptr。而重新打开的时候由于走的又是那个诡异的序列化流程,就不会受到这个问题困扰,UE会自动去找那些Class的地址。因此,如果你有啥要实时预览修改的需求,最好要保证你的Object下面引用的子Object的Outer不是自己就是Root,要不然容易被空指针。
页:
[1]