DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Here is a forum for reporting failure to Arbor developer.
Please read the forum rules carefully and enter the information necessary to confirm the problem.

Note:
  • Please read the "Update Guide" carefully when updating Arbor.
  • The bugs that we already know are summarized in "Known Issues", so please check once.
  • Please check ReleaseNote and use the latest version if possible before reporting a bug.
  • Unity beta and alpha versions are not supported. Please use the official release version.
  • In principle, defects caused by the introduction of other assets are not supported. If you find a defect, please report it after isolating which asset is the problem.

ここは、Arbor開発者へ不具合を報告するためのフォーラムです。
フォーラムルールをよく読み、不具合確認に必要な情報を記載するようお願いします。

注意点:
  • Arborを更新する際は「アップデートガイド」をよく読み行ってください。
  • 既に把握している不具合は「既知の問題」にまとめてありますので一度確認してみてください。
  • 不具合報告をする前にReleaseNoteを確認し、なるべく最新バージョンを使用して下さい。
  • Unityのベータ版およびアルファ版はサポート対象外です。正式リリース版をご利用ください。
  • 他アセット導入による不具合は原則サポート対象外です。不具合を見つけた場合はどのアセットの問題であるか切り分けた上でのご報告をお願いいたします。

Forum rules
The items necessary for reporting are as follows.
  • OS(Required)
  • Unity version(Required)
  • Arbor version(Required)
  • How to reproduce(Required)
    The reproduction method should be described accurately so that anyone can read the same procedure.
    If you do not know the exact reproduction procedure, as long as you can remember it, so please tell us what you were doing immediately before and the last time you edited it.
  • Build platform
  • Reproduction project (Minimum configuration not including Arbor and other assets) or video

Note:
  • Please read the "Update Guide" carefully when updating Arbor.
  • The bugs that we already know are summarized in "Known Issues", so please check once.
  • Please check ReleaseNote and use the latest version if possible before reporting a bug.
  • Unity beta and alpha versions are not supported. Please use the official release version.
  • In principle, defects caused by the introduction of other assets are not supported. If you find a defect, please report it after isolating which asset is the problem.

報告に必要な項目は以下の通りです。
  • OS(必須)
  • Unityバージョン(必須)
  • Arborバージョン(必須)
  • 再現方法(必須)
    再現方法については、誰が読んでも同様の手順を行えるよう正確に記述するようにお願いいたします。
    もし正確な再現手順が不明な場合、覚えている限りで構いませんので直前に行っていたことや最後に編集した時のことを教えてください。
  • ビルドプラットフォーム
  • 再現プロジェクト(Arborや他アセットなどを含まない最小構成)もしくは動画

注意点:
  • Arborを更新する際は「アップデートガイド」をよく読み行ってください。
  • 既に把握している不具合は「既知の問題」にまとめてありますので一度確認してみてください。
  • 不具合報告をする前にReleaseNoteを確認し、なるべく最新バージョンを使用して下さい。
  • Unityのベータ版およびアルファ版はサポート対象外です。正式リリース版をご利用ください。
  • 他アセット導入による不具合は原則サポート対象外です。不具合を見つけた場合はどのアセットの問題であるか切り分けた上でのご報告をお願いいたします。
tsumegaeru
Posts: 3
Joined: 2020/05/25 01:39

DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by tsumegaeru »

OS: Windows10
Unity: 2019.2.10f1
Arbor: 3.6.8
再現方法: 不明
ビルドプラットフォーム:Windows Player

おそらくこちらの投稿と同じケースだと思うのですが
viewtopic.php?f=6&t=2652

DataBranch.cs の FindOutputSlot()で
nodeBehaviour.GetDataSlotField(slotIndex) が 稀に null を返し
NullReferenceException が発生する事がありました。直後に

Code: Select all

if (slotInfo == null) { continue; } 
を挿入することでほとんどの場合では例外の発生を防げているのですが
本来アクセスすべきスロットが null を返してしまう場合があるようで、
こうなると当然nodeGraphも正しく動作しません。

なにか解決策はありますでしょうか。
よろしくお願い致します。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by caitsithware »

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

nodeBehaviour.GetDataSlotField(slotIndex)が稀にnullを返す、ということですね。
再現方法不明ということなので、ひとまずソースコードの確認からいたしました。

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

暫定対処

暫定対処ですが、問題となるDataSlotField自体はシーンに保存されない内部的なデータとなるため、シーンを開き直すなどで例外そのものは発生しなくなるかと思います。
ただし、保存していないシーンだった場合、例外が発生している状態でシーンを保存してしまうと他に何かしら問題が発生する可能性もあるため、ご注意ください。

コード上での暫定対処としましては、ご提示していただいたように、

Code: Select all

if (slotInfo == null) { continue; } 
と追加することで、結果的にDataSlotFieldが見つからなければDataSlotFieldの再構築が行われるようになっております。
これで再構築を行ってもなお「本来アクセスすべきスロットがnullを返してしまう」ということなので、他にも不具合があるなど根本的な原因は別にあるのかもしれません。



引き続き調査してまいります。
もし再現方法や、再現プロジェクト(Arborや他アセットなどを含まない最小構成)がありましたら追記していただけると助かります。

以上です。
ご不便おかけして申し訳ございませんがよろしくお願いいたします。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by caitsithware »

追記です。

