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

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

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值