ドキュメント

Unity Engine

Unity Engine

命名スクリプト

コンパイラーがクラスを識別するヘルプとなるスクリプトに名前を付けます。名前空間を使用してスクリプトを論理的に整理し、クラス名の競合を回避します。
読み終わるまでの所要時間 9 分最終更新 3日前

スクリプトファイルや、ファイル内で宣言されたクラスの名前は慎重に選択することが重要です。適切なファイル名を使用し、名前空間でクラスを整理すると、コンパイラーがクラスをエラーなしで識別できるようになります。

スクリプトファイル名

スクリプトの作成時に入力したファイル名は、その中で定義されたクラス名にも使用されます。スクリプトのファイル名は、その中で定義されたクラス名と一致することを推奨します。
Unity ビルトインの型
MonoBehaviour
と型
ScriptableObject
から派生したスクリプトでは、ファイル名が一致しなくても、スクリプトで定義されたクラス型を解決できますが、いくつかの制限があります。
  • スクリプトで複数のクラスが定義されている場合、Unity はファイルと同じ名前のクラスを選択します。
  • C#
    partial
    キーワードを使用して、複数のファイルにわたって単一の MonoBehaviour 派生クラスを定義する場合、
    partial
    クラスと同じ名前のファイルのみをコンポーネントとして使用できます。
注
クラス名を特定のファイルに明確に一致させられない場合、Unity は注意を表示します。

クラス名と名前空間

同じ名前のクラスがプロジェクトの異なる部分で宣言されている場合、名前の競合が発生します。名前の競合が発生する可能性は、プロジェクトのスケールとコントリビューターの数に応じて増加します。例えば開発者開発者イヤーコンプレイヤーード、別の開発コントロール敵キコードター用の同等のコードを作成するとします。両方の開発者がメインクラス
Controller
のコールを選択した場合、コンパイラーはコード内の
Controller
のどのクラス使用を参照しているかを判断できません。
クラス名の競合を避けるために、C# プログラミングではクラスを名前空間の下に整理することをお勧めします。名前空間はクラスのコレクションであり、クラス名の前に付けられた名前空間は、そのクラスを完全に明確に参照する方法を提供します。詳細については、名前空間に関する Microsoft のドキュメントを参照してください。
次の例では、クラス
Controller1
と
Controller2
は
Enemy
という名前空間のメンバーです。
名前空間 Enemy { public class Controller1 :MonoBehaviour { } public class Controller2 :MonoBehaviour { }}
これらのクラスは、完全な名前を使用してコード内で明確にリファレンスできます。完全な名前は名前空間とクラス名、この場合はそれぞれ
Enemy.Controller1
と
Enemy.Controller2
です。名前空間宣言を既存のクラス宣言の周囲に追加できるため、すべてのクラスの名前を個別に変更する必要はありません。名前空間宣言は、たとえそれらのクラスが異なるソースファイルにある場合でも、発生した場所ならどこでも追加できます。
ファイルの先頭に
using
ディレクティブを追加することで、名前空間プレフィックスを繰り返し入力する必要がなくなります。
using Enemy;
これにより、コンパイラーは、このファイル内の
Controller1
および
Controller2
への参照をそれぞれ
Enemy.Controller1
および
Enemy.Controller2
として解決します。スクリプトが異なる名前空間の同じ名前のクラス(例えば、
Player
と呼ばれるクラス)も参照する必要がある場合は、名前空間プレフィックスを指定する必要があります。クラス名が競合する 2 つの名前空間を同じファイル内の
using
指示子でインポートすると、コンパイラーはエラーを報告します。

複数の名前空間の制限

Unity には、名前空間、MonoBehaviour または ScriptableObject クラスに関連する特定の制限があります。ファイルに MonoBehaviour または ScriptableObject クラスの定義が含まれている場合、そのファイル内で複数の名前空間を使用することはできません。
Unity はコンソールで以下の注意を表示します。
クラス MyClass は、プリプロセッサー指令で除外されている名前空間であっても、同じファイル内の複数の名前空間に存在できません。その場合は、これらを別のファイルに移動してください。
MonoBehaviour を定義するファイルが 1 つの名前空間にあり、他のクラスが同じファイル内の異なる名前空間にある場合、Unity は MonoBehaviour クラスを認識せず、GameObjects では使用できません。この制限は、インポートとコンパイルのスピードを向上させるためにUnity 2020.1で導入されました。そのため、この制限が導入される前に作成された一部の古いアセットストア パッケージが、結果として正しく機能しない場合があります。この問題を修正するには、各名前空間のクラスのコードを別のファイルに分離します。

追加リソース