Unity3D 官方文档 2D游戏的起始2 2D物理 全局设置与刚体

版本:unity 2017.1  语言:C#

 

总起:

Unity2D物理引擎是基于Box2D的,嘛,在这一点上cocos也不例外,其他的软件要做2D物理效果的话基本上也会用该引擎。Box2D本身是一个免费开源的物理引擎,由C++编写而成。

 

https://github.com/erincatto/Box2D,Github上有官方实例,可以下下来玩玩。

 

2D物理的设置:

通过打开Edit -> Project Settings -> Physics 2D就可以设置全局的2D物理效果,以下是默认设置的截图:



Gravity:作用于所有拥有Rigidbody2D组件游戏对象的重力值,该值一般来说是y轴的负半轴方向;

 

Default Material:默认的Physics Material 2D物理材质,用于Collider 2D,该材质只有两种数值:Friction摩擦系数、Bounciness弹力系数;

 

Velocity Iterations:决定速度影响的迭代次数,值越高,物理模拟越精确,但CPU消耗也越大;

 

Position Iterations:决定位置影响的迭代次数,值越高,物理模拟越精确,但CPU消耗也越大;

 

Velocity Threshold:速度阈值,速度在该值之下的GameObject会被视为非弹性碰撞;

 

Max Linear Correction:最大线性矫正,用于防止过冲;

 

Max Angular Correction:最大角速度校正,用于防止过冲;

 

Max Translation Speed:Rigidbody 2D最大的线性速度;

 

Max Rotation Speed:Rigidbody 2D最大的角速度;

 

Min Penetration For Penalty:(2017版中可设置,以后如果是2017的特性,直接表明2017)Collider之间分离前的最小渗透半径;

 

Baumgarte Scale:解决重叠问题的缩放因子;

 

Baumgarte Time of Impact Scale:同上,重叠问题的因子;

 

Time to SleepRigidbody 2D静止状态多久时间(单位秒)后进入睡眠状态;

 

Linear Sleep Tolerance:线性速度阈值,决定多少速度以下算是静止状态;

 

Angular Sleep Tolerance:角速度阈值,决定多少角速度以下算是静止状态;

 

Queries Hit TriggersCollider 2D被标记为Trigger后,任何的物理查询是否能触发Trigger,类似Linecast、Raycast,勾选则会触发;

 

Queries Start In Colliders:勾选此框的情况下,在Collider 2D内部时射线检测会返回该Collider,否则不会;

 

Change Stops Callbacks:勾选此框时,当Collider被移出或删除,碰撞反馈会立即停止;

 

Callback On Disable:官方截图上没有,但确实有该属性。意思应该是Disable时会回调。后两个参数我没有测试,貌似是针对一帧内调用,个人感觉没什么特别的用处,保持默认就好;

 

Layer Collision Matrix:层碰撞矩阵,勾选之间的层能产生碰撞。

 

Rigidbody 2D:

3D的刚体有区别,Rigidbody 2D有三种类型,但是实现的功能是一样的,而且运动的物体同样在Collision Detection中选择Continuous,不然运动物体过快的话可以直接穿过去。

 

相比于3D刚体3个轴上都可以运动,Rigidbody 2D只能在x、y轴上运动,而随着z轴旋转,当然横版游戏角色的话,一般会选择Freeze Rotation Z冻结Z轴上的旋转。

 

官方文档是从最复杂的动态刚体开始介绍的,让我们反着来。

 

Static 静态刚体

静态刚体就像是个拥有无限质量的物体固定在那边一样,它只会与Dynamic的其他刚体发生碰撞,两个静态刚体的碰撞是没有效果的。如下图所示,能调节的属性十分有限:



Body Type:肯定是Static,所以才是静态刚体;

 

Material:选择物理材质,物理材质按照以下顺序查找:

1.Collider 2D本身的物理材质;

2.Rigidbody上的物理材质;

3.全局设置下的物理材质。

    一直有个疑惑是如果上面都没有设置,那么物理材质会选择哪个,测试下来应该是这样的,默认是摩擦系数0.4、弹力系数0。

 

Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。

 

Kinematic 动力学刚体

动力学刚体不受重力和力的影响,而受用户的控制,需要使用类似Rigidbody2D.MovePosition、Rigidbody2D.MoveRotation的方法。它于静态刚体一样,只与动态刚体会发生碰撞。

 

嗯,而且质量应该算是无限大,所以它在运动的时候会撞开所有的动态刚体。



Body Type:Kinematic表明是运动学刚体;

 

Material:同上;

 

Simulated:同上;

 

Use Full Kinematic Contacts:启用该选项后,它的行为会类似于动态刚体与其他所有刚体都发生碰撞,但它还是手用户控制的,并且拥有无限大的质量。

 

Collision Detection:建议选择Continuous,不然速度过快时,物体会直接穿过去,嘛,当然要保证这样运动连续的话,CPU的一点点性能贡献是必要的。

 

Sleeping Mode:

    1.Never Sleep,禁用睡眠状态,尽量不要使用该选项,会影响系统资源;

    2.Start Awake,初始状态是醒着的;

    3.Start Asleep,初始状态是睡眠状态,当然会被其他碰撞而唤醒。

 

Interpolate:改变物体移动时内插值的行为,如果物体移动时发生了抖动现象,请使用该参数。

    1.None,不使用平滑插值;

    2.Interpolate,根据上一帧的位置进行插值;

    3.Extrapolate,根据下一阵的位置进行插值。

 

Constraints:用于冻结x、y轴的移动或z轴的旋转。

 

Dynamic 动态刚体

动态刚体会与其他的所有刚体发生碰撞,注意不要主动修改Transform的位置和角度,刚体内部会自动使用速度来模拟移动。需要时请使用Force函数来进行移动、旋转。



Body Type:Dynamic表明是动态刚体;

 

Material:同上;

 

Simulated:同上;


Use Auto Mass:勾选该选项框后,Rigidbody 2D可以自动根据Collider生成质量;

 

Mass:物体的质量;

 

Linear Drag:线性速度阻力;

 

Angular Darg:角速度阻力;

 

Gravity Scale:重力影响的缩放因子;

 

Collision Detection:同上;

 

Sleeping Mode:同上;

 

Interpolate:同上;

 

Constraints:同上。

 

这样看下来,对比很清晰吧,动力学刚体和动态刚体就区别在于动态刚体多了质量和阻力值。

 

又写了五页了,还以为一篇直接能把2D后面的全介绍了。不过要做的话还是认真点吧,Collider、Joint和Effector就留到下一篇。

 

个人:

Unity正式进入2017了文档也更新了,我这边也就顺势推到2017了,其实没太大更新,Sprite功能继续完善,然后Animation出了个录像功能,还蛮好用的。

 

最近自己也算是跌到了低谷,投了大概一个月的简历,Unity的面试邀请一次都没有,失败吗?自己到底哪里不足了?自省之下却得不出个答案。

 

不过现在想想那又怎样?失败了,那又怎么样?现在的失败不过未来成功后的调料而已,一帆风顺的人生有什么意思?一个游戏中你的能力已经秒天秒地秒空气了又有什么意思?

 

真的感觉很抱歉呢,我在日漫中其他什么都没有学到,只学到了一点,即使被打倒了一百次,也要在第一百零一次的时候站起来。而我现在不过是第一次失败罢了。

 

想想纵使黑暗之魂这样对新人恶意满满的游戏,我都跨过了,还有什么跨过不了的?到最后扒开里面的各种恶意都成了趣味。所以生活的恶意尽管来,退却了一步算我输,我会让你看到我的执念!


  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值