-
Notifications
You must be signed in to change notification settings - Fork 720
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[UE] 偶现蓝图调用 ts写的蓝图函数库的函数 无效的问题 #1964
Comments
#1567 是不是这个原因 |
看起来是。 不过除此之外,还有什么比较好的解决方法吗? |
把上面截图的那里注释掉之后,打了很多log看了一下,可能不是这个原因。 那个问题是个普通类的CDO。我这边出问题的是个BlueprintFunctionLibrary。TryBindJs的时候BlueprintFunctionLibrary会直接遍历所有的Function直接去劫持方法。 但是出问题的library,在遍历Function的时候输出FunctionFlags,所有函数的FunctionFlags全都是0。看起来是FunctionFlags还没反序列化出来的时候就走到TryBindJs了。 之前出过类似的问题,不过当时是开了异步加载线程,现在已经关了。而且只有那一个Library出问题。编辑器下正常,只有打出来的客户端包才有问题。 请问还有什么别的思路么? |
不知道,不过应该在RebindJs里面吧 |
不过你不改这段的话,打包后还是不会绑定上,除非你动态加载了这个对象,这样会走到动态绑定那段 |
其实上面那段改不改,对于我这个问题来说没区别。不改bind不上,改了也bind不上。 主要问题就是FunctionFlags全为0。所以即使后面能触发动态绑定,puerts绑定函数的时候也会有判断FunctionFlag的逻辑,也会有问题。 |
打出来的包,在RebindJs里遍历UClass的时候遍历不到TS生成类,Editor下才能遍历到。 |
看起来都没关系。 第一个commit是对BPFL做了特殊处理,遍历每个函数,判断Flag,是static的话直接劫持函数。但是我这边的问题就是 “函数的flag都是0”,导致判断不通过. 第二个commit的话,主要是处理“非GameThread加载代理蓝图”,但是目前我们项目是直接关了异步加载线程的( 之前出过问题#1818 (comment) )。按我的理解,这个时候的加载应该是完全走游戏线程的。还是说,即使关了异步加载线程,假如ts生成的蓝图,被地图里的某个被UE序列化的东西触发加载了,也会走非游戏线程吗?( #1851 (comment) ) |
Bind成功的static UFunction ObjectFlag: Bind失败的static UFunction ObjectFlag: 看起来是绑定失败的UFunction还没Load |
我在引擎测加了个PostLoad的Event,Puerts里去监听这个Event。触发的时候,如果PostLoad的是个BPFL会再尝试走一次Bind流程,这个时候的flag是100%正确的。 |
那你看看加载的栈就知道原因了 |
Editor下完全正常。
但是打出来的包(无论是Client还是DS),有时候会出现 蓝图内 调用ts写的蓝图函数库的静态函数 无效 的问题。
表现为:没有报错,没有输出调用的函数内写的log,就是返回一个默认值。
之前可以通过重新保存一下生成的蓝图,或者修改一下函数名去修复这个问题。
但是这次遇到的问题,通过前面两个方法都无法修复。最后是把打包配置的bUseIoStore改为false解决了上述问题。
请问有没有碰到过类似的问题?有没有什么定位问题的思路?
UE版本为5.5.1。
puerts版本更新到 e0a0271
The text was updated successfully, but these errors were encountered: