はじめに
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 ) ); } }
このようなコードに書き換えたら警告が出なくなった