一 概念介绍

刚体

Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。

碰撞体

碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。

二 属性

刚体Rigidbody组件的属性

Mass质量 该项用于设置游戏对象的质量(建议在同一个游戏场景中,游戏对象之间的质量差值不要大于100倍)。

Drag阻力 0表示没有空气阻力,阻力极大时游戏对象会立即停止运动。

Angular Drag角阻力 当游戏对象受扭矩力旋转时受到的空气阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止运动。

Use Gravity使用重力 开启此项,游戏对象受重力影响。

Is Kinematic是否开启动力学 开启此项,游戏对象将不再受物理引擎的影响从而只能通过Transform(几何变换组件)属性来对其操作,该方式适用于模拟平台移动或带有铰链关节链接刚体的动画。

Interpolate插值 该项用于控制刚体运动的抖动情况。有三项可以选择:

  • None没有插值
  • Interpolate内插值,基于前一帧的Transform来平滑此次的Transform。
  • Extrapolate外插值,基于下一帧的Transform来平滑此次的Transform。

Collision Detection碰撞检测 该属性用于控制避免高速运动的游戏对象穿过其他对象而未发生碰撞,有三项可以选择:

Discrete离散碰撞检测 该模式与场景中其他的所有碰撞体进行碰撞检测,是默认值。

  • Continuous连续碰撞检测 该模式用于检测与动态碰撞体(带有Rigidbody)的碰撞,使用连续碰撞检测模式来检测与网格碰撞体的(不带Rigidbody)碰撞。其他的刚体采用离散碰撞模式。此模式适用于那些需要与采用连续动态碰撞检测的对象相碰撞的对象:这对物理性能会有很大的影晌 ,如果不需要对快速运动的对象进行碰撞检测,就使用离散碰撞检测模式。
  • Continuous Dynamic连续动态碰撞检测模式 该模式用于检测与采用连续碰撞模式或连续动态碰撞模式对象的碰撞 ,也可用于检 测 没 有Rigidbody的静态网格碰撞体 。 对于与之碰撞的其他对象可采用离散碰撞检测。 动态连续 碰撞检测模式也可用于检测快速运动的游戏对象。

Constraints约束 该项用于控制刚体运动的约束。

  • Freeze Position:冻结位置。刚体对象在世界坐标系中xyz轴方向上(勾选状态)的移动无效。
  • Freeze Rotation:冻结旋转。刚体对象在世界坐标系中xyz轴方向上(勾选状态)的旋转无效。

使用刚体

刚体在受物理引擎作用之前必须要明确地添加给一个游戏对象,之后该对象就会受到重力和通过脚本添加的作用力的影响。

举个例子吧:比如让一个小球碰撞一个立方体。

                               

首先要给小球添加一个刚体组件Rigidbody,确定"Use Gravity"和"Is Kinematic"(是否动力学)为取消状态,即不使用重力模拟和确保受到物理力学的影响。

由于创建一个球体时,Unity会默认添加了一个Sphere Collider,所以不需要再添加碰撞体。

现在为小球添加一个脚本(C#)用来控制小球的移动和碰撞检测。

脚本代码如下:

using UnityEngine;
using System.Collections; public class OperateBall : MonoBehaviour
{ public float speed;//控制小球的移动速度
// Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rigidbody.AddForce(movement * speed * Time.deltaTime);
} void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "pickup")
{
other.gameObject.SetActive(false);//如果是立方体,碰撞后设为禁用,在Game中就不会显示
}
}
}

接着来设置一下cube立方体的属性,确保Box Collider中的"Is Trigger"选项被勾选上。

Is Trigger为选中状态,表明cube是一个触发器,当小球碰撞它是会触发小球脚本(BallControl.cs)中OnTriggerEnter的事件,接下来cube就会被禁用,不会显示在Game中。

如果不选中Is Trigger,那么则无法用脚本来控制小球的移动。

碰撞前:

碰撞后:

注意

触发事件,必须满足如下三个条件:

1、必须都要有碰撞器组件(Collider)。

2、必须有一个物体带刚体组件,并且处于运动状体中(包括主动运动去撞击别人和在运动过程中被别人撞击)。

3、两个碰撞器中至少有一个开启了IsTrigger。

