mcwind's blog

游戏开发 Unity3d catia二次开发,协同设计流程,多学科设计仿真
posts - 37, comments - 6, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

Unity3d 如何使用程序集(续)

Posted on 2011-04-29 15:16 mcwind 阅读(...) 评论(...) 编辑 收藏

在我早先的一篇文章《 Unity动态载入可执行代码的方法》中,介绍了采用反射技术动态载入并使用C#程序集的方法。不过这种方法感觉用起来很麻烦。有的时候我们或许并不需要动态载入程序集,而只想静态地使用它,就像使用.net自带的那些程序集一样,添加Reference,然后使用即可。

由于windows环境下的Unity编译脚本时,本质上还是生成.net程序集,而且其C#脚本编程其实就是.net C#语言编程。用Visual Studio 编写脚本工程是,我们可以直观地看到Unity工程所引用的程序集。

image

既然能引用.net框架的程序集,自然也能引用我们自己编写的程序集吧。经过几次试验,终于获得成功,步骤如下:

1、编写要引用的程序集

我们几乎可以编写任何用途的程序集,就像用C#开发.net类库一样。不过需要注意的是,如果要编写从Unity继承的类(比如从MonoBehaviour派生的组件等等),则不能使用namespace,目前的Unity不支持,用了编译报错。

虽然不能使用namespace,但我实际测试后发现若新项目中创建了与引用的程序集同名的类,Unity编译并不会报错,而且实际执行也很正常。由于没有介绍Unity内部如何编译的资料,我们还是尽量不要重名吧。

2、将程序集DLL放置到目标Unity工程的Asset目录下(这点很重要)

虽然可以用VisualStudio编写Unity代码,但实际上Unity生成游戏时还要自己再编译一遍。因此,在VS中的引用设置不能被Unity所使用。我曾经尝试过把要引用的程序集放在GAC中也不行。正确的做法是把dll放在Asset下,Unity能很好地识别它。

image

如果我们把组件编写在程序集中的话,展开程序集就能看到这些组件,甚至可以直接把它们拖动到GameObject中,很强大吧!

3、在目标工程中添加引用,编写代码

这个没什么好说的。

4、测试通过,成功!

由于可以方便地使用程序集,Unity给我们的项目开发提供了更大的灵活性,也更便于组织实施软件工程了。我现在正在做的一个独立游戏项目就采用了这种技术。做这个项目的过程中也不断学习了解了Unity的一些东西,大家可以在我的博客里找到更多内容。