找回密码
 立即注册
查看: 220|回复: 0

【UnrealEngine5】一些杂七杂八的备忘录

[复制链接]
发表于 2022-11-17 20:55 | 显示全部楼层 |阅读模式
这篇文章主要目的是记录一些,没怎么搞懂没法写成单独文章的内容备忘,毕竟人不能踩进同一条河流两次,但是可以两次掉进同一个坑嘛~
蓝图的重新编译

起因是原本打算制作一个下面样子的自定义蓝图,蓝图的图里的每个节点都是通过蓝图定义出来的,在编译的时候把图里的数据变成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,要不然容易被空指针。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 20:01 , Processed in 0.117589 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表