我想为Unity 5游戏公开DLL插件的一些对象和类。
稍后在运行时加载插件(DLL / .net程序集)。但是这些DLL需要访问主游戏已经创建的类和对象。
我使用Assembly.LoadFrom()方法加载插件DLL:Use assembly class without the assembly object
由于C#中似乎没有像C ++中那样的头文件,我如何将游戏程序的(.exe)类暴露给插件?
答案 0 :(得分:1)
每当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重建的时间(因此,当您的引用需要时)。