在Unity3D里使用DLL

开始第一篇的内容:

首先,我们需要新建一个类库项目,可以使用Visual Studio或者Monodevelop来做。我这里是使用vs2012来创建:

选择好项目类型、写好项目名称。

新生成的项目里面默认有一个Class1类

可以通过在解决方案资源管理器里面进行重命名改成自己想要的类名,比如我这里改成了Math3D

然后写一个简单的静态方法在里面。这里我写了个最简单的加法(Add)。也可以不写静态方法,写出普通的public方法,用的时候new对象出来调用该方法也可以。这和正常的C#编程没区别。

写好之后,在资源管理器里面选择“生成”,那么在项目的bin/debug 里面就会看到dll文件,比如我这个额项目就是AzhaoDll.dll

接下来在Unity3D里面创建你需要的项目,把刚才的dll文件随便放到项目的Assets文件夹里面。关于这个dll文件的存放位置,网上有些人说是必须放在插件文件夹里面,其实是不需要的,放在任意位置它都能被识别出来。当然,按照良好的项目路径习惯,我们建立一个专门放插件的文件夹来存放dll文件,也是合理的。

然后在Unity3D里面创建一个C#脚本,写一行简单的代码来调用我们刚才写的Math3D.Add方法。

这时会发现Math3D类不能识别,我们using AzhaoDll命名空间

然后在Unity3D里把脚本挂到摄像机上,运行,可以看到打印出正确的结果了,这就证明了dll已经被成功调用了。

回顾刚才我们做的一些小细节,在类库项目的Math3D类里面。我们默认的使用了AzhaoDll命名空间。那么假如我们不使用命名空间,或者使用其他的命名空间行不行?答案是可以的,命名空间可以任意的更改,如果不用命名空间,那么在调用的时候就不需要using,如果使用了其他命名空间,对应的using其命名空间就行了。

以下试试把命名空间删掉:

那么在Unity3D里面调用就直接可以用了:

运行的结果也是正常的:

当然,不太建议不使用命名空间,这样做一个说明,是因为unity3D本身创建的脚本默认没有使用命名空间,只是想说明如果不想麻烦,直接把Unity3D没有命名空间的脚本直接拿来编译也是可以的。

再次回顾细节,刚才我们使用的是原生的C#,假如我们需要在类库项目写调用Unity3D本身功能的方法怎样办呢?

在Unity3D的安装目录Editor\Data\Managed里面,找到UnityEditor.dll和UnityEngine.dll两个文件。

然后在类库项目里面添加引用,把这两个dll添加进来

这时候,我们就可以在类库项目里面using UnityEngine来使用Unity3D的方法了,比如我们这里简单写了个CreateGameObject方法,生成一个名字为“CreateByDll”的gameobject。

生成dll,放回Unity3D项目里,我们就可以调用这个方法:

运行,看到这个叫做“CreateByDll”的物体生成出来了。

通过以上的说明,我们会发现其实生成自己的dll在Unity3D里面用是很简单的事情。我们还可以添加其他自己写好的类进类库项目,然后生成dll来使用。

最后说一下注意事项了。

刚才生成的dll在Unity3D编辑器里面基本上都是能用的,但不一定能通过编译。有可能在编译成exe或者apk等时会报错。

需要注意的是,类库项目使用的.Net Framework版本。我自己的尝试是,使用.Net 4.0以上版本发布的dll,在Unity3D里面会编译不通过。所以我们可以用2.0或者3.0之类的版本来发布。

还有一些情况是某些现成的dll动态库是使用完整的.Net2.0来发布的,所以我们在编译的时候有可能需要选择完整的.Net 2.0来发布。

到了这一步,我们就可以把Unity3D的整个代码文件夹里面所有的脚本剪切到类库项目里面生成dll,然后放回Unity3D项目里面。这样别人就不能直接的编辑我们项目里面的代码了。

不过dll本身是不安全的,别人可以很容易看到里面的内容。

时间: 2024-11-05 00:41:55

在Unity3D里使用DLL的相关文章

Unity3D项目程序加密1——在Unity3D里使用自己的dll

Unity3D做出来的项目是非常容易被反编译的,被反编译后你的所有资源和代码都将会毫无遮掩的呈现出来.由于.net本身没什么加密的措施,所以我们一般都是使用混淆代码的方式来对程序进行一定的加密.接下来2篇博客,简单的讲一下我自己在Unity3D的程序加密做法.首先第一篇,我会简单的说明一下怎样在Unity3D里面使用dll动态链接库,然后第二篇会说明怎样对dll进行混淆. 开始第一篇的内容: 更多内容请访问[狗刨学习网]http://unity.gopedu.com 首先,我们需要新建一个类库项

