うにてぃブログ

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

【Unity】RectTransform の値を Inspector から変更できなくする

Content Size FitterLayoutGroup などを使っていると、Inspector の値を変更できなくなる

f:id:hacchi_man:20210530141737p:plain:w300

これを実現するためには、DrivenRectTransformTracker を利用する

DrivenRectTransformTracker は 登録した RectTransform の値を Inspector で変更できなくし
スクリプトでのみ変更できるようにする

サンプル

最低限の実装で一度利用してみると以下のようなコードになる

RequireComponent(typeof(RectTransform))]
public class SampleMonoBehaviour : MonoBehaviour
{
    private DrivenRectTransformTracker _tracker;
 
    private void Reset()
    {
        var rect = transform as RectTransform;
        _tracker.Add(this, rect, DrivenTransformProperties.All);
    }
}

変更を制限する フィールドは DrivenTransformProperties を変更することで好きなように設定できる

DrivenTransformProperties - Unity スクリプトリファレンス

値の変更

値を変更する際には Clear を呼び出してから、再度 Add する必要がある

   private void Change(float width)
    {
        _tracker.Clear();
        var rect = transform as RectTransform;
        _tracker.Add(this, rect, DrivenTransformProperties.All);
 
        var sizeDelta = rect.sizeDelta;
        sizeDelta.x = width;
        rect.sizeDelta = sizeDelta;
    }