サークル獏の佐藤敏 Unityとか備忘録

サークル獏の佐藤敏がUnityとかで知ったTipsを書いておく備忘録です。

UnityでSerializedObject target has been destroyed.が出る場合の対策?(Unity 2019.1、まだ未確定)

Unityで

SerializedObject target has been destroyed.
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

というエラーが出ることがある。

f:id:VinSatoo:20191103175633p:plain
アワレにもエラーが出て髪の毛がぶっとんだ状態で実行ストップ

検索すると「再起動すりゃ治る」とか身も蓋もない解決策ばかりが引っかかり、実際再起動したりOpen Sceneをしなおしたりすると大体直る。

teratail.com


しかし割と頻繁に起こり、原因が不明で非常に困っていた。

Sprite atlasに関するバグ報告の発見

で、エラーメッセージでなく「UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)」で検索しているとき、別のUnity不具合報告を見つけていた。

issuetracker.unity3d.com
Unity2019.1βとか2αでSprite atlasを扱い、インスペクタでatlasを表示したままPlayボタンを押すとエラーが出るという不具合報告である。(2019.2の正式版で治った?)

でもウチはSprite atlasをいじっていないときだしエラーメッセージも違うから関係ないよなあ、と思っていたのが、ふと思い立ってMaterialをインスペクタに表示した状態でゲームをPlayしてみると……

f:id:VinSatoo:20191103180403p:plain
こんな風に表示しながら

かなり高い確率でそのMaterialのキャラが画面に登場したとき「Serialized Object has been destroyed.」が出ることが判明。逆にMaterialをインスペクタに表示していない時はここ数日エラーが出ていない。

というわけで

  • 「Serialized Object has been destroyed.」が出るときは、Materialやらを選択せずにゲームをPlay
  • 2019.2の最新版にすればこのバグは取れているかもしれない? ←2019/11/6 追記 2019.2.11fにしてもダメでした……