コルーチン
名前空間

特殊フォルダーとスクリプトコンパイル順

原則として、プロジェクト内のフォルダーには自由に名前を付けることができますが、一部、Unity に命令として読み取られる特殊なフォルダー名が存在します。これらのフォルダー名は、そのフォルダー内のコンテンツが特定の方法で扱われるよう指定する機能を持っています。そういったフォルダーの中にはスクリプトのコンパイル順に影響を与えるものがあります。スクリプトのコンパイリングには四つの異なるフェーズ(段階)があり、特定のスクリプトがどのフェーズでコンパイルされるかは、その親フォルダーによって決まります。

これは、スクリプトが、その他のスクリプトによって定義されるクラスを参照している場合に重要になってきます。基本的には、現在のフェーズの 後に来る フェーズにおいてコンパイルされるものを参照することはできないルールになっています。現在のフェーズやそれ以前のフェーズにおいてコンパイルされるものは完全に使用可能になります。

ある言語で書かれたスクリプトが別の言語で定義されたクラスを参照しなければならない場合(例えば UnityScript ファイルが C# スクリプトで定義されたクラスの変数を宣言している場合など)は、別の状況が起こってきます。この場合は、参照されているクラスは、それより早いフェーズで コンパイルされている必要があります。

コンパイリングの各フェーズは下記のとおりです。

フェーズ 1: Standard AssetsPro Standard AssetsPlugins フォルダーに入ったランタイムスクリプト。

フェーズ 2: Standard AssetsPro Standard AssetsPlugins フォルダーにある Editor フォルダーのエディタースクリプト

フェーズ 3: Editor フォルダーに入ったもの以外の、その他すべてのスクリプト。

フェーズ 4: 残りのすべてのスクリプト(つまり、Editor フォルダー内のスクリプト)。

また、Assets フォルダーの最上レベルにある WebPlayerTemplates フォルダーに入っているスクリプトはコンパイルされません。この挙動は、サブフォルダー内で機能するその他の特殊フォルダー名とは少し異なります。(例えば、Scripts/Editor はエディタースクリプトのフォルダーとして機能しますが Scripts/WebPlayerTemplates はコンパイルされます。)

よくある例としては、UnityScript ファイルが C# で定義されたクラスを参照する必要がある場合。これは C# ファイルを Plugins フォルダー内に配置し、UnityScript ファイルを非特殊フォルダー内に配置すれば可能です。これを行わなかった場合は、C# クラスが見つからないというエラーが出ます。

注: Standard Assets は Assets ルートフォルダー内でのみ機能します。

コルーチン
名前空間