- 最后登录
- 2019-12-2
- 注册时间
- 2012-8-25
- 阅读权限
- 90
- 积分
- 34660
- 纳金币
- 38268
- 精华
- 111
|
用刚体实现碰撞效果,模拟现实的受力效果确实很方便。如果考虑效果最好还是用Transform和射线检测,像刚体一样的效果也很容易实现。只要给每帧加上一个向前的位移量,一个向下的位移量模拟重力作用,并把方向转向下一帧的方向,同时对下一帧的距离做射线检测,如有碰撞体,就减小每帧的位移量,并用Vector3的反射函数实现反弹减速,如果让被碰的物体移动,对被碰物体的位置进行插值移动就可以了。这就是脚本的主要内容。
下面是比较运行效率的简单测试:建一个简单的场景,一个平面,我放了156个圆柱体(感觉这个数量已经很多了),作为发射器,让它们各自每0.3秒生成一个小球,小球4秒后自动销毁。不销毁内存受不了。我的电脑本身配置就低。
小球自带一个默认的碰撞器,然后对小球加刚体组件,这样就是一个可以产生碰撞效果的刚体了,加一个脚本,脚本的工作只是在初始的时候给它一个初速度。运行。电脑很快就卡了,运行16.1秒时,平均每帧0.15秒。
接下来,选择运动学刚体项,把刚体改成运动学刚体,运动学刚体不受力,这时要用上面提到的 Transform和射线检测脚本来驱动,并有碰撞和反弹效果,运行,16.1秒时平均每帧 0.2秒, 运行效率更低 。为什么会更低?因为有射线检测,碰撞器就是个累赘了。去掉碰撞器组件,运行,16.1秒时平均每帧0.079秒,运行效率就好很多了。
在这基础上再把刚体组件也去掉,只用Transform方法运动和射线检测。运行,16.1秒时平均每帧0.077秒。运行效率更高。
如果只是让它们做运动,去掉碰撞检测。既一种是小球带刚体组件不带碰撞器组件,另一种是小球只用Transform的运动脚本把里面的射线检测去掉。结果是:Transform方法运动,在16.1秒时平均每帧0.041秒;刚体运动,在16.1秒时平均每帧0.056秒;运动学刚体运动,在16.1秒时平均每帧0.060秒。
上面的比较数据,运行时间越长差距越明显。每帧的平均时间并不是不变的,运行时间越长这个值越大,效率越低增长的幅度越大。
可见,尽量用Transform的方法运动,刚体要少用,运动的物体尽量用射线检测,碰撞器更要少用。运动学刚体也少用。
|
|