将我的 unity 游戏中的 class 暴露给同一游戏在运行时加载的 DLL?
Expose a class in my unity game to a DLL that is loaded at runtime by the same game?
我想公开一些对象和 类 用于 Unity 5 游戏的 DLL 插件。
插件(DLL/.net 程序集)稍后在运行时加载。但是这些 DLL 需要访问 类 和主游戏已经创建的对象。
我使用 Assembly.LoadFrom() 方法加载插件 DLL:Use assembly class without the assembly object
由于C#中似乎没有C++中的任何头文件,我如何将游戏程序的(.exe)类暴露给插件?
参考文献 UnityEngine.dll 和您的程序集-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完全没有。
构建完成后
您需要确保在构建完成后引用了正确的 DLL。例如,对于独立的 Windows,您可以轻松地在内置的 *-Data
文件夹中再次找到它。在 android 上,它也可以从 APK 中提取。
总结
一般来说,当您构建游戏时,您需要重新编译您的 DLL(参考最新的 Assembly-CSharp.dll
)。
附带说明一下,您还可以将整个代码库预编译为 DLL 并在您的项目中使用它,但请记住,这会中断 #preprocessor directives
因此您必须在交换平台时重建它。但是,至少您可以完全控制该 DLL 何时重建(因此,当您的引用需要重建时)。
我想公开一些对象和 类 用于 Unity 5 游戏的 DLL 插件。
插件(DLL/.net 程序集)稍后在运行时加载。但是这些 DLL 需要访问 类 和主游戏已经创建的对象。
我使用 Assembly.LoadFrom() 方法加载插件 DLL:Use assembly class without the assembly object
由于C#中似乎没有C++中的任何头文件,我如何将游戏程序的(.exe)类暴露给插件?
参考文献 UnityEngine.dll 和您的程序集-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完全没有。
构建完成后
您需要确保在构建完成后引用了正确的 DLL。例如,对于独立的 Windows,您可以轻松地在内置的 *-Data
文件夹中再次找到它。在 android 上,它也可以从 APK 中提取。
总结
一般来说,当您构建游戏时,您需要重新编译您的 DLL(参考最新的 Assembly-CSharp.dll
)。
附带说明一下,您还可以将整个代码库预编译为 DLL 并在您的项目中使用它,但请记住,这会中断 #preprocessor directives
因此您必须在交换平台时重建它。但是,至少您可以完全控制该 DLL 何时重建(因此,当您的引用需要重建时)。