Rigidbody组件刚体(Rigidbody)是Unity物理引擎中的重要组件,一个游戏对象添加了刚体组件以后就开始接受物理力学的影响了,比如重力、空气摩擦力、碰撞产生的推力

 

Learn

  相同高度不同重量物体下落时间

   相同重量不同空气阻力对物体的影响

  碰撞相关的三个事件

  触发器相关的三个事件

  

  创建一个场景Gary,新建四个Cube,一个作为地面,另外三个作为测试方块

  给Cube添加材质球(材质Material)  

  三个测试方块后改名  A、B、C

  给Cube添加Rigidbody组件

  

  Mass:质量

  Drag:空气阻力

  Angular Drag:角阻力

  Use Gravity:使用重力

  Is Kinematic:是否使用动力学

  Interpolate:插值

  Collision Detection:碰撞检测

  Constraints:约束

相同高度不同重量物体下落时间

  修改A、B、C物体Mass的值

  A:Mass修改为10

  B:Mass修改为50

  C:Mass修改为100

  结论:不同质量的物体从同一高度自由落体至地面,到达地面的时间相同,最后的速度相同,但动能不相同,

相同重量不同空气阻力对物体的影响

  保持A、B、C物体Mass的值相同(10),修改其Drag(空气阻力)的值

  A:Drag修改为1

  B:Drag修改为10

  C:Drag修改为50

  结论:相同重量物体,空气阻力越小物体下落快,当物体重量和空气阻力相同时物体会保持下落,当物体重量小于空气阻力时,物体保持不动

  (当我把B物体空气阻力改为45时B物体还会保持下落,改为48时,B物体只会下滑0.0033高度,C物体空气阻力为50时在空中y轴值保持不变)

  

给A物体添加一个RigidTest.cs脚本

  AddForce()施加力

  AddTorque()施加力矩

  AddForceAtPosition()在指定位置施加力

  //AddExplosionForce()施加爆炸力

(测试时建议将A物体重力设置低一些,按1给物体施加力,按2给物体施加力矩,按3在指定位置给物体施加力)

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class RightText : MonoBehaviour { private Rigidbody r;
// Use this for initialization
void Start()
{
r = GetComponent<Rigidbody>();
} // Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.Alpha1))
{
//施加力
r.AddForce(new Vector3(0f, 10f, 0f));
}
if (Input.GetKey(KeyCode.Alpha2))
{
//施加力矩
r.AddTorque(new Vector3(0f, 10f, 0f));
}
if (Input.GetKey(KeyCode.Alpha3))
{
//在指定位置施加力
r.AddForceAtPosition(new Vector3(0f, 10f, 0f), new Vector3(0.5f, 0.5f, 0.5f));
}
}
}

RightText.cs

Collider的主要功能是进行碰撞检测 使用刚体时,一般都会和Collider共同使用

碰撞事件

  发生碰撞的两个物体必须都带有Collider

  发生碰撞的两个物体至少有一个带有刚体

  发生碰撞的两个物体必须有相对运动

碰撞相关的三个事件

   碰撞开始时调用一次void OnCollisionEnter(Collision other)

   碰撞持续发生时调用void OnCollisionStay(Collision other)

   碰撞结束时调用void OnCollisionExit(Collision other)

(A物体与地面进行了碰撞检测)

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class ColliderText : MonoBehaviour { void OnCollisionEnter(Collision other)
{
print("碰撞开始!!!");
} void OnCollisionStay(Collision other)
{
print("碰撞中!!!");
} void OnCollisionExit(Collision other)
{
print("开始结束!!!");
}
}

ColliderText.cs

触发器相关的三个事件 

  刚刚进入触发范围时调用一次void OnTriggerEnter(Collider other)

  持续在触发范围内会一直调用void OnTriggerStay(Collider other)

   离开触发范围时会调用一次void OnTriggerExit(Collider other)

  勾选A物体Box Collider下的Is Trigger属性(无视碰撞触发函数)

  

(因为A物体不会和地面进行碰撞,所以就直接穿过去了)

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class ColliderText : MonoBehaviour { //刚刚进入触发范围时调用一次_
void OnTriggerEnter(Collider other)
{
print("触发开始!!!");
} //持续在触发范围内会一直调用_
void OnTriggerStay(Collider other)
{
print("触发器检测中!!!");
} //离开触发范围时会调用一次
void OnTriggerExit(Collider other)
{
print("触发结束!!!");
}
}

ColliderText.cs

物理材质

  物理材质能够给物体添加摩擦力和弹力

  物理材质只能添加到带有Collider的对象上

  

