Rigidbody刚体篇
在使用刚体的参数时实刷新的更改的时候官府推荐在FixedUpdate中进行这一参数的修改操作(如空气阻力。空气角阻力之类的)在使用刚体的时候要注意一个物体的父物体和子物体最好不要同时带有刚体,当子物体带有刚体的时候不要随意缩小父物体的大小。
接下去介绍下里面的具体参数
mass(质量):刚体的质量,官方推荐场景中的质量最好不要相差100倍率以上,以防止两个质量相差太大的物体碰撞后会产生过大的速度,从而影响游戏性能,一般超过10就已经是和现实脱节了。float类型的
Drag(阻力):这里的阻力是指空气阻力,不过是用来阻碍物体旋转的,如果设置成无限的话,物体会立即停止旋转 。float类型的
AnGular Drag(角阻力):同上也是空气阻力,如果设置成无限的话,物体会立即停止旋转。float类型的
use Gravity(使用重力):勾选了这个选项,游戏对象就会收到重力的影响。bool类型的
Is Kinematic(是否动态):勾选了这个选项后可以使用动画来代替这个游戏物体的物理效果,但是别的游戏物体(游戏物体A)碰撞到挂着刚体的这个游戏物体上(游戏物体B),那么A会被击退(收到刚体碰撞的物理引擎的效果),B游戏物体继续播放动画(不受物理引擎效果)。bool类型的
Interplate(差值用来控制物体是否平滑运动选项);如果看到你加了刚体的游戏物体因为路面不平滑导致抽风或者一直抖动很不舒服的话可以选择None(无差值,就是不适用差值平滑)。Interplate(有差值,根据上一帧来平滑移动)。Extrapolate(推算,根据推算下一帧的物体的位置平滑移动)。这几种选项可以你可以根据自己项目自己选择,如果都不行就自己写个算法写把模式开成None模式。Enum类型的
Collison Detection(碰撞检测方式):Discrete(离散模式。默认的碰撞检测方式,但是当物体A运动很快的时候,有可能前一帧还在B物体的前面,后一帧就在B物体的后面了,这种情况下不会触发碰撞事件的,PS:当你测试不到碰撞检测的时候Collider生命周期如果检测不到记得使用Collision生命周期里面去检测下再来看是否是外部的Detection方式不对),Continuous(连续的碰撞检测这种方式可以与有静态网格碰撞器的游戏对象进行碰撞检测。)continuous Dynamic(动态连续,这种方式可以与所有设置了2或者3方式的游戏对象进行碰撞检测).和上面的一样。检测不到了就多试试就好了。Enum类型
Freeze Position/Rotation(冻结位置/旋转):可以对物体在X.Y.Z三个轴上的位置/旋转进行锁定,即使受到相应的力也不会改变,但可以通过脚本来修改。这个是boll类型的,可以锁定冻结任何一个轴的坐标和旋转度。
****************************************************************************************************************************
下面这个问题是我看到别人博客里面写的一个小问题,他说使用了刚体和碰撞体的物体在勾选了isTrigger内的各种情况,他说部分情况是检测不到碰撞的。在这里我说下我的见解。只要物体有刚体和碰撞体。两者碰撞了那肯定是会检测反馈到碰撞信息的。你没接受到说明你写的生命周期不对,IsTrigger勾选后需要在OnCollederXXX(Enter,Stay,Exit)生命周期(函数)里面检测(当选择了IsTrigger后物体会不受物理引擎效果穿透),不勾选IsTrigger就需要在OnCollisionXXX(Enter,Stay,Exit)生命周期中检测(受物理引擎影响),如果说的不对。那就是我看待问题太过简单了想的太简单了希望有人指出我的错误!
****************************************************************************************************************************
下面要写刚体这个类在Unity3D中的具体API(方法参数),有点长了感觉换下一个博客写吧。打会游戏。2018年4月23日晚上21点11分结笔