Unity3D入门(八):物理组件之刚体与碰撞体

Unity3D入门(八):物理组件之刚体与碰撞体

  • 准备工作
  • 物理组件之刚体
    • 刚体组件简介
    • 使用刚体移动物体
    • 遇到的问题
  • 物理组件之碰撞体
    • 碰撞体简介
    • 碰撞体种类
      • Box Collider
      • Sphere Collider
      • Capsule Collider
      • Mesh Collider

准备工作

在上一节的基础上增加两个新的Cube,一上一下悬空于地板上,设置刚体组件及属性。如图:
Unity3D入门(八):物理组件之刚体与碰撞体_第1张图片

物理组件之刚体

刚体组件简介

1.刚体简介
刚体:Rigidbody,属于物理类组件。
作用:添加了刚体组件的游戏物体,就有了重力,就会做自由落体运动。也就意
味着可以像现实中的物体一样运动。

2.给物体添加刚体组件
选中游戏物体–>菜单 Component–>Physics–>Rigidbody

3.刚体组件属性

属性 作用
Mass[质量] 设置物体的质量,也就是重量。质量单位是 KG
Drag[阻力] 空气阻力,0 表示无阻力,值很大时物体会停止运动
Angular Drag[角阻力] 受到扭曲力时的空气阻力,0 表示无阻力,值很大时物体会停止运动
Use Gravity[使用重力] 是否使用重力。

Unity3D入门(八):物理组件之刚体与碰撞体_第2张图片

调整属性,观察两个红色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。
Unity3D入门(八):物理组件之刚体与碰撞体_第3张图片
此时,Rigidbody调用找不到MovePosition,这是因为类名跟Rigidbody组件名字相同,Start方法里获取的是Rigidbody类,而不是Rigidbody组件,所以没有这个Api,把类名换一下即可解决。
参考链接

物理组件之碰撞体

按照之前的设置后,我们发现:Student(蓝色Cube)在较快的速度下依然可以穿过空隙体积远小于它的桌椅,因此我们引入碰撞体。

Unity3D入门(八):物理组件之刚体与碰撞体_第4张图片

碰撞体简介

1.碰撞体
使用刚体移动的物体,与场景中其他的物体相碰撞:
其实是碰撞的目标物体的“碰撞体”组件,也就是 Collider。
另外和目标物体碰撞的,是我们移动的物体的自身的“碰撞体”组件。
碰撞体可以理解为我们的模型的“外骨骼”。
模型只要加了刚体,就必须要加碰撞体,否则没有意义。

***如下图所示,Student取消Mesh Render的勾选,显示绿色的框架。***只加刚体不加碰撞体,物体会自由下落。
Unity3D入门(八):物理组件之刚体与碰撞体_第5张图片Unity3D入门(八):物理组件之刚体与碰撞体_第6张图片
以上述第二种为例:
Unity3D入门(八):物理组件之刚体与碰撞体_第7张图片

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[网格] 根据指定的网格,生成碰撞体

下图为球形碰撞体和网状碰撞体的区别,左面为球形,右面为网状。

Unity3D入门(八):物理组件之刚体与碰撞体_第8张图片 Unity3D入门(八):物理组件之刚体与碰撞体_第9张图片

你可能感兴趣的:(Unity3D)