NodeBehavior.GetDataSlotFieldで発生するNullReferenceExecptionについて

ここは、Arbor開発者へ不具合を報告するためのフォーラムです。
報告に必要な項目は以下の通りです。
  • OS(必須)
  • Unityバージョン(必須)
  • Arborバージョン(必須)
  • 再現方法(必須)
  • ビルドプラットフォーム
  • 再現プロジェクト(Arborや他アセットなどを含まない最小構成)もしくは動画
注意:Unityのベータ版およびアルファ版はサポート対象外です。正式リリース版をご利用ください。

Here is a forum for reporting failure to Arbor developer.
The items necessary for reporting are as follows.
  • OS(Required)
  • Unity version(Required)
  • Arbor version(Required)
  • How to reproduce(Required)
  • Build platform
  • Reproduction project (Minimum configuration not including Arbor and other assets) or video
Note: Unity beta and alpha versions are not supported. Please use the official release version.
Forum rules
報告に必要な項目は以下の通りです。
  • OS(必須)
  • Unityバージョン(必須)
  • Arborバージョン(必須)
  • 再現方法(必須)
  • ビルドプラットフォーム
  • 再現プロジェクト(Arborや他アセットなどを含まない最小構成)もしくは動画
注意:Unityのベータ版およびアルファ版はサポート対象外です。正式リリース版をご利用ください。

The items necessary for reporting are as follows.
  • OS(Required)
  • Unity version(Required)
  • Arbor version(Required)
  • How to reproduce(Required)
  • Build platform
  • Reproduction project (Minimum configuration not including Arbor and other assets) or video
Note: Unity beta and alpha versions are not supported. Please use the official release version.
kag
Posts: 32
Joined: 2017/05/19 08:28

NodeBehavior.GetDataSlotFieldで発生するNullReferenceExecptionについて

Post by kag » 2019/10/01 02:14

OS: Windows10
Unity: 2018.4.5、2018.4.7
Arbor: 3.6.2
再現方法:不明(古くからArborをバージョンアップして使用しています)
ビルドプラットフォーム:Android、UnityEditor

いつもお世話になっております。

ArborFSM、ParameterConatinerを含むPrefabをInstantiateした時に、まれに、
NodeBehavior.csの
RebuildDataSlotFields()のEachField<DataSlot>.Find()から呼ばれる
public DataSlotField GetDataSlotField(DataSlot slot)
DataSlotField slotField = _DataSlotFields
if (slotField.slot == slot )
で、slotFieldがnullのケースが有り、NullReferenceExceptionが発生します。

nullになる原因などはわかりますでしょうか?
また、nullになっても大丈夫な作りでしょうか?

よろしくお願いいたします。

User avatar
caitsithware
管理人
Posts: 301
Joined: 2015/08/17 12:41

Re: NodeBehavior.GetDataSlotFieldで発生するNullReferenceExecptionについて

Post by caitsithware » 2019/10/01 03:24

ご報告ありがとうございます。

再現方法が不明とのことなので、ソースコードの確認のみ行いました。

Arbor内部で意図的にnullを入れている箇所は見つからなかったため、Unityによる生成処理などにより勝手に変更されてしまうのかもしれません。

ひとまず該当箇所にslotFieldのnullチェックを入れても問題はなさそうなので、そのように対応しようと思います。

暫定対処方法:
  • Assets/Plugins/Arbor/Internal/Scripts/NodeBehaviour.csを開く。
  • 388行目付近の以下のコードを見つける。

    Code: Select all

    if (slotField.slot == slot )
  • 以下のように変更する。

    Code: Select all

    if (slotField != null && slotField.slot == slot )

Post Reply