Unity3D脚印7——物理

Unity3D使用的是Physx物理引擎,但这里的用法跟纯粹的Physx不一样,这里是由刚体和碰撞体两种组件组成的物理对象。
 
【刚体】
 
    RigidBody 用于物理模拟,有质量,受重力影响,可以和其他可碰撞对象在碰撞的过程中发生相互作用的力,不要在运动中直接操作它们的位置(你要知道这不合物理),要通过施加力的方式来操作它,或者使用Joint
 
 
Tips:
两个刚体的相对质量Mass决定它们之间碰撞之后的表现
阻力Drag越大,物体看起来越轻
 
【碰撞器】
 
    Collider 用于碰撞检测,包含物理材质,刚体的碰撞检测是基于碰撞器的,一个对象必须有碰撞器,它的刚体才有效果,而一个没有刚体的碰撞器,就是物理世界中的一个静态对象,例如地板和楼房这些不会运动的物体,但能作用于其他刚体,逐帧移动一个静态碰撞器将重置Physt引擎,极耗资源
 
 
【运动学刚体】
 
    Kinematic Rigidbodies isKinematic属性为true的物体,不受力,重力,扭力的影响,但可以影响其他非运动学刚体,也可以直接设置它的位置,无敌模式,只有我可以打别人,别人不可以打我
 
【角色控制器】
 
    Character Controllers 一个垂直胶囊形状的碰撞体,用于模拟类似人的控制器,它不受力的影响,但可以被代码施加的力推动,通常,所有类似人的角色都用角色控制器来执行,角色控制器本身不具备物理特性,如果要应用真正的物理特性,必须使用刚体。
 
 
 
【关于碰撞和触发的回调函数】
 
OnTriggerXXX和OnCollisionXXX回调,这系列的回调函数都是在发生碰撞的时候回调的,都包含了Enter,Exit和Stay三种状态,但触发的规则以及传入的参数不一样
 
OnTrigger系列是当碰撞体Collider和Trigger(自身的碰撞体)发生作用时调用的,当碰撞体的isTrigger属性为true时才会发送,但当它为true时,原先的碰撞属性消失。这系列回调是由Collider发出的,碰撞对象将作为Collider被传入(可以通过collider.gameObject来操作这个gameObject,它继承于Component,Component包含了非常多的组件对象
 
OnCollision系列是当刚体直接发生碰撞的时候回调的,是由刚体发出的,它传入的对象是Collision,它包含更加详细的信息,接触点,碰撞速度等等,OnCollision要求两个对象都是刚体+碰撞体,传入参数是可选的,非动力学刚体发生的碰撞仅发送碰撞事件,而不发送Collision
 

【菜鸟使用物理引擎】

 
1.创建一个游戏对象
2.添加刚体
3.添加物理材质(需导入Asset,导入方法如下所示)

 
脚本调用物理引擎
 
要使对象受物理引擎控制,简单的办法就是给它加个 Rigidbody 。当你这么干了,对象就会受到重力影响,而且会和世界中的其他对象碰撞

刚体是模拟物理效果的对象。刚体用在玩家可以四处推动的东西,比如箱子或者没有固定的对象,或者,你可以直接用脚本添加力给对象来让他四处移动。

 

如果你直接移动一个非运动学刚体的Transform,它和其他对象的碰撞可能出问题。正确地方法应该是通过施加力或者扭矩来移动刚体。也可以添加Joints 来让刚体的行为更加复杂。比如,你可以制作一扇逼真的门或者是一台有摆动链条的吊机。

 

刚体通常和原型碰撞器配合使用。

 

Tips: 提示

  • You should never have a parent and child rigidbody together 
    绝不要把父子刚体放在一起。(无法单独控制)
  • You should never scale the parent of a rigidbody 
    绝不要缩放刚体的父对象。 

 

 

 

运动学刚体指的是激活了isKinematic属性的刚体。运动学刚体不受力、重力或扭矩的影响。可以通过设置Transform 的position和rotation来准确的操作它们或者让它们动起来,但是,它们可以和其他的非运动学刚体互相作用。

posted @ 2013-02-21 09:46  深圳-宝爷  阅读(1544)  评论(1编辑  收藏  举报