Page 1 of 2
在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/09 08:10
by kvfreedom
Logic Toolkit Version 1.6.1
Unity Version 6000.0.30f1

- 1.png (136.47 KiB) Viewed 5386 times

- 2.png (41.38 KiB) Viewed 5386 times

- 3.png (78.84 KiB) Viewed 5386 times
Code: Select all
var prefab = await Addressables.LoadAssetAsync<GameObject>(AssetKey);
var results = await Object.InstantiateAsync(prefab, parent, position, rotation);
Prefab使用LogicPlayer,异步生成Prefab的实例,在Unity编辑器中运行从未发现报错,打包后在Android平台运行偶发报错,大约运行10次会有一次报错,不确定是不是LogicToolkit反序列化相关Bug。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/09 09:20
by caitsithware
感谢您的报告。
我们意识到使用 InstantiateAsync 时存在反序列化问题,目前正在向资源商店提交修复版本以供审核。
审核完成后我们将进行更新。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/09 14:03
by caitsithware
我们发布了 1.6.2 版本,支持 OnAfterDeserialize 的线程安全。
请更新并检查。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/10 04:51
by kvfreedom
caitsithware wrote: ↑2024/12/09 14:03
我们发布了 1.6.2 版本,支持 OnAfterDeserialize 的线程安全。
请更新并检查。

- 1.png (347.04 KiB) Viewed 5373 times

- 2.png (404.73 KiB) Viewed 5373 times

- 3.png (256.01 KiB) Viewed 5373 times

- 4.png (26.59 KiB) Viewed 5373 times
1.6.2在Android平台仍然有偶发的报错并且出错概率比上一个版本更高了,另外Restart也失效了。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/10 09:19
by caitsithware
如果您只是发布此类日志或图表的图像而没有详细信息,您将无法解决问题,因为详细信息将不为人知。
特别是在第一张和第二张图中,Game命名空间内处理时出现异常,目前尚不清楚这是否是LogicToolkit的问题。
首先,请检查最小必要项目的复制。
然后,如果LogicToolkit本身有问题,请报告详细的确认步骤。
这是最重要的信息,因为如果没有确认程序,就无法确定问题的原因。
感谢您的合作。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/10 09:47
by caitsithware
我们已经能够重现Restart不起作用的问题,因此我们将修复它。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/10 10:47
by caitsithware
我们已经查明原因,将尽快更新修正版本。
临时解决方法:
- 打开 LogicToolkit.Product\Packages\com.caitsithware.logictoolkit\Runtime\Serialization\ValueInjection.cs
- 将第241行更改如下
Code: Select all
public virtual bool HasFields => _Fields.Count > 0;
- 将以下行添加到第 346 行
Code: Select all
public override bool HasFields => base.HasFields || (_BaseType?.HasFields ?? false);
- 将第362行更改如下
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/10 12:52
by caitsithware
修复版本1.6.3发布
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/11 11:23
by kvfreedom
在1.6.3中,我经过多次实验,目前可以确定这个问题不会在编辑器中报错,会在Android平台报错,Object.InstantiateAsync和Object.Instantiate与报错无关,只使用handle = Addressables.LoadAssetAsync<T>(AssetKey)不Instantiate仍然会报错,若再增加一句handle.WaitForCompletion()则不会报错。
我在最小必要项目中实验不容易出现报错,多次尝试只在某次运行时成功复现过一次,目前还在实验如何能在最小必要项目中必然出现报错。
Re: 在Android平台偶发的异步生成Prefab的实例报错
Posted: 2024/12/11 14:44
by caitsithware
谢谢您提供的信息。
也有可能是线程安全支持不够。
我们将调查细节。
请暂时尝试以下临时解决方案。
- 打开 LogicToolkit.Product\Packages\com.caitsithware.logictoolkit\Runtime\Serialization\ValueInjection.cs
- 在第470行添加以下代码
Code: Select all
private static object s_Lock = new object();
- 将以下代码添加到第473行(Inject方法的第一行)
- 将以下代码添加到第507行(Inject方法的最后一行)