スクリプトの名前設定
Name your scripts to help the compiler identify your classes. Use namespaces to logically organize your scripts and prevent class name conflicts.
読み終わるまでの所要時間 8 分最終更新 1ヶ月前
スクリプトファイル名や、ファイル内で宣言されるクラス名は慎重に選択する必要があります。適切なファイル名を使用し、名前空間でクラスを整理すると、コンパイラーがクラスをエラーなしで識別できるようになります。
スクリプトファイル名
スクリプトの作成時に入力したファイル名は、その中で定義するクラス名にも使用されます。スクリプトファイル名は、その中で定義するクラス名と一致させることを推奨します。
Unity のビルトインの型 と型 から派生したスクリプトでは、ファイル名が一致しなくても、スクリプトで定義されたクラス型を解決できますが、いくつかの制限があります。
MonoBehaviourScriptableObject- スクリプトで複数のクラスが定義されている場合、Unity はファイルと同じ名前のクラスを選択します。
- C# の キーワードを使用して、複数のファイルで単一の MonoBehaviour 派生クラスを定義する場合、
partialクラスと同じ名前のファイルのみを コンポーネント として使用できます。partial
ノート: クラス名が特定のファイルと明確に一致しない場合、Unity は警告を表示します。
クラス名と名前空間
同じ名前のクラスがプロジェクトの異なる部分で宣言されている場合、名前の競合が発生します。名前の競合が発生する可能性は、プロジェクトのスケールと協力者の数に応じて増加します。例えば 1 人の開発者がメインプレイヤーキャラクターの制御コードを作成し、別の開発者が敵キャラクターに使用する同等の制御コードを作成したとします。両方の開発者がメインクラス の呼び出しを選択した場合、コンパイラーはコード内の の使用がどのクラスを参照しているかを判断できません。
ControllerControllerクラス名の競合を避けるために、C# プログラミングではクラスを名前空間の下に整理することをお勧めします。名前空間はクラスの集合体であり、クラス名の前に付けられた名前空間は、そのクラスを完全に明確に参照する方法を提供します。詳細については、名前空間 に関する Microsoft のドキュメントを参照してください。
以下の例では、クラス と は という名前空間のメンバーです。
Controller1Controller2Enemynamespace Enemy { public class Controller1 : MonoBehaviour { ... } public class Controller2 : MonoBehaviour { ... }}
これらのクラスは、完全な名前を使用することでコード内で明確に参照できます。完全な名前とは名前空間とクラス名を合わせたものであり、この場合はそれぞれ と です。名前空間宣言は、既存のクラス宣言を囲んで追加できるため、すべてのクラス名を個別に変更する必要はありません。クラスがどこにあっても (別のソースファイルにあっても)、クラスを囲んで名前空間宣言を追加することができます。
Enemy.Controller1Enemy.Controller2名前空間のプレフィックスを繰り返し入力することを避けるにはファイルの先頭に ディレクティブを追加します。
usingusing Enemy;
これにより、コンパイラーは、このファイル内の および への参照をそれぞれ および として解決します。スクリプトが別の名前空間にある同じ名前のクラスも参照する必要がある場合 (例えば )、名前空間のプレフィックスを指定しなければなりません。競合するクラス名を含む 2 つの名前空間が同じファイルの ディレクティブを使用してインポートされた場合、コンパイラーエラーが発生します。
Controller1Controller2Enemy.Controller1Enemy.Controller2Playerusing複数の名前空間の制限
Unity には、名前空間、MonoBehaviour、ScriptableObject クラスに関する特定の制限があります。ファイルに MonoBehaviour または ScriptableObject クラスの定義が含まれている場合、そのファイル内で複数の名前空間を使用することはできません。
Unity はコンソールに以下の警告を表示します。
Class MyClass can not exist in multiple namespaces in the same file, even if one is excluded with preprocessor directives. Please move these to separate files if this is the case.
MonoBehaviour を 1 つの名前空間で定義するファイルがあり、同じファイル内 で他のクラスが別の名前空間で定義されている場合、Unity は MonoBehaviour クラスを認識しないため、ゲームオブジェクトに使用できません。この制限は、インポートとコンパイルのスピードを向上するために Unity 2020.1で導入されました。そのため、この制限が導入される前に作成された一部の古いアセットストアパッケージが、結果として正しく機能しない場合があります。この問題を修正するには、各名前空間のクラスのコードを別のファイルに分けてください。