unity编程插件(unity插件怎么用)

http://www.itjxue.com  2023-03-18 01:11  来源:未知  点击次数: 

如何编写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位)。然后依次选择BuildBuild 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常用插件有哪些

1. NGUI,这个不用多说,上官网:

2. FingerGestures,顾名思义,这个是支持移动设备所有触摸事件的插件,包括点击,滑动,还有自定义手势等等,

3. EasyTouch,也是用于移动平台上的RPG类的游戏,这里有篇文章,简单介绍了一下该插件

4. ShareSDK,功能强大的分享插件,支持一键分享并且配置起来十分简单,目前绝大多数的社交软件都支持,并且他们官方的文档写得特别清楚而且如果注册用户的话,还会有技术支持,官方文档:

5. AndroidRemote,这个主要用于安卓平台和电脑联调,省去了每次测试都要重新打包的麻烦,

6. NGUI_HUD_Text,这个用于游戏里血条的变化

7. 2dToolKit,是一款2D开发组件,它具有很强的灵活性,可以让开发者在Unity中进行2D开发,

8. PlayerMaker,是一个可视化脚本工具,开发者可以使用它很快的完成游戏原型制作,能够大大的提高开发效率,让你的游戏更加完美,

9. PathologicalGames,用于绝大多数的曲线操作

10. FxMaker,侧重于unity里的粒子特效系统,这款插件提供了众多特效资源和效果预览,玩家可以随意组装效果并最终合成一个预设自己使用

11. Magical FX,魔法特效包

12. water.unitypackage,这是一款用于水的插件,性能还比较高,用于移动设备也没问题,弥补了专业版的unity水特效资源在移动设备卡机的不足

13. LitJson,看名字就知道,这是用于Json操作的一些API

14. icsharpcode-SharpZipLib,用于解压缩, ZipLib组件与.net自带的Copression比较,在压缩方面更胜一筹,经过BZip2压缩要小很多,而且这个功能更加强大。

15. unity-lzma,也是一款用于压缩和解压文件的库,它是一个开源的类库,有C、 C++、C#、JAVA的类库,Unity里面我们自然要使用C#的类库,

Unity插件之——Voxel Importer

? 最近在用magicavoxel建模,要导入Unity做绑骨,意外的发现了这个插件贼好用,写一个小的使用教程

首先导入插件。

创建一个空物体

挂载脚本?Voxel Skinned Animation Object

作用 :绑定体素骨骼,制作动画的前一步。

应用到动画对象。 它生成一个优化的网格。

脚本位置:?

Component/Voxel Importer/Voxel Skinned Animation Object

在voxel?file打开一个magicavoxel文件

在Setting——Import Offset选择Feet

然后选择骨骼(我下的插件有四种,具体是哪种试一试就知道了)

然后就可以开(tong)心(ku)的绑骨啦

调整好骨骼位置之后,选择各骨骼,开始设置骨骼的权重。

按下 “Edit Bone Weight” 按钮,开始设置骨骼的权重

Voxel模式下

voxel: 以体素一块一块的设置,

fill :自动选择填充相关部分

Rect :矩形选择,选择到的每个体素都是同一个权重值,配合Vertex使用。(常用)?

Vertex模式下

Brush :笔刷模式,直接设置某些顶点

Rect :矩形选择,会有比较好的过度。(常用)?

然后在各部位设置好就OK啦

Unity给力插件之MegaFiers

这是一个关于网格变形的插件。其中有非常多的功能。

这是它的API地址:

花了2天的时间实践并整理了其中绝大多数的功能,只有一些关于特殊格式的动画的功能没有实践,而且是比较重要的功能。

下面列举实践过的所有功能:

1.Bubble:气泡,呈现鼓出或萎缩的效果

2.Bulge:膨胀,可以控制不同方向上的膨胀量

3.conform:一致,让一个模型的某个方向与另一个模型表面贴合,例如在各种地形上贴合跑道模型

4.crumple:褶皱,类似噪音

5.curve deform:曲线变形,沿着一个轴线,设置一条曲线,模型按该曲线变形,勾选Use Pos,可以平移峰值

6.curve sculpt layered:自由变换,可以曲线控制任意方向上的变化(扭曲、膨胀等),自带区域限制,指定区域内才能变化

7.Cylindrify:圆筒,设置一个方向,模型按该方向圆筒化

8.displace:取代,在Map中置入灰度图,平面模型表面会根据明暗情况变得凹凸不平,其中Amount为程度值,Channel设置为不同通道

9.dynamic ripple:动态波纹,给平面添加该组件后,点击鼠标(从Main摄像机发射射线,没有MainCam时报错),生成波纹,Damping最大时点击处的受力面最大,Input Damping最大时波纹不恢复,Drops Per Sec为雨点;给模型添加Bouyancy New脚本,给Water设置参数,添加刚体,该模型就可以像浮木一样给水面造成波纹。

10.globe:地球,a、方方正正的对象呈现近大远小的效果;b、将房子贴合在弧形的地面

11.hump:驼峰,模型呈现峰谷变形,可以设置多个峰

12.melt:融化,各种融化效果(金属、冰、塑料、玻璃、果冻、自定义)

13.noise:噪音

14.pageflip:翻页

15.path deform:路径变形

16.pivot adjust:自定义中心,类似改变自身的Transfrom

17.point cache:要导入pc2、mdd、mc等格式的动画

18.push:推,朝面的法线方向往外膨胀或收缩,如果边缘未焊接则会分开

19.radial skew:射线倾斜

20.ripple:波纹

21.rope:绳索,模型添加组件后再添加2个空物体作为两端,可以用来做铁索桥、绳索等

22.rubber:橡胶,要用带VertexChannel的模型,不同颜色的通道在拖动时有不同情况的滞留效果,呈现duangduang的感觉

23.paint:画笔,运行时,通过Amount参数,使鼠标停留处模型鼓出或压下

24.simple mod:类似噪音

25.skew:倾斜

26.spherify:球形化,呈现QQ的感觉

27.squeeze:压紧

28.taper:细烛,锥形化

29.arc:圆弧,直接创建的路径对象

30.ellipse:椭圆

31.helix:螺旋

32.ngon shape:多边形

33.rectangle:矩形

34.star shape:星形

35.HOSE:软管,直接创建的模型对象

36.Attach:皮肤依附,模型添加该组件后,设置Target,目标移动时,模型始终依附在对象表面

在实践过程中经常会遇到一些问题:

1.复制的模型共用一个网格,后一个网格为主,其改变时,另一个模型的网格也会变化,前一个网格不可主动变化,否则会报错,需要使用MeshFilter.shareMesh替换;或者有个Copy object按钮可以用来复制,而且不影响原网格;

2.前一个模型的网格变化后,再变形另一个模型,则前一个模型的预制体的网格还原;

3.有些对象是空物体下面绑模型网格,注意区分,直接添加某些组件时无效;

4.有些模型需要有顶点通道,或者干脆就只能是特殊格式的模型

(责任编辑:IT教学网)

更多

推荐Flash actionscript文章