Component が public で Transform と GameObject のフィールドを持っているため、参照があれば好き勝手に変更できる そのため、外部から操作できなくするコンポーネントを作成してみた
フィールドを削除することは無理なので、参照されても null を返し warning を表示するようにしてある
using System; using UnityEngine; public class SealMonoBehaviour : MonoBehaviour { [Obsolete] public new Transform transform => null; [Obsolete] public new GameObject gameObject => null; }
しかしながら、キャストすれば問題無くアクセスできてしまう
[SerializeField] private SealMonoBehaviour _sealMonoBehaviour; private void Awake() { (_sealMonoBehaviour as MonoBehaviour).transform.position = Vector3.zero; // エラーにならない _sealMonoBehaviour.transform.position = Vector3.zero; // エラーになる }