<五>使用物理组件

CocosCreator中的物理组件包含了3部分:刚体(RigidBody)、碰撞体(Collision)、物理材质(Physic Materials)

刚体(RigidBody)

回到场景,选中Player节点,把高度(y)设置为2,可以看到Player“悬空”了。
在Player的属性检查器中添加RigidBody组件。
一个具备了刚体组件的对象可以看成为一个质点。
质点(Particle)是一个物理学概念,指在某些情况下可以将物体简化为具有质量但没有大小和形状的点。这个假设使得分析物体的运动变得更加简单,特别是在只关心物体整体运动而不考虑其内部结构的情况下。质点模型广泛应用于经典力学、量子力学和其他物理领域。
在刚体组件中有质量(mass)和重力(Use Gravity)属性。
再次运行预览。
image
可以看到刚体(Player)开始往下掉落。
但是Player会穿过地面。上面说把Player看成一个质点,质点是没有大小和形状的。
如果想要Player掉落到地面上而不穿过地面,就需要借助到另一个组件:碰撞体

碰撞体(Collider)

碰撞体用于描述一个对象的物理形状和表面属性。
一个拥有并启用了刚体组件和碰撞体组件的对象才拥有完整的物理能力。
选中Player节点,在右侧的属性面板中添加碰撞体组件。
image
CocosCreator提供了非常多的内置碰撞体,对于基础的形状,可以方便的找到对应的碰撞体并添加。
例如:
PlaneCollider:平面碰撞体
BoxCollider:盒子碰撞体
SphererCollider:球形碰撞体
MeshCollider:用于不规则物体的网格碰撞体
等等
因为Player是一个立方体,这里选中BoxCollider即可。
image

可以看到,添加了碰撞体组件的对象,在被选中时,场景编辑器中会显示绿色的限框,并有控制大小形状的Gizmo

同样的给地板添加一个BoxCollider
一般来说,规则的形状在添加碰撞体时编辑器会自动计算碰撞体的边框大小,不需要额外的设置。

再次运行预览:
image
可以看到Player从空中掉落,但不会穿过地板。

为什么不给地板添加刚体组件呢?
因为地板是固定的,在碰撞的时候不会动,所以不需要RigidBody。
当一个对象只有碰撞体组件没有刚体组件时,引擎内部会给它提供一个静态刚体组件。

什么是静态刚体?
image

在刚体组件的type属性中,刚体类型分为3种:

  • Dynamic:动力学刚体
    动力学刚体受力的影响,一般用于需要具备完整的物理能力的对象上。
    例如:汽车、角色、从山上滚落的石头等等
  • Static:静态刚体
    用于不会移动的对象,例如:山体、地面、大型建筑等
    在引擎的物理系统中,静态刚体只和动力学刚体产生碰撞
  • Kinematic:运动学刚体
    运动学刚体是不会和静态刚体产生碰撞的。
    关于3种刚体的区别:
    image

物理材质

在Collider组件中有一个Material属性,这个是物理材质。
对比一个3D对象,Mesh决定它的外形,材质会决定他的颜色、质感和阴影。
而一个物理对象,Collider会决定物理对象的形状,Material会决定它的表面物理属性,如摩擦力等

在资源管理器中创建一个物理材质
image
可以看到它的属性检查器中有摩擦力等属性参数设置。
和3D对象一样,把物理材质拖动到碰撞体组件的物理材质属性中,就可以设置该对象的表面物理参数了。

posted @ 2024-12-17 11:05  EricShx  阅读(93)  评论(0)    收藏  举报