什么是Collider

  碰撞器组件在Unity引擎中触发物理碰撞的最基本的条件。

  可以这样说,假如一个游戏中没有物理碰撞系统是不可能的。

什么是Rigidbody

  通过物理模拟的控制对象的位置。

  Rigidbody组件添加到一个对象将其运动的控制下统一的物理引擎。即使没有添加任何代码,Rigidbody对象将由重力向下拉,将反应与传入的对象如果正确的对撞机碰撞组件也存在。

  Rigidbody也有脚本API,允许您力量应用于对象和物理现实的方式控制它。例如,一辆汽车的行为可以指定在力量方面应用的轮子。鉴于这种信息,物理引擎可以处理大多数汽车运动的其他方面,所以它将加速实际和正确应对冲突。

    通常会在脚本的FixedUpdate函数中改变Rigidbody设置。原因是防止在更新时时间不配合帧更新的步骤。

  FixedUpdate称为每个物理之前立即更新,所以任何更改将会有直接处理。

  开始使用Rigidbody时常见的问题是,游戏中模拟的物理系统似乎在“慢运动”运行。这实际上是由于规模用于您的模型。默认的重力设置假设一个世界单元对应于一米的距离。与非现实的游戏,是没有多大的区别,如果您的模型都是100单位长但使用物理时,他们将被视为非常大的对象。如果大规模用于对象应该是小,他们似乎会非常缓慢——物理引擎认为他们非常大对象摔倒非常大的距离。考虑到这一点,一定要保持你的对象在现实生活中或多或少的规模(所以汽车应该大约4单位= 4米)。

Collider的用法

碰撞器常用的方法

  • OnCollisionEnter
//当另一个游戏对象的刚体或者碰撞器,碰撞到本游戏对象的碰撞器组件时,会调用这个方法...
Collider.OnCollisionEnter(Collision)

例如:

void OnCollisionEnter(Collision collision) {
//遍历碰撞到该游戏对象的碰撞器组件的所有对象...
foreach (ContactPoint contact in collision.contacts) {
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
}
  • OnCollisionExit
//当另一个游戏对象已经离开当前游戏对象的刚体或者是碰撞器组建时会调用这个方法...
Collider.OnCollisionExit(Collision)
  • OnCollisionStay
//当另一个游戏对象的碰撞器一直停留在当前游戏对象上的刚体或者碰撞器时,会调用这个方法...
Collider.OnCollisionStay(Collision)

注意:当把碰撞器Collisider组件的触发器属性设置为true时,在脚本中会调用如下三个方法

  • OnTriggerEnter
//需要注意的是,触发器回调方法的参数是Collider类型
Collider.OnTriggerEnter(Collider)
  • OnTriggerExit
Collider.OnTriggerExit(Collider)
  • OnTriggerStay
Collider.OnTriggerEnter(Collider)

Rigidbody的用法

Rigidbody的成员变量 
成员变量名称 成员变量的作用
angularDrag 游戏对象对应的角阻力
angularVelocity 游戏对象的角速度向量 
centerOfMass 相对于游戏对象自身的坐标系统的重心位置
collisionDetectionMode 游戏对象刚体组件的碰撞检测模式
constraints 用来约束游戏对象在某些条件上是可以自由跟随Unity物理系统移动的
detectCollisions 是否启用游戏对象的碰撞检测功能。默认都是开启的。
drag 游戏对象在运动时的阻力
freezeRotation 用来约束游戏对象是否会被Unity物理系统影响自身的旋转
isKinematic 用来控制游戏对象的刚体是否会收到Unity物理系统的影响
mass 用来表示游戏对象刚体的质量
maxAngularVelocity 用来表示游戏对象的最大角速度
position 游戏对象刚体组件所处在的位置坐标
rotation 游戏对象刚体组件已经产生的坐标旋转
sleepAngularVelocity 用来表示当游戏对象的角速度小于临界值时就停止。默认值0.14
sleepVelocity 用来表示当游戏对象的运行速度小于临界值时就停止。默认值0.14
useGravity 用来表示当前游戏对象是否收到重力系统的影响
velocity 用来表示当前游戏对象的刚体的运行速度
worldCenterOfMass 相对于世界的坐标系统的重心位置

在Unity开发工具中使用到的组件接口面板

Rigidbody常用的方法

  • AddForce
//为rigidbody添加一个方向力。因此,rigidbody将开始移动。
void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);

例如:

//在FixedUpdate函数中,为rigidbody添加10个单位向上的方向力
void FixedUpdate() {
rigidbody.AddForce(Vector3.up * 10);
}
  • AddForceAtPosition
//在一个位置为Rigidbody添加一个力.
void AddForceAtPosition(Vector3 force, Vector3 position, ForceMode mode = ForceMode.Force);

例如:

//ApplyForce函数是个自定义函数,用来对一个刚体对象施加一个方向力
void ApplyForce(Rigidbody body) {
//计算当前游戏对象和刚体参数游戏对象所处位置的方向
Vector3 direction = body.transform.position - transform.position;
//在当前游戏对象所处的位置,为body参数施加1个单位的方向力
body.AddForceAtPosition(direction.normalized, transform.position);
}
  • AddTorque
