うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Component の Transform や GameObject にアクセスさせない

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; // エラーになる
    }