以下の内容はhttps://baba-s.hatenablog.com/entry/2022/08/25/105945より取得しました。


【Unity】SendMessage cannot be called during Awake, CheckConsistency, or OnValidate (XXXX: OnRectTransformDimensionsChange)

はじめに

using UnityEngine;

public class Example : MonoBehaviour
{
    private void OnValidate()
    {
        Apply();
    }

    private void Apply()
    {
        var rectTransform = GetComponent<RectTransform>();

        rectTransform.sizeDelta = new Vector2
        (
            Random.Range( 0f, 100f ),
            Random.Range( 0f, 100f )
        );
    }
}

上記のようなコードを書いたら、コンパイル完了時に

SendMessage cannot be called during 
Awake, CheckConsistency, or OnValidate (XXXX: OnRectTransformDimensionsChange)

上記の警告が発生する現象に遭遇した

OnValidate から RectTransform の sizeDelta を変更したら
内部で SendMessage が使われてしまい、
「Awake・CheckConsistency・OnValidate では SendMessage は使えません」
という警告が出ているようだった

対応方法

using UnityEngine;

[ExecuteAlways] // ★
public class Example : MonoBehaviour
{
    private bool m_isApply; // ★

    private void OnValidate()
    {
        m_isApply = true; // ★
    }

    // ★
    private void Update()
    {
        if ( !m_isApply ) return;
        m_isApply = false;

        Apply();
    }

    private void Apply()
    {
        var rectTransform = GetComponent<RectTransform>();

        rectTransform.sizeDelta = new Vector2
        (
            Random.Range( 0f, 100f ),
            Random.Range( 0f, 100f )
        );
    }
}

このようなコードに書き換えたら警告が出なくなった




以上の内容はhttps://baba-s.hatenablog.com/entry/2022/08/25/105945より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14