本文目录
一、如何编写Unity原生插件
unity可以导入其它语言编写(和编译)的代码,称为原生插件(Native Plugins)。今天为大家分享如何创建Unity原生插件。
Unity中的托管和非托管插件
连接不同的代码并非Unity首创的。若你是Windows用户,可能听说过DLL,动态链接库的缩写。与单机应用类似,它们是编译过的软件。不同的是,它们不能直接执行,因为它们是被专门设计为供其它应用使用的。
Unity支持两种插件:托管(Managed)和非托管(Unmanaged)的。前者是用C#编写并编译为通用中间语言(CIL)的字节码语言。托管插件与C#脚本一样强大,且带有编译过的源码。非托管(或原生)插件,是使用其它语言编写的软件,典型是C++。它们在功能上几乎没什么限制,而且因为都被编译为机器码所以通常比传统的脚本要快。
第一步:新建C++项目
本例中,我用的是Visual Studio 2015;你可以选择任意IDE编译C++代码。首先创建一个非托管C++库也就是新建项目。打开Visual Studio,依次点击File| New Project,选择Visual C++| Win32 Console Application。
在给项目命名后(本例中为TestDLL),确保将应用类型(Application type)设为DLL,附加选项(Additional options)下选择空项目(Empty project)。
至此,Visual C++解决方案已经准备好,我们可以开始编写代码了。
第二步:编写库
C++代码通常分为两个文件。函数定义(头文件)和函数实现(实现文件)。实现文件为.cpp文件,放在ResourceFiles目录下,头文件为同名.h放在HeaderFiles目录下。本例中我们创建一个头文件和一个实现文件;实现文件将包含所有要保存到DLL的功能。可以在相应的文件夹上单击右键新建文件,然后依次选择Add(添加)>NewItem(新选项)。
实现部分:TestDLLSort.cpp
开始编码,实现给数组排序。
[AppleScript]纯文本查看复制代码?
#include"TestDLLSort.h"#include extern"C"{ void TestSort(int a[], int length){ std::sort(a, a+length);}}
5~7行使用了algorithm库里的数组排序函数std:sort。如果熟悉C++11就会知道。只增加了extern"C"块,必须用它将TestSort的引用导出到DLL。
头文件:TestDLLSort.h
实现文件中的定义必须与头文件保持完全一致。它必须包含TestSort原型也就是函数签名。
[AppleScript]纯文本查看复制代码?
123456#define TESTDLLSORT_API __declspec(dllexport) extern"C"{ TESTDLLSORT_API void TestSort(int a[], int length);}
其余部分是创建DLL必须的代码。TESTDLLSORT_API可以是任意名字,用来标记所有的导出函数。在更复杂软件中,TESTDLLSORT_API应该根据需要绑定到 __declspec(dllimport)上。但是在本例中,没有必要。
第三步:编译
最后一步是在Visual Studio中编译我们的DLL。请确保发布平台设置正确(32位或64位)。然后依次选择Build>Build Solution。
在屏幕下方的控制台上会看到输出日志如下:
[AppleScript]纯文本查看复制代码?
1>------ Rebuild All started: Project: TestDLL, Configuration: Release x64------ 1> TestDLLSort.cpp 1> Creating library C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.lib and object C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.exp 1> Generating code 1> All 30 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. 1> Finished generating code 1> TestDLL.vcxproj-> C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.dll========== Rebuild All: 1 succeeded, 0 failed, 0 skipped==========
若发现有警告如:warning C4273: inconsistent dlllinkage,这可能表示编译器不确定使用__declspec(dllimport)还是 __declspec(dllexport)。若想为Unity创建原生插件,就使用后者。
第四步:导入Unity
根据上面的编译日志,在工程文件中找到编译好的DLL。本例中,它在文件夹x64\Release中。我们只要这个文件。在Unity中使用它的第一步是把它拷贝到Plugins文件夹下。
原生插件通常与操作系统或平台相关。可以查看右侧的检视面板确保每个DLL被包含到正确的平台。
第五步:在Unity中使用
导入后,使用DLL就相对简单了。第一步是使用DLLImport定义入口(EntryPoint)。你需要指定DLL名和函数名。会提供别名让它可以像其它函数一样被调用。
[AppleScript]纯文本查看复制代码?
using UnityEngine; using System.Runtime.InteropServices; public class TestDLL: MonoBehaviour{// The imported function [DllImport("TestDLL", EntryPoint="TestSort")] public static extern void TestSort(int [] a, int length); public int[] a; void Start(){ TestSort(a, a.Length);}}
入口的字符串必须与C++库中的名字一样。但你可以使用如下方法调用函数;以后C#就这样调用它。
你应该注意到Unity在编辑器中不能检测非托管DLL;必须运行游戏来检测是否成功连接。对于托管的DLL,则可以静态检测。
二、Unity3D这款游戏引擎软件的源码是开源的吗
Unity3D是不开源的。
相关介绍:
Unity类似于Director、Blender game engine、Virtools或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。
开放源码软件通常是有copyright的,它的许可证可能包含这样一些限制:蓄意的保护它的开放源码状态,著者身份的公告,或者开发的控制。“开放源码”正在被公众利益软件组织注册为认证标记,这也是创立正式的开放源码定义的一种手段。
扩展资料
开放源码软件主要被散布在全世界的编程者队伍所开发,但是同时一些大学,政府机构承包商,协会和商业公司也开发它。源代码开放是信息技术发展引发网络革命所带来的面向未来以开放创新、共同创新为特点的、以人为本的创新2.0模式在软件行业的典型体现和生动注解。
共享软件。允许他人自由拷贝并收取合理注册费用。使用者可在软件规定的试用期限内免费试用,再决定注册购买与否。大部分共享版软件都有功能和时间限制,试用期通常分为7天、21天、30天不等。而有的共享软件还限制用户只能安装一次,若删除后重新安装将会失效。像Winzip、ACDSee等软件就是共享软件。
三、Unity游戏资源提取
注意:使用最新版本,否则可能会导出失败
(1)将APK的文件后缀修改为zip,直接解压缩,得到跟APK同名的文件夹
(2)在解压缩生成的文件夹中找到assets/bin/Data文件夹,使用AssetStudio打开
(3)直接导出游戏资源
(1)将IPA的文件后缀修改为zip,直接解压缩,得到Payload文件夹
(2)在Payload文件夹找到跟IPA同名的.app文件,右击此文件,点击“显示包内容”,找到Data文件夹,拷贝到其他目录,使用AssetStudio打开
(3)直接导出游戏资源
(1)将APK的文件后缀修改为zip,直接解压缩,得到跟APK同名的文件夹
(2)在解压缩生成的文件夹中找到assets/bin/Data/Managed/Assembly-CSharp.dll文件
(3)使用Visual Studio打开(将dll直接拖到VS中),即可查看源码
四、unity3d开发的游戏有哪些
unity3d开发的游戏不多!尤其是中文游戏,开发的多数是网络游戏以及第一人称游戏,pc上的大型游戏好像只有新仙剑奇侠传OL其他的网游都是国外的多数是韩国和欧美,unity3d开发的游戏多数都是用在iphone以及android等手机端游戏!比较出名的是武士系列游戏!涂鸦保龄球,城堡勇士,3D方块贴图,以及很多僵尸游戏。境之边缘,荣誉勋章空降兵,生化奇兵,虚拟竞技场都是用UDK开发的,UDK是另外一种3D引擎不要混淆了!UDK比unity3d功能强大拓展性强而且比unity3d画面效果强很多但是要求配置也比unity3d高不少,但是不如unity3d效率高,用unity3d制作游戏更快。跨平台更好,而且很有针对性,启动菜单可以选择为android,IOS,pc,ps,psp,xbox等开发游戏,而且unity3d可以制作网页3d游戏以及导出flash功能!虽然unity3d没有中文支持但在国内unity3d比UDK使用更广泛!UDK有中文版的官方还出了中文字幕教程。