Unity3D之碰撞体,刚体
一 概念介绍
刚体
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之碰撞体,刚体的更多相关文章
- Unity3D使用碰撞体做触发器实现简单的自己主动开门
在游戏制作中触发器的使用很的方便也很有用. 这一张我们简介一下怎样使用一个简单的触发器来实现自己主动开门关门的效果. 首先确保你已经对门进行了动画的设置. 详细流程例如以下. 选择Window- ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- 【Unity3D】刚体与碰撞体以及is Trigger属性的意义
[Unity3D]刚体与碰撞体以及is Trigger属性的意义 刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚 ...
- [原]Unity3D深入浅出 - 物理引擎之碰撞体(Colliders)
通常Colliders会与Rigidbody一起使用,没有添加碰撞体的刚体会彼此相互穿过. 常用碰撞体有以下几种: Box Collider:盒子碰撞体,是一个立方体外形的碰撞体,可调整为不同大小的长 ...
- u3d中刚体与碰撞体的理解以及is Trigger属性的意义
刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚体与碰撞体的关系:个人理解判断碰撞体就是需要计算力,如果碰撞的物体 ...
- U3D中碰撞体和刚体的关系
1.刚体是用来接受力作用的组件: 2.碰撞体是碰撞系统用来检测碰撞的组件: 碰撞产生碰撞信息,游戏物体根据碰撞信息生成一个力作用在刚体上,刚体受力后就会产生一个速率,最终在游戏物体的运动体现出来. 也 ...
- unity3d关于碰撞问题
这个是我做忍者游戏出现的问题,做个记录也为以后有人遇到也可以借鉴.因为刚接触unity,所以对其所知甚少,说错的地方请指教. 问题:角色碰撞墙为什么会先触发碰撞地面,然后再触发碰撞墙 想要的效果:是角 ...
- 胶囊碰撞体(CapsuleCollider)
胶囊碰撞体 (Capsule Collider) 胶囊碰撞体 (Capsule Collider) 由两个半球体与一个圆柱体相连接而构成.它与胶囊 (Capsule) 基元形状相同. 一堆胶囊碰撞 ...
- 【Unity】11.4 车轮碰撞体(Wheel Collider)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 车轮碰撞体 (Wheel Collider)专门用于创建汽车或其他移动交通工具. 车轮碰撞体是一种针对地面车辆的特殊碰撞 ...
随机推荐
- composer安装第三方的库packagist.org(laravel框架引入第三方库)
建立composer.json composer require phpoffice/phpexcel //安装一个excel扩展库 composer require gregwar/captcha ...
- FBX BlendShape/Morph动画解析
目前fbx 2015.1中支持三种变形器:skinDeformer,blendShapeDeformer,vertexCacheDeformer.定义在fbxdeformer.h中: enum EDe ...
- 权限管理系统(一):权限系统与RBAC模型概述
RBAC模型概述 RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构 ...
- gitbook安装与使用
废话不说,直接主题: gitbook安装 =========== 1. 安装npm 从站点 https://nodejs.org/#download 下载node.js源码(点击绿色的INSTALL ...
- rzsz安装【转】
环境:CentOS 发生情况:需要安装工具:szrz 工具进行 windows 和linux传文件 安装方式:从网上其他教程找的所以就按照如下方式操作 1. 下载软件 rzsz-3.34.tar.gz ...
- sqlserver中sp_executesql使用实例(获取动态sql输出结果)
语法 sp_executesql [ @stmt = ] stmt [ {, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,. ...
- eclipse 集成 github
1.eclipse markketplace 搜索 egit 安装 next next ........ 安装好之后restart 2.开始配置git插件 配置git有2中方式 1.使用http ...
- 文件io之——open/close
一个进程默认打开三个文件描述符: STDIN_FILENO 0STDOUT_FILENO 1STDERR_FILENO 2 man 2 open可查看详情: open函数可以打开或者创建一个文件: # ...
- 使用嵌入文档Here Documents
Unix/Linux Shell编程实战:使用嵌入文档Here Documents 一.Here Documents(嵌入文档)Here Documents作为重定向的一种方式,指示shell从源文件 ...
- Java字符串的格式化与输出
Java字符串的格式化与输出 在C语言中格式化输出能够通过printf()函数实现,在Java中无需借助第三方工具相同能够实现此功能.自Java SE5后,java也提供了C语言中printf()风格 ...