纳金网

标题: Transform和射线检测VS刚体和碰撞器 [打印本页]

作者: 狂风大尉    时间: 2014-7-31 01:33
标题: Transform和射线检测VS刚体和碰撞器

     用刚体实现碰撞效果,模拟现实的受力效果确实很方便。如果考虑效果最好还是用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的方法运动,刚体要少用,运动的物体尽量用射线检测,碰撞器更要少用。运动学刚体也少用。


作者: Kadina    时间: 2014-7-31 07:22
谢谢分享
作者: HIDEOKOJIMA    时间: 2014-7-31 08:45
Thanks for sharing this !
作者: ♂杰→Тāo〇    时间: 2014-7-31 14:16
很有用的讲解
作者: hyui    时间: 2014-7-31 19:10
Thanks for sharing !




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5