いくつかご確認したい点がございます。
  1. 発生するのを確認した直前に行っていたこと
    Arborのグラフを組んでいる時でしたら、何を直前に行っていたか、だいたい覚えている範囲で良いので教えてくださると助かります。
  2. Arborの更新などを最近行ったか
    もし更新の際に上書きインポートのみ行った場合、古いクラスにより不具合が発生する可能性が高いです。
    アップデートガイドを参考に、インポートし直してみてください。
    また、Unityの不具合なのか稀にスクリプトファイルを更新してもコンパイルが行われず処理がおかしくなるケースもあるようなので、Reimport Allなどを行って様子を見るのも良いかもしれません。
  3. 例外が発生した時のスタックトレース
    どのタイミングでこの例外が発生するか知りたいので、例外が発生した際のログでスタックトレース(Consoleの詳細で見れるどのメソッドが呼ばれたかの情報)をそのまま張っていただけると助かります。
  4. 該当スロットを持っているNodeBehaviourの型は何か
    slotInfoのnull判定を以下のように書き換えて、NodeBehaviourの型が何かを教えていただきたいです。

    Code: Select all

    if( slotInfo == null )
    {
    	Debug.LogError("slotInfo == null : " + nodeBehaviour.GetType());
    	continue;
    }
    
    また自作したスクリプトであれば、どのような形でスロットを持っているか等も教えていただけると助かります。
再現できた時の情報提供につきましては、再現手順不明とのことなのでもし再び発生するようなことがあればその時に張っていただければ大丈夫です。

以上です。
お手数おかけして申し訳ございませんが、上記の点ご確認よろしくお願いいたします。
tsumegaeru
Posts: 3
Joined: 2020/05/25 01:39

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by tsumegaeru »

早速のご返答ありがとうございます。

1.に関して
 →ゲームのプレイ中に発生しました
2.に関して
 →バージョンの変更は行っていません(最初から3.6.8)

3、4については確認でき次第ご報告させていただきます。
引き続きよろしくお願い致します。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by caitsithware »

情報提供ありがとうございます。
tsumegaeru wrote: 2020/05/26 08:59 1.に関して
 →ゲームのプレイ中に発生しました
こちらについて、もう少し詳細にお聞きしたい点がございます。
  • UnityEditor上でプレイしての動作確認中でしょうか。
    あるいはWindows用ビルドを行って実行形式のみでのプレイ中ということでしょうか。
  • UnityEditor上でのプレイ中ということでしたら、プレイ中に何かしら編集は行いましたか?
    例:「データスロットを接続した」「スクリプトを書き替えてコンパイルが走りホットリロードが入った」「編集中にアンドゥリドゥを何回かした」など。
  • 例外が発生する以前に問題なく動作していた時から例外が発生するようになるまでの間に行った変更点など。
    覚えている限りで構いませんので、この時までは大丈夫だったけどこういうことしたら発生するようになったといった心当たりなどありましたら教えてください。
  • 編集などしていなかったとしても、どういったタイミングで発生しましたか?
    例:「再生ボタン押した瞬間から発生していた」「敵が新たに湧いたときに発生した」「動作確認のためにArborEditorを開いたら発生した」など。
覚えている限りで些細なことでも構いませんので、再現に繋がりそうな情報がありましたら教えてくださると助かります。
tsumegaeru wrote: 2020/05/26 08:59 2.に関して
 →バージョンの変更は行っていません(最初から3.6.8)
バージョンについては把握いたしました。
なお現在最新版は3.6.11でいくつか不具合修正も行っているため、折を見てよろしければ更新もしてみてくださいね。

3、4についても確認でき次第ご報告いただけるということで助かります。
再現が取れないことには、ご提示いただいたようなnullチェック入れ込むだけの暫定対処になってしまいますので、原因特定へ協力していただけるのは本当に助かります。
ご不便おかけして申し訳ございませんがよろしくお願いいたします。
tsumegaeru
Posts: 3
Joined: 2020/05/25 01:39

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by tsumegaeru »

ご返答が遅くなって申し訳ありません。
あるいはWindows用ビルドを行って実行形式のみでのプレイ中ということでしょうか。
Editor上でも実行形式でも発生していました。
この時までは大丈夫だったけどこういうことしたら発生するようになったといった心当たりなどありましたら教えてください。
まとまった量の実装を行った後で発生に気づいたので、申し訳ないのですがこれといった心当たりはありません。
再現が取れないことには、ご提示いただいたようなnullチェック入れ込むだけの暫定対処になってしまいますので、原因特定へ協力していただけるのは本当に助かります。
はい、こちらもそのつもりでおります。
作業の状況が変わってしまってすぐには調べられないのですが、
もう少し詳しいことが分かり次第、また書き込みをさせて頂きます。

引き続きよろしくお願い致します。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by caitsithware »

ご返答ありがとうございます。
こちらも引き続き調査してまいります。

また最新バージョンの3.6.12では、暫定対処としてnullだった場合にエラーログを出力するという形に変更いたしました。
例外が発生して処理が止まるよりかは多少マシかと思いますので、もしよろしければ更新してみてください。
3.6.12リリースノート
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: DataBranch.cs の FindOutputSlot()で NullReferenceException が発生

Post by caitsithware »

こちら、長らく再発していない模様&最新版では該当箇所の処理が変更されているため一旦このトピックはクローズといたします。
似たような不具合が発生した場合でも別途トピックを立ててご報告いただけると助かります。
Locked