//为刚体组件添加一个力矩,使该游戏对象产生旋转的速度...
void AddTorque(Vector3 torque, ForceMode mode = ForceMode.Force);

例如:

//为游戏对象添加一个10个单位的旋转力...
void FixedUpdate() {
rigidbody.AddTorque(Vector3.up * 10);
}

形成的效果如下

  • AddRelativeTorque
//添加一个扭矩rigidbody相对rigidbody自身的坐标系统
void AddRelativeTorque(Vector3 torque, ForceMode mode = ForceMode.Force);

例如:

//相对于游戏对象自身的坐标系统,添加10个单位沿着y轴正向旋转的力
void FixedUpdate()
{
rigidbody.AddRelativeTorque(Vector3.up * 10);
}

那么在Unity物理引擎系统里两个常用的组件,Collider和Rigidbody就到这里。

希望大家多多支持。

[Unity Physics]Physics - Rigidbody、Collider的更多相关文章

  1. 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术

    [Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...

  2. 关于Rigidbody,Collider和CharacterController三者之间的关系和用法的总结

    Rigidbody:多用在“物体”上,因为“物体”都是“死”的,他们的运动一般都是靠物理系统.所以对于Rigidbody的移动,不要用Translate(),要用各种“力”, 比如:Rigidbody ...

  3. Rigidbody和Collider

    Rigidbody: 常用属性: Mass:默认为1,单位并不是g或kg,而是相对的质量计量单位,只决定物体的惯性: Drag:空气阻力: Angular Drag:角阻力,旋转时受的阻力: Use ...

  4. [Unity Physics] Physics - Raycast

    Class Variables类变量 gravity The gravity applied to all rigid bodies in the scene.场景中应用到所有刚性物体的重力. min ...

  5. 【Unity入门】场景、游戏物体和组件的概念

    版权声明:本文为博主原创文章,转载请注明出处. 游戏和电影一样,是通过每一个镜头的串联来实现的,而这样的镜头我们称之为“场景”.一个游戏一般包含一个到多个场景,这些场景里面实现了不同的功能,把它们组合 ...

  6. unity中的update、Lateupdate和FixedUpdate。

    MonoBehaviour.Update 更新 当MonoBehaviour启用时,其Update在每一帧被调用. MonoBehaviour.FixedUpdate 固定更新 当MonoBehavi ...

  7. Unity属性的封装、继承、方法隐藏

    (一)Unity属性封装.继承.方法隐藏的学习和总结 一.属性的封装 1.属性封装的定义:通过对属性的读和写来保护类中的域. 2.格式例子: private string departname; // ...

  8. 【Unity Shader】三、漫反射Diffuse Shader例子

    学习目标: 漫反射Diffuse Shader,逐顶点计算和逐像素计算. 半兰伯特(HalfLambert)光照模型. 结合材质自身的色彩(Material Color)及环境光(Ambient). ...

  9. 【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)

    学习资料:http://www.sikiedu.com/course/37/task/433/show 本节学习目标: 学习Shader中结构体struct的使用. 学习在片元函数(vertex)和顶 ...

随机推荐

  1. 【多重背包】 poj 2392

    转自:http://blog.csdn.net/wangjian8006 题目大意:有一头奶牛要上太空,他有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个将这些石头 ...

  2. UVa11235 RMQ

    input 1<=n,q<=100000 升序序列a1 a2 a3 ... an -100000<=ai<=100000 q行i j 1<=i,j<=n 输入结束标 ...

  3. 关于一些url中传递参数有空格问题

    1.关于一些url中传递参数有空格问题: url.replace(/ /g, "%20") 从上面的例子中可以看到可以用:replace(/ /g, "%20" ...

  4. java 缓冲流

    english.txt The arrow missed the target. They rejected the union demand. Where does this road go to? ...

  5. 8--UI 初步认识 简易计算器

    UI是App的根基:一个App应该是先有UI界面,然后在UI的基础上增加实用功能(2)UI相对简单易学:UI普遍是学习过程中最简单的一块,能快速拥有成就感和学习兴趣(3)UI至关重要:开发中的绝大部分 ...

  6. linux常用命令 、查看日志、web排查

    linux常用命令 ps aux|grep xxx (比如 ps aux|grep tomcat ps aux|grep tomcat-portalvip ps aux|grep nginx 等) r ...

  7. MVC3 Razor 根据不同页面使用不同Layout

    _ViewStart.cshtml运行于每一Page前, 所以通常在这里先设置Layout   下面代码为特定的controller指定Index,Edit,Create的模板 即Index对应  _ ...

  8. Android Camera Api的心得

    (一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈. (二) 正文1. CameraCamera是Android framework ...

  9. opentsdb

    http://blog.javachen.com/2014/01/22/all-things-opentsdb.html http://blog.csdn.net/bingjie1217/articl ...

  10. Hibernate配置文件中配置各种数据库的driver、URL

    hibernate.properties ######################### Query Language ######################### ## define qu ...