Unity プログラミングのコツ

Unity でのプログラミングに関しては、エディター内のワークフローを改善し、開発プロセスをスピードアップするための便利な programming キーワードやコマンドが豊富にあります。

キーワードの中にはデバッグ専用のものもありますが、その他のキーワードはエディター ロジックをスクリプト ロジックから分離するように設計されています。

1. '[SerializeField]' 属性

デフォルトでは、Unity はインスペクターからプライベート変数を隠しますが、プライベート変数の前に '[SerializeField]' 属性を追加すると、他のスクリプト内からアクセスできないようにしながら、インスペクターで設定できるようになります。

[SerializeField]
private int myPrivateVariable;

2. '[HideInInspector]' および '[System.NonSerialized]' 属性

'[HideInInspector]' 属性と '[System.NonSerialized]' 属性は両方とも、パブリック変数をインスペクタから隠すという同様の機能を持っていますが、シリアル化の点で若干異なります。

'[HideInInspector]' と '[System.NonSerialized]' の違いは、'[HideInInspector]' はインスペクターから変数を非表示にするだけですが、Unity は変数のシリアル化を続行することです (つまり、デフォルト値はコードで指定された値と異なる可能性があります)。一方、'[System.NonSerialized]' はインスペクターから変数を隠すだけでなく、変数をシリアル化しないように Unity に信号を送ります (つまり、デフォルト値はセッション間でコードで指定された値にリセットされます)。

[HideInInspector]
public int myInternalVariable = 0; //Will always be 0 after the first initialization, so if you decide to change the value in the script, it may not always reflect in the Editor. Often used to remove clutter from the inspector.

[System.NonSerialized]
public int myNonSerializedVariable = 1; //The initial value will always be 1, or whatever value is set. Often used to mimic a private variable, while keeping it accessible from within other scripts.

3. '[ExecuteAlways]' 属性

'[ExecuteAlways]' ゲームをプレイしていないときでも、スクリプトが編集モードおよび Prefab 編集モードで実行されるように強制します。これは、テストやデバッグの目的に役立ちます。

属性はクラス宣言の前に追加されます。

[ExecuteAlways]
public class MyScript : MonoBehaviour {
    // ...
}

4. 'Debug.Break()'

'Debug.Break()' エディタを一時停止します。

この機能は、インスペクターで特定の値を確認する必要があり、手動で一時停止できない場合に便利です。

void Update() {
    if (someCondition) {
        Debug.Break();
    }
}

5. '[Range]' 属性

'[Range]' 属性を使用すると、エディターでパブリック float または int 変数のスライダーを作成できます。これは、よりユーザーフレンドリーな方法で、外出先で値を調整するのに役立ちます。次のように最小値と最大値を指定するだけです。

[Range(0f, 1f)]
public float myFloatVariable;

お気に入りのプログラミングのヒントやコツを Unity にコメントしてください。

おすすめの記事
C# の便利なキーワードの Unity リスト
Unity C# スクリプト言語の概要
Unity のコンポーネントベースのアーキテクチャを理解する
Poppy Playtime からインスピレーションを得て Unity で GrabPack を作成する
Unity でバレットタイムエフェクトを作成する
Unity でインタラクティブなオブジェクトを作成する
Unity でのキネティック インタラクションの実装