😕
VerticalLayoutGroupの子を消した時MissingReferenceExceptionが出る問題
発生する問題
_verticalLayoutGroup.CalculateLayoutInputVertical();
これを呼んだ時、レイアウトグループの子を消していると以下のエラーが発生する。
MissingReferenceException: The object of type 'RectTransform' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
UnityEngine.RectTransform.get_sizeDelta () <0x7551af4c0 + 0x0004f> in <30c530d7db63441097c8dced8b6e46f0>:0
UnityEngine.UI.HorizontalOrVerticalLayoutGroup.GetChildSizes (UnityEngine.RectTransform child, System.Int32 axis, System.Boolean controlSize, System.Boolean childForceExpand, System.Single& min, System.Single& preferred, System.Single& flexible) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Layout/HorizontalOrVerticalLayoutGroup.cs:226)
UnityEngine.UI.HorizontalOrVerticalLayoutGroup.CalcAlongAxis (System.Int32 axis, System.Boolean isVertical) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Layout/HorizontalOrVerticalLayoutGroup.cs:104)
UnityEngine.UI.VerticalLayoutGroup.CalculateLayoutInputVertical () (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Layout/VerticalLayoutGroup.cs:26)
解決法
CalculateLayoutInputHorizontalの中でキャッシュクリアをしているので、先にそちらを呼ぶ。
_verticalLayoutGroup.CalculateLayoutInputHorizontal();
_verticalLayoutGroup.CalculateLayoutInputVertical();
CalculateLayoutInputHorizontalではキャッシュクリアしているのに、Verticalではしてない。
どうして
Discussion