您的位置:首页 > 移动开发 > Unity3D

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 must
be (non-kinematic) dynamic!

因此SetPosition方法不适用于任何包含运动学刚体部件的软体。当然,如果你改了源码那就另一说了。

软体互相之间会穿插,此时软体的刚体部件会穿过另一个软体的刚体部件,但是变形效果有时候并不好。经过测试增加VertexDensity值可以改善这种情况,也可以勾选Attach Neighbors,但是这些都无法根本解决这个问题,我也没有找到一个好的解决方案。

有时候软体会穿过碰撞器,发生在两个软体碰撞的情况下,你也无法指定软体的刚体部件的Collision Detection,这个现象还是比较容易复现的。没有找到解决方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: