Rigidbody组件解析

一.属性

1.Mass 「质量」

设置物体的质量,也就是重量。质量单位是KG。

2.Drag 「阻力」

物体所受的空气阻力,0表示无阻力,值很大时物体会停止运动。

3.Angular Drag 「角阻力」

受到扭曲力时的空气阻力,0表示无阻力,值很大时物体会停止运动。

4.Use Gravity 「是否使用重力」

二.方法

1.使用刚体移动物体

Rigidbody.MovePosition(Vector3):使用刚体移动物体的位置。

Vector3还需加上自身位置。

使用刚体移动物体,物体是根据世界坐标系的方向移动的。

使用刚体移动物体,物体会触发物理相关的事件

2.AddForce()

①作用

给刚体添加一个力,让刚体按「世界坐标系」进行运动。

②代码
1
Rigidbody.AddForce(Vector3,ForceMode);

Vector3:力的方向和大小;

ForceMode:力的模式「enum类型」

3.AddRelativeForce()

①作用

给刚体添加一个力,让刚体按「自身坐标系」进行运动。

②代码
1
Rigidbody.AddRelativeForce(Vector3,ForceMode);

Vector3:力的方向和大小;

ForceMode:力的模式「enum类型」。

PS.如果运用在球体上,球体滚动旋转会导致自身坐标系方向发生改变,于是会像这样来回滚动。

给球体施加AddRelativeForce

4.FixedUpdate()

固定更新方法。

所有和物理相关的操作,代码都要写在FixedUpdate()方法体内。

固定更新的时间间隔是0.02秒,1秒执行50次。

Edit->Project Settings->Time面板中的Fixed Timestep参数设置。

Update()方法是每一帧执行一次。

画面每渲染完一次,就是一帧,每帧的时间是不固定的。

在Update()方法中执行物理操作,会出现卡顿的情况。

碰撞体组件

使用刚体移动的物体,与场景中其他的物体相碰撞:

其实是碰撞的目标物体的「碰撞体」组件,也就是Collider

另外和目标物体碰撞的,是我们移动的物体的自身的「碰撞体」组件。

碰撞体可以理解为我们的“外骨骼”。

模型只要加了刚体就必须要加碰撞体,否则没有意义。

Box Collider「盒型碰撞体」

①简介

盒子碰撞体,形状是立方体形,用于包裹类似“立方体”的模型,比如:盒子,箱子,门,房子等。

②组件属性

Center 「中心点」

设置Box Collider的中心点

Size 「大小」

设置Box Collider的大小

Sphere Collider「球形碰撞体」

①简介

球形碰撞体,形状是球形,用于包裹类似“球形”的模型

②组件属性

Radius「半径」

设置Sphere Collider的大小

Capsule Collider「胶囊碰撞体」

①简介

胶囊碰撞体,形状是胶囊状,用于包裹“胶囊形”的模型。

②组件属性

Height「高度」

设置Capsule Collider的高度

Direction「方向」

设置Capsule Collider的高度方向「轴向」

Mesh Collider「网格碰撞体」

①简介

网格碰撞体,用于包裹复杂结构的模型。

②组件属性

Mesh「网格」

根据指定的网格,生成碰撞体。

碰撞监测与处理

物理碰撞方法:

1.OnCollisionEnter

碰撞开始执行一次。

2.OnCollisionExit

碰撞结束执行一次。

3.OnCollisionStay

碰撞中一直执行。

触发器碰撞监测「Trigger」

1.OnTriggerEnter

2.OnTriggerExit

3.OnTriggerStay

触发器不触发相关物理效果,由刚体操作的物体会直接穿过触发器而不进行碰撞。

模型中心点

模型身上的坐标轴的中心点,也就是我们模型的中心点。

模型位置、旋转、缩放都是基于模型的中心点来进行变化的。

改变模型中心点

创建一个空物体,创建父子关系,通过父物体来控制子物体。

也就间接的改变了模型的中心点。

中心点工具

Center:当选中两个模型的时候,设置为「Center」,模型组的中心点就在两个模型的中间中心位置。

Pivot:当选中两个模型的时候,设置为「Pivot」,模型组的中心点就在后选中的模型的中心点位置。