Unity3D入门(八):物理组件之刚体与碰撞体
准备工作
在上一节的基础上增加两个新的Cube,一上一下悬空于地板上,设置刚体组件及属性。如图:
物理组件之刚体
刚体组件简介
1.刚体简介
刚体:Rigidbody,属于物理类组件。
作用:添加了刚体组件的游戏物体,就有了重力,就会做自由落体运动。也就意
味着可以像现实中的物体一样运动。
2.给物体添加刚体组件
选中游戏物体–>菜单 Component–>Physics–>Rigidbody
3.刚体组件属性
属性 | 作用 |
---|---|
Mass[质量] | 设置物体的质量,也就是重量。质量单位是 KG |
Drag[阻力] | 空气阻力,0 表示无阻力,值很大时物体会停止运动 |
Angular Drag[角阻力] | 受到扭曲力时的空气阻力,0 表示无阻力,值很大时物体会停止运动 |
Use Gravity[使用重力] | 是否使用重力。 |
调整属性,观察两个红色Cube下落时碰撞的情景。为增强效果,建议下面Cube的阻力 > 上面Cube的阻力
使用刚体移动物体
1.相关方法
Rigidbody.MovePosition(Vector3):使用刚体移动物体的位置。
使用刚体移动物体,物体是根据世界坐标系的方向移动的。
使用刚体移动物体,物体会触发物理相关的事件。
2.参数
MovePosition 中的 Vector3 要使用 当前位置+方向 的方式。
Transform.Position:属性 当前物体的位置。
3.特点
①会于场景中的模型物体发生碰撞;
②会受重力影响(到达场景边缘外,会下落)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RgidBody : MonoBehaviour
{
private Rigidbody m_RigidBody;
private Transform m_Transform;
// Use this for initialization
void Start()
{
m_RigidBody = gameObject.GetComponent<Rigidbody>();
m_Transform = gameObject.GetComponent<Transform>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.W))
{
m_RigidBody.MovePosition(m_Transform.position + Vector3.forward * 0.5f);
}
if (Input.GetKey(KeyCode.S))
{
m_RigidBody.MovePosition(m_Transform.position + Vector3.back * 0.5f);
}
if (Input.GetKey(KeyCode.A))
{
m_RigidBody.MovePosition(m_Transform.position + Vector3.left * 0.5f);
}
if (Input.GetKey(KeyCode.D))
{
m_RigidBody.MovePosition(m_Transform.position + Vector3.right * 0.5f);
}
}
}
遇到的问题
注意:设置的类名(本例中为RgidBody)不能设置为RigidBody等组件名。否则无法使用组件的API。
此时,Rigidbody调用找不到MovePosition,这是因为类名跟Rigidbody组件名字相同,Start方法里获取的是Rigidbody类,而不是Rigidbody组件,所以没有这个Api,把类名换一下即可解决。
参考链接
物理组件之碰撞体
按照之前的设置后,我们发现:Student(蓝色Cube)在较快的速度下依然可以穿过空隙体积远小于它的桌椅,因此我们引入碰撞体。
碰撞体简介
1.碰撞体
使用刚体移动的物体,与场景中其他的物体相碰撞:
其实是碰撞的目标物体的“碰撞体”组件,也就是 Collider。
另外和目标物体碰撞的,是我们移动的物体的自身的“碰撞体”组件。
碰撞体可以理解为我们的模型的“外骨骼”。
模型只要加了刚体,就必须要加碰撞体,否则没有意义。
***如下图所示,Student取消Mesh Render的勾选,显示绿色的框架。***只加刚体不加碰撞体,物体会自由下落。
以上述第二种为例:
2.给物体添加碰撞体组件
选中游戏物体–>菜单 Component–>Physics–>Xxxx Collider
(我们在 Unity 中创建的基本模型,自身都带有碰撞体组件)
碰撞体种类
Box Collider
1.简介
盒子碰撞体,形状是立方体形,用于包裹类似“立方体”的模型,比如:盒子,箱子,门,房子等。
2.组件属性
属性 | 作用 |
---|---|
Center[中心点] | 设置 Box Collider 的中心点 |
Size[大小] | 设置 Box Collider 的大小 |
组件变大,即可发生碰撞。
Sphere Collider
1.简介
球形碰撞体,形状是球形,用于包裹类似“球形”的模型。
2.组件属性
属性 | 作用 |
---|---|
Radius[半径] | 设置 Sphere Collider 的大小 |
Capsule Collider
1.简介
胶囊碰撞体,形状是胶囊状,用于包裹“胶囊形”的模型。
2.组件属性
属性 | 作用 |
---|---|
Height[高度] | 设置 Capsule Collider 的高度 |
Direction[方向] | 设置 Capsule Collider 的高度方向(轴向) |
Mesh Collider
1.简介
网格碰撞体,用于包裹复杂结构的模型。
2.组件属性
属性 | 作用 |
---|---|
Mesh[网格] | 根据指定的网格,生成碰撞体 |
下图为球形碰撞体和网状碰撞体的区别,左面为球形,右面为网状。