Unity3d 调用 C++ DLL之 DLL回调Unity3d (C++ DLL回调 C#函数)

上篇   Unity3d 调用C++ DLL (Win平台)  介绍了简单的 Unity3d 调用 C++ DLL的方法,但是这样是不够的,这里再讲下通过函数指针让 C++ DLL中回调 Unity3d 的方式. 转自http://blog.csdn.net/huutu 星环游戏 http://www.thisisgame.com.cn 创建DLL 以及在 Unity3d 中调用 DLL 中函数在上篇中介绍了. 首先,在C#中是没有函数指针的,我们使用 Delegate . 转自http://b

Unity3D里的各种坐标系

一.Unity3D中有哪些坐标系? ??坐标系这个概念最早是由法国数学家笛卡尔提出的,并由此创造了用代数方法来研究几何图形的数学分支--解析几何.解析几何的基本思想是将几何图形抽象成点的运动轨迹,从而点可以作为组成图形的基本元素,而描述一个点的位置首先需要建立合适的坐标系.所以,首先我们来了解下Unity3D中都有哪些坐标系吧!Unity3D中的坐标系目前可以分为以下四类:世界坐标.屏幕坐标.视图坐标和GUI坐标.下面我们来对这5类坐标进行详细说明: 世界坐标 世界坐标按照笛卡尔坐标系定义出来的

在VS工程里编译dll / 调用外部dll

这个问题昨天请教了一下大神,记录之. 1.编译dll 创建一个新项目,Win32控制台应用程序,这里选DLL.这样的话编译过后会自动在Debug目录下生成dll文件. 这样,会生成如下的目录: 其中头文件里的第2.3个是自动生成的,源文件里的1.3个是自动生成的. 我们只需要改动: 在DllWithClass.h里写: extern "C" _declspec(dllexport)//导出 float FunctionMultiply(float x, float y); 这里第一行是

Unity3d Android APK Dll Encryption

该插件用来对unity3d的安卓平台apk进行里的Assembly-CSharp.dll进行加密.我们吃过苦,特别是现代手游把一些数据计算放在client计算,一些小白玩家根据教程就可以轻松修改dll代码,进行作弊. This plugin is used to encrypt Assembly-CSharp.dll which is contained in  unity3d’s android  apk package. Many mobile game’s  computation is

Unity3d 调用C++ DLL (Win平台)

Unity3d提供了功能可以让我们自己用各种语言编写 Plugin 来在Unity中使用,官方有简单的文档介绍 http://docs.unity3d.com/Manual/30_search.html?q=dllimport 之前的博文介绍了在 Android 平台使用C++ Plugin. http://blog.csdn.net/huutu/article/details/43602659 本文在Win平台使用C++ DLL. 转自http://blog.csdn.net/huutu ht

(转)使用.NET Reflector 查看Unity引擎里面的DLL文件

当你查看unity里面API的时候,是不是有时候追踪了一两步就碰到DLL文件走不下去了呢?很是不爽吧. 这种问题我也是经常碰到.这是人家商业引擎不想让你看到底层代码啦,所以着急不得. 不过,今天我终于有了办法解决这个问题.那就是使用反编译DLL文件!简单,粗暴.不过为了了解底层的结构,这也不失为一种办法哦. OK!啰嗦了半天,让我带你进入今天的主题吧. 1.首先下载.NET Reflector 8.3.3.115.(如果链接失效,请告诉我哦.里面还有一个插件可以导出cs文件) 2.双击安装Ref

unity3d里的XML读写示例

关于U3D里面XML读写办法,谢谢刘老师的指导(刘国栋) 代码: /**Project name:*    *Author:*    *Version:*    *Description:*    */ using UnityEngine;using System.Collections;using System.Xml;using System.Xml.Serialization;using System.IO;using System.Text;using System.Security.C

使用.NET Reflector 查看Unity引擎里面的DLL文件

转载标注来源哦!原地址在这里!在这里! 当你查看unity里面API的时候,是不是有时候追踪了一两步就碰到DLL文件走不下去了呢?很是不爽吧. 这种问题我也是经常碰到.这是人家商业引擎不想让你看到底层代码啦,所以着急不得. 不过,今天我终于有了办法解决这个问题.那就是使用反编译DLL文件!简单,粗暴.不过为了了解底层的结构,这也不失为一种办法哦. OK!啰嗦了半天,让我带你进入今天的主题吧. 1.首先下载.NET Reflector 8.3.3.115.(如果链接失效,请告诉我哦.里面还有一个插