docs.unity3d.com
    目次を表示する/隠す

    スクリプトのリファクタリング

    Note

    バージョン 2019/2020 LTS を使用している場合は Unity Asset Store から Visual Scripting パッケージをダウンロードしてください。

    Visual Scripting はメソッドやフィールド、プロパティをプロジェクト内のカスタムスクリプトから自動的に呼び出します。例えば、カスタムの Player クラスから TakeDamage メソッドでノードを作成できます。

        using UnityEngine;
    
            public class Player : MonoBehaviour
            {
                public void TakeDamage(int damage)
                {
                    // ...
                }
            }
    

    Script Graph (スクリプトグラフ) 内で、以下の例のように、スクリプトを変更して TakeDamage メソッドあるいは Player クラスを削除するかその名前を変更すると、

        using UnityEngine;
    
            public class Player : MonoBehaviour
            {
                public void InflictDamage(int damage)
                {
                    // ...
                }
            }
    

    Graph ウィンドウでノードが赤くなり、Graph Inspector に警告が表示されます。

    メンバー名を変更する

    上記の例のエラーを修正するには、スクリプトファイルを再度開き、[RenamedFrom] 属性を使用して新しい名前を以前の名前にマップします。これは 1 つの文字列パラメーター (メンバーの以前の名前) を取ります。

        using UnityEngine;
            using Unity.VisualScripting;
    
            public class Player : MonoBehaviour
            {
                [RenamedFrom("TakeDamage")]
                public void InflictDamage(int damage)
                {
                    // ...
                }
            }
    

    この属性は、再コンパイルが成功した後もソース内に残すことをお勧めします。Visual Scripting は、Unity が全てのグラフを正しい名前で再シリアライズすることを保証できません。その点において、Visual Scripting の [RenamedFrom] 属性は、Unity 独自の [FormerlySerializedAs] 属性とよく似ています。

    型の名前を変更する

    [RenamedFrom] 属性を使用している型 (クラス、構造体、enum を含む) の名前を変更できます。

    例えば以下では、Player クラスが Character という名前に変更されています。

        using UnityEngine;
            using Unity.VisualScripting;
    
            [RenamedFrom("Player")]
            public class Character : MonoBehaviour
            {
                [RenamedFrom("TakeDamage")]
                public void InflictDamage(int damage)
                {
                    // ...
                }
            }
    
    Note

    古い名前には名前空間を含める必要があります。前の例では名前がグローバル名前空間にあったため、これは必須ではありませんでした。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)