Unity插件系列-JellySprite
2015-08-24 16:59
525 查看
简介
过去一段时间,我一直在找Unity的软体插件,JellySprite看demo效果不错,但是教程很少,所以记录一下我个人对JellySprite插件的学习感想,如果有任何错误欢迎指正。我用的JellySprite的版本是1.26,Unity版本是4.6.6
JellySprite的优点:
学习成本低
模拟重力,2D碰撞,并且有碰撞事件
JellySprite的缺点:
效率
穿插
效果可配置的不多
原理
软体的实现是基于刚体的,以JellySprite为例,它实际上是创建了一个plane,以图片作为plane的贴图,同时创建多个圆形刚体和1个中心点,中心点也是刚体,中心点和刚体间有约束。碰撞后根据刚体的位置动态对plane进行变形。如图所示,绿色的就是刚体,中心点的刚体与其他各个刚体都有约束。
重要的配置项
Sprite Scale:对JellySprite的缩放最好使用检视面板里的SpriteScale值,如果使用Transform的Scale值,实际测试发现plane的变形会出问题。BodyConfiguration:此项是我认为的最重要的配置项,使用不同的预设直接决定了软体内部的刚体的组成方式。越少的刚体肯定效率越高,但是也会影响软体的效果,Free模式可以自定义刚体的位置,以及是否是运动学刚体等,注意运动学刚体只能和刚体发生碰撞,此外运动学刚体将不受重力影响。因此如果软体中的刚体全是运动学刚体,它将不会发生形变。
Kinematic Central Body:选中后会将中心点刚体设置为运动学刚体,官方文档建议把静态(不需要位移)软体的此选项打开。此处有个坑,后面会说明。
Attach Neighbors:默认刚体部位之间是没有约束的,勾选此选项后刚体部件之间也会建立约束,刚体将更“坚固”。
Spring Stiffness,Spring Damping:刚体部件之间的约束是弹簧关节,这两个值分别对应弹簧关节的Spring和Damper值。
Vertex Density:这个值影响了plane的顶点数,顶点越多的plane,碰撞后变形效果越精细,也就越不容易穿插,但是相对的效率也会变低。
Num Attach Points:可以通过此项为软体附加对象,可以附加任何Transform对象,包括另一个软体,对于普通的对象,会把附加的对象作为软体的子对象,对于另一个软体,会把软体的中心点作为子对象
一些疑问
在实际使用过程中,我不想使用重力,我想通过左右键控制一个JellySprite软体的运动,于是我打开了Kinematic Central Body,并调用了SetPosition方法,结果当我不在按键后,软体仍然会移动,我又设置SetPosition的第二个参数为true,即设置位置后将速度设置为0,这一次终于不在移动了,但是代码报错了,因为SetPosition会设置每个刚体部件(包括中心点)的速度为0,但是中心点为运动学刚体,所以报错Actor::setLinearVelocity: Actor mustbe (non-kinematic) dynamic!
因此SetPosition方法不适用于任何包含运动学刚体部件的软体。当然,如果你改了源码那就另一说了。
软体互相之间会穿插,此时软体的刚体部件会穿过另一个软体的刚体部件,但是变形效果有时候并不好。经过测试增加VertexDensity值可以改善这种情况,也可以勾选Attach Neighbors,但是这些都无法根本解决这个问题,我也没有找到一个好的解决方案。
有时候软体会穿过碰撞器,发生在两个软体碰撞的情况下,你也无法指定软体的刚体部件的Collision Detection,这个现象还是比较容易复现的。没有找到解决方法。
相关文章推荐
- UnityShader实例13:屏幕特效之均值模糊(Box Blur)
- unity加kinect2.0拍照和利用RPC图片传输制作照片墙问题
- Unity3D Optimizing Graphics Performance for iOS
- Unity3D - 图形性能优化
- 想在Unity中写串口程序,发现找不到System.IO.Ports
- unity3d 脚本的一些简单介绍
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D游戏开发之详解 Animation类和Animator类
- Unity换装之分离元素
- unity中 拖拽任意的对象
- Unity换装之合并网格
- Unity模拟考题之Unity Certified Professional(专业能力认证)
- Unity模拟考题之Unity Certified User(应用能力认证)
- 【Unity 3D 性能优化 之 一】ParticleSyetem 的alive
- Unity3d_Unity3d"Library\UnityAssemblies\UnityEngine.xml"is denied错误解决方法
- Unity_UNity导出Android工程
- Unity插件之Kolmich(教你如何快速搭建一个完整的小地图)
- Unity3D 4.x 使用Mecanim实现动画控制
- Unity3D实现DoubleClick的一种方法
- unity, 慎用DontDestroyOnLoad