Loading... # 一个由 BlueprintPure 函数引起的 “Bug” 这篇文章会很短,其实主要是记录一下写出来的一个bug。 ## 背景 背景主要是测试一个功能,用到了一个 BlueprintPure 函数: ![QQIMAGE5SW2WSC](https://images-1300215216.cos.ap-guangzhou.myqcloud.com/Blog/QQIMAGE5SW2WSC.png) 总体函数的逻辑大概是这样的: ![QQ20220905163942](https://images-1300215216.cos.ap-guangzhou.myqcloud.com/Blog/QQ20220905163942.png) 结果测试发现,运行效果如下: ![QQImage_9NJ295GT](https://images-1300215216.cos.ap-guangzhou.myqcloud.com/Blog/QQImage_9NJ295GT.png) ## 分析 实际上这是因为 `BlueprintPure` 函数是每次在节点中访问一次就会执行一次。上面的程序逻辑中,我们执行了两次访问操作(一次是转换成字符串,一次是设置到名为 `GuardBuying` 的 `UStruct` 成员变量中),正是因为这两次访问操作,导致生成了两个不一样的随机数。 所以只需要将逻辑改成: ![20220905164648](https://images-1300215216.cos.ap-guangzhou.myqcloud.com/Blog/20220905164648.png) 即只读取一次,并将得到的结果保存到变量中,后面要用的时候都访问该变量即可避免多次执行 `BlueprintPure` 类型的随机数生成函数,每次都获得一个新的随机数。 最后修改:2022 年 09 月 05 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 随缘