在Android平台偶发的异步生成Prefab的实例报错

Forum rules
Please confirm before reporting
  • Please confirm in advance that it is a problem with LogicToolkit and not with Unity itself, other assets, or the user's project.
  • Please confirm that the problem occurs in a project with the smallest possible configuration and clarify how to reproduce it.
  • Please check if it is described in Known Issues.

Information required to report a bug
  • Logic Toolkit version
  • Unity version
  • How to reproduce

=======

報告する前の確認のお願い
  • Unity本体や他のアセット、ユーザーのプロジェクト側による問題ではなくLogicToolkitの問題であることを事前に確認してください。
  • 可能な限り最小構成のプロジェクトで問題の発生を確認し、再現方法を明確にしてください。
  • 既知の問題に記述されているかを確認してください。

バグを報告するために必要な情報
  • Logic Toolkit バージョン
  • Unity バージョン
  • 再現方法

=======

We accept posts in languages ​​other than English and Japanese, but replies will be sent via machine translation.
Thank you for your understanding.

Post a reply

Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: 在Android平台偶发的异步生成Prefab的实例报错

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/17 03:07

感谢您的确认。
我将关闭它作为解决。

Re: 在Android平台偶发的异步生成Prefab的实例报错

by kvfreedom » 2024/12/17 02:51

caitsithware wrote: 2024/12/12 12:00 修复版本1.6.4发布
在1.6.4中,多次实验未发现异步生成报错的情况,此问题已解决。

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/12 12:00

修复版本1.6.4发布

Re: 在Android平台偶发的异步生成Prefab的实例报错

by kvfreedom » 2024/12/12 03:29

caitsithware wrote: 2024/12/11 14:44 请暂时尝试以下临时解决方案。
  • 打开 LogicToolkit.Product\Packages\com.caitsithware.logictoolkit\Runtime\Serialization\ValueInjection.cs
  • 在第470行添加以下代码

    Code: Select all

    private static object s_Lock = new object();
  • 将以下代码添加到第473行(Inject方法的第一行)

    Code: Select all

    lock (s_Lock) {
  • 将以下代码添加到第507行(Inject方法的最后一行)

    Code: Select all

    }
我尝试了临时解决方案,LoadAssetAsync并InstantiateAsync报错概率明显减少,我将LoadAssetAsync换为LoadAsset并InstantiateAsync则未发现报错

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/12 01:21

我们发现了几个线程安全支持不足的地方。
我们目前正在等待资产审查完成。
请稍等片刻,直至发布。

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/11 14:44

谢谢您提供的信息。
也有可能是线程安全支持不够。
我们将调查细节。

请暂时尝试以下临时解决方案。
  • 打开 LogicToolkit.Product\Packages\com.caitsithware.logictoolkit\Runtime\Serialization\ValueInjection.cs
  • 在第470行添加以下代码

    Code: Select all

    private static object s_Lock = new object();
  • 将以下代码添加到第473行(Inject方法的第一行)

    Code: Select all

    lock (s_Lock) {
  • 将以下代码添加到第507行(Inject方法的最后一行)

    Code: Select all

    }

Re: 在Android平台偶发的异步生成Prefab的实例报错

by kvfreedom » 2024/12/11 11:23

caitsithware wrote: 2024/12/10 12:52 修复版本1.6.3发布
在1.6.3中,我经过多次实验,目前可以确定这个问题不会在编辑器中报错,会在Android平台报错,Object.InstantiateAsync和Object.Instantiate与报错无关,只使用handle = Addressables.LoadAssetAsync<T>(AssetKey)不Instantiate仍然会报错,若再增加一句handle.WaitForCompletion()则不会报错。
我在最小必要项目中实验不容易出现报错,多次尝试只在某次运行时成功复现过一次,目前还在实验如何能在最小必要项目中必然出现报错。

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/10 12:52

修复版本1.6.3发布

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/10 10:47

我们已经查明原因,将尽快更新修正版本。
临时解决方法:
  • 打开 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行更改如下

    Code: Select all

    instanceTypeCache = this;

Re: 在Android平台偶发的异步生成Prefab的实例报错

by caitsithware » 2024/12/10 09:47

我们已经能够重现Restart不起作用的问题,因此我们将修复它。

Top