puerts
puerts copied to clipboard
[Unity] Bug: Vector3对象undefined
前置阅读 | Pre-reading
Puer的版本 | Puer Version
1.3.4
Unity的版本 | Unity Version
2021.3.1f1c1
发生在哪个平台 | Platform
Editor(win)
错误信息 | Error Message
No response
问题重现 | Bug reproduce
在Update中执行代码:
1. const cpos = this.transform.localPosition
2. if (cpos == undefined || this.transform.localPosition == undefined) {
3. console.error(cpos, this.transform.localPosition)
4. }
执行完第一行代码之后,通过断点和打印得到以下几种情况
情况一:cpos = (1,1,1),this.transform.localPosition = undefined
情况二:cpos = undefined,this.transform.localPosition = (1,1,1)
情况三:进了if判断,cpos = (1,1,1),this.transform.localPosition = (1,1,1)
以上三种情况都是极小概率出现。
认真审核过代码没有其它地方有赋值操作。
尝试过的方案:
换1.3.9和1.4.0版本。
开启/关闭BlittableCopy。
使用StaticWrapper
@zombieyang 能给看看吗
@zombieyang 能给看看吗
极小概率的事情有点难入手查。 另外我没看懂你的描述,你说尝试过几种方案,是说这几种方案都会小概率出现吗?是只试了使用StaticWrapper的情况吗?
@zombieyang 能给看看吗
极小概率的事情有点难入手查。 另外我没看懂你的描述,你说尝试过几种方案,是说这几种方案都会小概率出现吗?是只试了使用StaticWrapper的情况吗?
我改了下描述,那几种方案和不使用StaticWrapper都尝试过了都有概率出现。知道可能什么情况会出现这种bug吗?
有个调试的思路你可以试试: 生成StaticWrapper,在wrapper里,localPosition的getter函数里打印Log。
看看当JS获得undefined的时候,对应C# wrapper里取到了什么东西。 如果C#里能取到,JS里undefined,就再往里面打印,直到PuertsDLL.ReturnObject为止。
如果还查不出,就需要自己编plugin来看了
另外,你的游戏里有多个JsEnv共存吗
有个调试的思路你可以试试: 生成StaticWrapper,在wrapper里,localPosition的getter函数里打印Log。
看看当JS获得undefined的时候,对应C# wrapper里取到了什么东西。 如果C#里能取到,JS里undefined,就再往里面打印,直到PuertsDLL.ReturnObject为止。
如果还查不出,就需要自己编plugin来看了
另外,你的游戏里有多个JsEnv共存吗
好的我试试,就一个JsEnv
多JsEnv应该也导致不了这问题。鉴于其他项目没反馈过类似的问题,我有点怀疑是多线程导致。 最好能提供个简单的重现工程。
多JsEnv应该也导致不了这问题。鉴于其他项目没反馈过类似的问题,我有点怀疑是多线程导致。 最好能提供个简单的重现工程。
好的,我有时间提供一个demo
https://github.com/Tencent/puerts/commit/41734e7aa76ec5dfae1b0142778206902ce0c1c1 试下这个修复能不能好。自己测试的过程中发现如果前面有构造函数抛过错,会在某一刻得到空的结构体。