在我的统一游戏中将类暴露给同一游戏在运行时加载的DLL?

时间:2017-02-26 08:27:52

标签: c# unity3d dll .net-assembly

我想为Unity 5游戏公开DLL插件的一些对象和类。

稍后在运行时加载插件(DLL / .net程序集)。但是这些DLL需要访问主游戏已经创建的类和对象。

我使用Assembly.LoadFrom()方法加载插件DLL:Use assembly class without the assembly object

由于C#中似乎没有像C ++中那样的头文件,我如何将游戏程序的(.exe)类暴露给插件?

1 个答案:

答案 0 :(得分:1)

引用UnityEngine.dll和Assembly-CSharp.dll

每当Unity编辑器编译C#代码时,它通常会生成一个DLL(例如,如果您使用UnityScript,它会生成更多) - 该DLL称为Assembly-CSharp.dll,它存储在编辑器中项目文件的Library/ScriptAssemblies文件夹。

就像任何其他DLL一样,您需要引用它。由于它使用Unity API,您还需要引用UnityEngine.dll,例如,c:/Program Files/Unity/Editor/Data/PlaybackEngines/androidplayer/Managed/UnityEngine.dll

对于大多数平台,UnityEngine.dll是相同的(即上面使用的是编译成Android版本的平台),所以你使用哪一个并不重要,但是, > 将用于目标平台。

平台不适用于

作为旁注,请记住,DLL加载并不适用于各种平台 - iOS和WebGL是众所周知的示例(因为它们根本不运行.NET IL)。 / p>

构建完成后

您需要确保在构建完成后引用正确的DLL。例如,使用Windows独立版,您可以在构建的*-Data文件夹中轻松找到它。在Android上,它也可以从APK中提取。

摘要

通常,在构建游戏时,您需要重新编译DLL(引用最新的Assembly-CSharp.dll)。

作为旁注,您还可以将整个代码库预编译为DLL并在项目中使用它,但请记住,这会中断#preprocessor directives,因此您必须在交换平台时重建它。但是,至少您可以完全控制DLL重建的时间(因此,当您的引用需要时)。