Page 1 of 1

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

Posted: 2019/10/01 02:14
by kag
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になっても大丈夫な作りでしょうか?

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

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

Posted: 2019/10/01 03:24
by caitsithware
ご報告ありがとうございます。

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

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 )