Unity ではスクリプトをアセンブリに整理するために Assembly Definition と Assembly Reference という 2 つの特別なアセットタイプを使用します。
アセンブリとは C# のコードライブラリで、スクリプトによって定義されたコンパイル済みのクラスや構造体を含み、他のアセンブリへの参照も定義します。C# のアセンブリの詳細は、.NET のアセンブリ を参照してください。
Unity はデフォルトで、ほとんどすべてのゲームスクリプトを Assembly-CSharp.dll と呼ばれる事前定義されたアセンブリにコンパイルします。また、いくつかの より小さく用途に特化した定義済みアセンブリ も作成します。
この方法は小規模なプロジェクトには適していますが、プロジェクトにさらに多くのコードを追加すると、いくつかの欠点があります。
アセンブリを定義することで、コードを整理してモジュール性や再利用性を高めることができます。定義したアセンブリ内のスクリプトはデフォルトのアセンブリには追加されず、他のカスタムアセンブリのスクリプトへのアクセスのみを行います。
上の図は、プロジェクトのコードを複数のアセンブリに分割する方法を示しています。Main は Stuff を参照しており、その逆の参照はないため、Main のコードを変更しても Stuff のコードには影響しません。同様に、Library は他のアセンブリに依存していないので、Library のコードは別のプロジェクトでより簡単に再利用することができます。
プロジェクトのコードをアセンブリに整理するには、必要なアセンブリごとにフォルダーを作成し、各アセンブリに属するスクリプトを該当するフォルダーに移動します。その後、Assembly Definition アセットを作成 してアセンブリのプロパティを指定します。
Unity は、Assembly Definition アセットで定義された名前やその他の設定を使用し、Assembly Definition を含むフォルダーのすべてのスクリプトを 1 つのアセンブリにコンパイルします。サブフォルダーに独自の Assembly Definition または Assembly Reference アセットがない限り、アセンブリにはサブフォルダー内のスクリプトが加えられます。
既存のアセンブリに子ではないフォルダーのスクリプトを加えるには、子ではないフォルダーに Assembly Reference アセットを作成し、ターゲットのアセンブリを定義する Assembly Definition アセットを参照するように設定します。例えば、Editor フォルダーがどこにあるかにかかわらず、プロジェクト内のすべての Editor フォルダーのスクリプトを独自のアセンブリにまとめることができます。
Unity はアセンブリを、依存関係に基づいて決められた順序でコンパイルします。コンパイルの実行順序を指定することはできません。
スクリプトがどのアセンブリに属しているかを調べるには、Project ウィンドウでスクリプトファイルを選択し、Inspector ウィンドウでプロパティを確認します。アセンブリのファイル名と Assembly Definition は、Inspector の Assembly Information セクションに表示されます。
Unity では通常、Editor という名前のフォルダーにあるスクリプトは、どこにあっても定義済みの Assembly-CSharp-Editor アセンブリにコンパイルされます。ただし、Editor フォルダーの上のフォルダーに Assembly Definition アセットを作成すると、Unity はそれらの Editor スクリプトを定義済みの Editor アセンブリに加えることはなくなります。代わりに Assembly Definition で作成された新しいアセンブリに加えられますが、これは本来属す場所ではない可能性があります。Editor フォルダーを管理するには、各 Editor フォルダーに Assembly Definition または Assembly Reference アセットを作成して、それらのスクリプトを 1 つまたは複数の Editor アセンブリに配置します。詳細については、エディターコード用アセンブリの作成 を参照してください。