結論としては、通常、アプリケーションはモジュールに分割され、各モジュールは独自の個別のアセンブリに配置されます。 この場合のモジュールまたはライブラリは重要ではありません。アプリケーションを個別のアセンブリに分割する場合、落とし穴もありますが、原則として非常に簡単に行うことが重要です。 主な問題の1つは、Unityの無料版では私のアプローチが機能しないことです(ランタイムでのアセンブリのロードはサポートしていません)が、この場合、最後に説明するファイルシステムリンクに関する解決策があります。
なんで?
アプリケーションを個別のモジュール/ライブラリに分割する理由は何ですか? おそらく、多くの人はコードをライブラリにグループ化することのすばらしさを説明する必要はありませんが、Unityではそれらがなくても生きることができます。 なぜこれをしているのですか? 自分で作成したプロジェクトでも、さまざまなプロジェクトで同じライブラリを使用すると便利です。 まず第一に、自分で書いても。 各ライブラリーをリポジトリーに保持し、ライブラリーのプロジェクトの1つで間違いを見つけて修正した場合、他のプロジェクトからの単純なコミット、プッシュ、およびプールにより、修正はすべてのプロジェクトに反映されます。
プロジェクト組織
私は通常、gitリポジトリのサブモジュールとしてライブラリを使用します。 新しいプロジェクトを開始するとき、使用するライブラリのすべてのサブモジュールを空のリポジトリに追加するだけです。 のようなもの
git init git submodule add my_rep/systemex.git Libraries/SystemEx
Libraries
フォルダーに常に配置するすべてのライブラリ-とても便利です。 あなたが望むようにすることができます。 各ライブラリには、デフォルト設定のプロジェクトファイルが含まれています。 いくつかの場合を除いて、そこに実際に変更する必要はありません。 3.5に.net frameworkバージョンをインストールしない限り。 ただし、別のニュアンス-ライブラリ内のすべての参照で
Copy Local - False
を設定する必要があります。 これにより、ビルド後のほとんどすべての問題と奇妙な状況が保存されます。
次に、Unityでスタジオ用のプロジェクトファイルを作成します(Visual Studioを使用していますが、アプローチはmonodevelopで機能します)。 Unityは、
_.sln
、
_-csharp.sln
、
Assembly-CSharp.csproj
、
Assembly-CSharp-vs.csproj
ファイルのようなものを作成します。 彼女は常にこれらのファイルを再作成し、それらに触れる必要はありません。 必要なのは、
_.sln
を
_-bundle.sln
コピーして、引き続き作業することです。
次に、空のクラスライブラリに作成します。これは、従来、
Code
を呼び出してソリューションに追加します。 ここで、彼女はすでにすべてのライブラリを参照に追加し、
Copy Local - True
を設定する必要がありますが、これはデフォルトである必要があります。 このライブラリを使用して2番目に行うことは、
Output Path: ..\Assets\Assemblies\
に設定すること
Output Path: ..\Assets\Assemblies\
-通常、プロジェクトのルートでこのライブラリを作成し
..\Assets\
したがって、
..\Assets\
-Unityが動作する
Assets
フォルダとまったく同じになります。 それだけです。コードライブラリを作成し、Assets \ Assemblies \にファイルをアップロードします
Assembly-CSharp.csproj
はこれらのファイルを参照し、
Assembly-CSharp.csproj
への参照を追加します。 すべてが時計のように機能するはずです。 唯一の欠点は、ビルドを2回取得する必要があり、
Assembly-CSharp.csproj
プロジェクトからのコードのナビゲーションが機能しないことです。
このすべての後、私のソリューションは次のようになります。
Code
プロジェクトでは、プロジェクト間で操作できるゲームロジックを記述します。 しかし、彼はゲームからベジオリを見ないため、
SendMessage
介してのみベジオリと通信できます。
ニュアンス
*ライブラリでUnityEngine.dllを使用できます。参照に追加する必要がありますが、
Copy Local
オフにする必要があります。そうしないと、アセンブリに移動してUnityが不良になります。
*すべてのライブラリは、
Copy Local
をオフにして
Code
のみに残す必要があり
Code
。そうしないと、何か余分なものが引き付けられる可能性があります。 特に、エディターも拡張する場合。 一度、私は理由と解決策を見つけるまで、これでしばらく苦しみました。
*同じ方法でエディターを展開できますが、
Output Path: ..\Assets\Editor\Assemblies\
Code.Editor
をレイアウトする必要があります
Output Path: ..\Assets\Editor\Assemblies\
* Unityは、同じアセンブリが複数のフォルダーにあるかどうかを好みませんし、理解しません。
*このメカニズムは有料版でのみ機能します。 より正確には、彼と無料で作業できますが、そのようなプロジェクトの公開は機能しません。
自由にしたい場合
この場合、フォルダーのファイルシステムをライブラリコードとUnityプロジェクトのAssembliesフォルダーに手動でリンクする必要がある場所でのみ、gitとリポジトリの構造を使用することもできます。 そして、プロジェクトファイルでシャーマナイズする必要はありません。Unityはすべて自分で行います。 のようなもの
mklink /J .\Assets\Plugins\MathEx .\Libraries\MathEx\Assets\Plugins\MathEx
この場合、
.\Libraries\MathEx\Assets\Plugins\MathEx
.csファイルがあるフォルダー。
ありがとう、誰かが私のアドバイスを参考にしてくれることを願っています。 コードをきれいに保ちます。
upd: ZimMがコメントで書いたように、無料版でもすべてうまくいきます。 そのため、ファイルシステムリンクを使用したマジックは通常必要ありません。 彼に感謝します。
upd2:デバッグおよびログの通常の行番号が必要な場合は、UnityVSをインストールする必要があります。UnityVSは無料で、最も重要なことは、すべてのTarget Frameworkプロジェクトで.NET 3.5からUnity 3.5 .net Subset Base Class Libraries、またはその他のUnityに切り替えます3.5 .net