原文地址:http://jacksondunstan.com/articles/3052?utm_source=tuicool
正文:
本文意在指导你在Unity中创建、使用和调试一个.NET dll。你可以模块化你的代码,把它们组织成库,这样开发者只要导入一个单独的文件就可以使用你的库。从代码设计的角度上讲,这在组织你的纯代码时尤其有用,比如你可以把mono形式的结构拆成可复用的组件。
首先,我们来谈谈啥是.NET dll?简单的讲,它是一个包含了一个或多个编译好的.NET脚本的文件。一般是C#,也可能是其他.NET语言,比如F#或者IronPython。实际上,当你把脚本直接添加到Unity项目里时,它会自动编译到一个Dll里,保存在MyProject/Library/ScriptAssemblies/Assembly-CSharp.dll。
如何创建你自己的dll呢?Unity并没有提供构建自定义dll的方法,所以你需要使用其他工具,比如MonoDevelop,Xamarin Studio或者Microsoft Visual Studio。我们将会讨论以上每一种工具该怎么做,因为它们在开发中都很常见。
MonoDevelop(Unity 5.0.2f1自带)
- File > New > Solution
- C# > Library
- 选择一个项目名和路径 > OK
- Project > ProjectName Options
- Build > General > Target framework > Mono / .NET 2.0
- Project > Edit References > .NET Assembly
- 导航到 /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
- OK
- 把你的代码添加到项目
- Build > Build All
- Dll放在项目目录/bin//Debug/ProjectName.dll
Xamarin Studio (5.9.1 build 3)(没用过,不敢乱翻译)
- File > New > Solution
- Other > .NET > Library > Next
- Choose a project name and directory > Create
- Project > ProjectName Options
- Build > General > Target framework > Mono / .NET 2.0
- Project > Edit References > .NET Assembly > Browse…
- Navigate to /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
- Open > OK
- Add your code to the project
- Build > Build All
- The DLL is placed in ProjectDirectory/bin/Debug/ProjectName.dll
Microsoft Visual Studio (2013, version 12.0.31101.00 Update 4)
- 文件 > 新建 > 项目
- 最上面的下拉框 > .NET Framework 2.0
- 模板> Visual C# > 类库
- 输入项目名和路径 > 确定
- 项目>添加引用 > 浏览 > 浏览按钮
- 选择C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
- 添加 > 确定
- 把你自己的代码写到项目里
- 生成 > 生成解决方案
现在你会获得一个dll文件,路径为项目目录/bin/Debug/项目名.dll,把这个文件拷贝到你的Unity项目的Assets目录下,或者Assets下的任何目录中,你的Unity项目就可以使用你的类库了。
这么做会有一个问题,当你的dll里的代码出了错,调用堆栈里的信息很少,没有你把源码放到项目里那样多。尤其是这样做没有文件名和行号,这样调试起来会变得很困难。
幸运的是,这个问题有解决方案。如果你使用MonoDevelop和Xamarin Studio,生成dll的时候还会在同目录下生成一个dll.mdb文件。把这个文件拷贝到Unity项目里,和你的dll文件同目录,Unity就可以拿到你的dll的调试信息,包括文件名和行号。
如果你用Microsoft Visual Studio创建dll,那么你得做额外的一步。Visual Studio会创建一个pdb文件来代替mdb文件,但是Unity不知道怎么用pdb文件。因此Unity提供了一个命令行工具,把pdb文件转换成mdb文件。运行方法如下:
(译注:其实我试了试把pdb文件和dll文件一起拷贝到Unity项目里,Unity会自动生成mdb文件,不需要手动执行命令行工具,我的Unity版本是4.6.4f1)
最后,在Unity中使用dll也有一些缺点,首先你的dll如果派发了事件,会发生一些问题,我们在这篇文章中有讨论。
另一个问题是,当dll中的代码出错了,你想简单的在Unity的控制台面板里双击错误信息,跳到指定的位置,这是不行的。你得记下来出错的那一行,打开你构建dll的IDE,找到这一行,修复错误,重新生成dll,重新导入dll到Unity里,这个过程太繁琐了……当然你也可以通过IDE的自动化操作来完成这个步骤。
现在你知道在Unity里如何创建、使用和调试.NET dll了吗?(后面的话大概都是客套话,大意是如果你准备用dll的话,可以在评论里和他分享)