😕

VerticalLayoutGroupの子を消した時MissingReferenceExceptionが出る問題

2024/11/28に公開

発生する問題

_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