Unity3D_(物理引擎)Rigidbody组件的更多相关文章

  1. [原]Unity3D深入浅出 - 物理引擎之刚体部件(Rigidbody)

    在虚拟世界中,任何物体都是没有活力的,要想变的真实,Rigidbody是必不可少的组件,下面介绍Rigidbody的各个属性: Mass:质量 Drag:阻力,对象在运动时遇到的空气阻力,0表示没有空 ...

  2. unity2D物理引擎之-Rigidbody 2D

    虽然Rigidbody 2D大致上可以看成是Rigidbody的2D化,大部分功能也是一致的,但是还是有一些细节问题. 一些事项: 1.任何添加到同一个 GameObject身上或者其子物体身上的 2 ...

  3. Unity3D游戏开发初探—3.初步了解U3D物理引擎

    一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...

  4. Unity3D实践系列09, 物理引擎与碰撞检测

    在Unity3D中,一个物体通常包含一个Collider和一个Rigidbody.Collider是碰撞体,一个物体是Collider,才可以进行碰撞检测.Collider组件中的"Is T ...

  5. 【英宝通Unity4.0公开课学习 】(四)GUI到物理引擎

    今天老妈打电话来说和老爸吵架了... 真的是家家都有本难念的经啊.前后帮她分析了个半小时才帮她解开心结...现在想想老爸还是蛮可怜的,连分享的人都木有 讲的GUI都看睡着了...因为想着可以用NGUI ...

  6. RigidBody组件的Is Kinematic

    RigidBody组件的Is Kinematic属性打上勾(设为true,使其不受物理引擎驱动,Wall是为了防止其移动,Person是为了防止其受到力不断旋转—看的心塞=v=) .is kinema ...

  7. 关于Unity中物理引擎的使用

    物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态 物理世界计算刚体的运行状态,通过贴图显现出运算结果. 一.物理引擎 1:Unity 2D物理引擎基于Box2D封装而成;2: 物理 ...

  8. Unity3D笔记三 物理引擎

    一.物理引擎 1.物理引擎就是模拟真实世界中物体碰撞.跌落等反应,通过Ballance.愤怒的小鸟来理解什么是物理引擎.Unity的物理引擎使用的是NviDIA的PhysX.2.选中一个游戏对象,主菜 ...

  9. 003-unity3d 物理引擎简介以及示例

    一.概述 物理引擎就是模拟真实世界中物体碰撞.跌落等反应的引擎,通过ballence.愤怒的小鸟等理解.Unity3D的物理引擎使用的是Nvidia的PhysX. 物理引擎是一个计算机程序模拟牛顿力学 ...

随机推荐

  1. rabbitmq五种消息模型整理

    目录 0. 配置项目 1. 基本消息模型 1.1 生产者发送消息 1.2 消费者获取消息(自动ACK) 1.3 消息确认机制(ACK) 1.4 消费者获取消息(手动ACK) 1.5 自动ACK存在的问 ...

  2. 2019年8月23日 星期五(Workerman)

    Workerman,高性能socket服务框架 Workerman是什么? Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架. Workerman不是重复造轮子,它不是 ...

  3. 如何让 node 运行 es6 模块文件,及其原理

    如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机 ...

  4. 删除链表中重复的结点——牛客剑指offer

    题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...

  5. 剑指offer-构建乘积数组-数组-python

    题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...

  6. css动画之旋转翻牌效果

    1.我们先设置两个盒子大小,颜色等等,然后定位重叠在一起,最后再进行动画设置 例子如下: <style> .box { height: 300px; width: 300px; posit ...

  7. Linux6上安装MySQL

    MySQL安装包下载:https://www.mysql.com/downloads/ 然后选择: 把下载好的安装包传到服务器上的指定目录,然后解压: [root@master mysql]# tar ...

  8. MySQL 5.7 免安装版 access denied 解决办法

    MySQL 5.7 在Windows 下安装的过程很多人都写过了 但是安装完成后用 root 第一次登录时需要密码 可是我根本就没设密码嘛... 搞了半天最后终于搞定了 在执行 mysqld --in ...

  9. 如何使用sqlalchemy根据数据库里面的表反推出模型,然后进行查询

    关于sqlalchemy映射数据库里面的表,一般情况下我们是需要定义一个模型来映射数据库里面的表的.但是很多时候数据库里面的表都是定义好的,而且字段很多,那么有没有不定义模型,还能使用orm语法查找数 ...

  10. linux库(程序)与包名联系

    一般地,dev为相关开发库包. curses--cursor optimization光标优化--libncurses5-dev 现在常用的是new curses(ncurses). 在ubuntu中 ...