Unity3D 里使用自己的 DLL
ABSTRACT
2014 年博客教程。演示用 Visual Studio 类库项目编译自定义 DLL 放进 Unity 工程调用的完整流程,包括引用 UnityEngine.dll/UnityEditor.dll 以在 DLL 内调用引擎 API、.NET 版本兼容性坑,以及「把全部脚本编译成 DLL 防源码泄露」的用法。
核心要点
- 基本流程:VS 新建类库项目 → 写 public 类与方法 → 生成 DLL → 拖进 Unity 的 Assets 任意位置(不强制 Plugins 目录)→ C# 脚本 using 对应命名空间后调用。
- 命名空间可有可无:不用命名空间则调用时无需 using;Unity 默认脚本本身无命名空间,直接编译成 DLL 也能用,但不建议。
- 在 DLL 里调用引擎 API:引用 Unity 安装目录
Editor/Data/Managed下的 UnityEngine.dll 与 UnityEditor.dll,即可 using UnityEngine 写创建 GameObject 等逻辑。 - 兼容性坑:编辑器里能跑不代表能出包;.NET 4.0+ 编译的 DLL 在当时 Unity 里无法通过编译,需用 .NET 2.0/3.0(部分现成 DLL 还要求完整 .NET 2.0 Profile)。
- 进阶用途:把 Unity 工程全部脚本剪进类库项目编译成 DLL 放回工程,他人即无法直接阅读/编辑源码——早期的代码保护手段。
- 该方法同样用于沉淀与游戏无关的通用库,跨项目复用。
关键实体与概念
类库项目、DLL、UnityEngine.dll、UnityEditor.dll、命名空间、.NET Framework 版本、Api Compatibility Level、代码保护
关联概念
来源回溯
- 原始文件:
raw/gamedev/unity3d里使用自己的dll.md(evernote/FW-游戏3研发技术 导入)
时效性评估
- 仍有效:自定义托管 DLL 放 Assets 即用、引用引擎程序集写库的做法至今成立;「通用逻辑抽 DLL 跨项目复用」仍是常见工程实践。
- 已过时:.NET 2.0/3.0 限制属于 Unity 5 前的 Mono 时代,现代 Unity 用 .NET Standard 2.0/2.1;「DLL 防源码泄露」意义大减——IL2CPP 直接把 C# 转 C++ 编译,反编译门槛远高于混淆 DLL(见 Unity 热更新方案演进 的现代运行时部分)。