Unity3D之碰撞体,刚体的更多相关文章

  1. Unity3D使用碰撞体做触发器实现简单的自己主动开门

     在游戏制作中触发器的使用很的方便也很有用. 这一张我们简介一下怎样使用一个简单的触发器来实现自己主动开门关门的效果. 首先确保你已经对门进行了动画的设置. 详细流程例如以下. 选择Window- ...

  2. unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)

      刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...

  3. 【Unity3D】刚体与碰撞体以及is Trigger属性的意义

    [Unity3D]刚体与碰撞体以及is Trigger属性的意义 刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚 ...

  4. [原]Unity3D深入浅出 - 物理引擎之碰撞体(Colliders)

    通常Colliders会与Rigidbody一起使用,没有添加碰撞体的刚体会彼此相互穿过. 常用碰撞体有以下几种: Box Collider:盒子碰撞体,是一个立方体外形的碰撞体,可调整为不同大小的长 ...

  5. u3d中刚体与碰撞体的理解以及is Trigger属性的意义

    刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚体与碰撞体的关系:个人理解判断碰撞体就是需要计算力,如果碰撞的物体 ...

  6. U3D中碰撞体和刚体的关系

    1.刚体是用来接受力作用的组件: 2.碰撞体是碰撞系统用来检测碰撞的组件: 碰撞产生碰撞信息,游戏物体根据碰撞信息生成一个力作用在刚体上,刚体受力后就会产生一个速率,最终在游戏物体的运动体现出来. 也 ...

  7. unity3d关于碰撞问题

    这个是我做忍者游戏出现的问题,做个记录也为以后有人遇到也可以借鉴.因为刚接触unity,所以对其所知甚少,说错的地方请指教. 问题:角色碰撞墙为什么会先触发碰撞地面,然后再触发碰撞墙 想要的效果:是角 ...

  8. 胶囊碰撞体(CapsuleCollider)

    胶囊碰撞体 (Capsule Collider) 胶囊碰撞体 (Capsule Collider) 由两个半球体与一个圆柱体相连接而构成.它与胶囊 (Capsule) 基元形状相同.   一堆胶囊碰撞 ...

  9. 【Unity】11.4 车轮碰撞体(Wheel Collider)

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 车轮碰撞体 (Wheel Collider)专门用于创建汽车或其他移动交通工具. 车轮碰撞体是一种针对地面车辆的特殊碰撞 ...

随机推荐

  1. FBX BlendShape/Morph动画解析

    目前fbx 2015.1中支持三种变形器:skinDeformer,blendShapeDeformer,vertexCacheDeformer.定义在fbxdeformer.h中: enum EDe ...

  2. paip.索引的种类以及实现attilax 总结

    paip.索引的种类以及实现attilax 总结 1. 索引的类型 1 2. Btree索引(分块索引) 1 3. Hash 索引(编号索引) 1 4. 倒排索引 2 5. 对大型文本文件做索引 2 ...

  3. [svc]磁盘接口与RAID

    一 磁盘接口 IDE 传统家用: /dev/hda1 SISC 传统服务器: /dev/sdb1 SATA 现在家用 SAS 现在服务器用 FC(光纤通道) 高级服务器 注意: 分区编号,1-4只能给 ...

  4. Linux下C语言使用openssl库进行加密

    在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...

  5. JAVA ,JVM 调试

    https://blogs.oracle.com/poonam/entry/analysis_of_strange_hotspot_crashes https://blogs.oracle.com/p ...

  6. CentOS LDAP安装配置

    安装: Install the openldap, openldap-servers, and openldap-clients RPMs. Edit the /etc/openldap/slapd. ...

  7. 【Unity笔记】屏幕坐标和鼠标坐标

    屏幕坐标:左下角为原点. void Update(){ // 获取物体的屏幕坐标,世界坐标->屏幕坐标 Vector3 screenPos = Camera.main.WorldToScreen ...

  8. u-boot 2016.05 添加u-boot cmd

    记录一下如何在u-boot 添加一个自己想要的命令. 首先来看一下宏,include/command.h 218 #define U_BOOT_CMD(_name, _maxargs, _rep, _ ...

  9. yarn是什么?为什么会产生yarn,它解决了什么问题?以及yarn的执行流程

       yarn是什么?为什么会产生yarn,它解决了什么问题? 答:yarn是作业调度和集群资源管理的一个框架. 首先对之前的Hadoop 和 MRv1 简单介绍如下: Hadoop 集群可从单一节点 ...

  10. 关于一致性Hash算法

    在大型web应用中,缓存可算是当今的一个标准开发配置了.在大规模的缓存应用中,应运而生了分布式缓存系统.分布式缓存系统的基本原理,大家也有所耳闻.key-value如何均匀的分散到集群中?说到此,最常 ...