1.创建一个3D工程

2.构造项目文件目录

3.保存场景为game_scene到文件夹scenes中

4.创建一个Plane平面类型的GameObject节点和一个Sphere球体类型的GameObject节点

5.给Plane贴上图片,Sphere贴上材质,可以设置球的材质的Shader为Mobile/Diffuse

6.运行,发现球在空中静止,因为没有添加受力体,也就是刚体组件Rigidbody,添加后运行,球从空中掉到平面上,前提是两者都已经有Collider碰撞器组件,否则只要一方没有Collider就会穿过彼此。

Rigidbody组件属性

1.Mass(质量): [0, 10],默认为1, [0.1, 10]日常生活的感受;

2.Drag(阻力): 物体移动时的阻力
3.AngularDrag(旋转阻力): 旋转时候的衰减;
4.Use Gravity(使用重力): 是否受重力影响;
5.Is Kinematic(是否受牛顿运动学影响): false,正常的物理计算,true运动只会在代码和动画里面受影响,普通的碰撞等都不会改变它的运动状态;
6.Interpotate: (物体运动插值模式) None(最近计算值) Interpolate(内插值) extrapolate(外插值)
7.Collision Detection:Discrete(离散模式 资源少,静止,低速,普通物体) Continuous(连续检测,高速体积小,子弹)。被使用了Continusous检测撞击的对象(被子弹撞击的物体),使用Continus Dynamic模式;
子弹发射碰撞物体,在两个update之间,时间dt范围之内,使用Discrete,子弹会偶然穿过物体,且显示没有发生碰撞,Continuous会判断初始和穿过之后这段距离之间有没有发生碰撞,有就吧子弹还原到撞到物体表面的状态,子弹不会穿过物体。

  Discrete优点运行速度快,性能消耗小,缺点有穿透。

  Continuous优点不会穿透,缺点运行速度慢,性能消耗大。

  Continus Dynamic搭配Continuous,提升仿真效果。

8.Constraints(约束):哪个坐标轴打钩哪个就不会改变,位置和旋转,都可以设置。

刚体变量

1: 角速度(angularVelocity);
2: 线性速度(velocity);
3: 重心(center of mass)
4: 碰撞检测开关(detectCollisions): 默认为true, 关闭检测碰撞 false;
5: intertiaTensor惯性张量 intertiaTensorRotation 惯性张量旋转;
6: 最大角速度(maxAngularVelocity);
7: 最大穿透速度(maxDepenetrationVelocity)
8: position:刚体的世界坐标,与图像的transform.position尽量保持一致。因为是刚体带动图像在运动,所以刚体先动,然后图像才动,所以两者坐标大致相同。
9: rotation: 刚体在世界坐标的旋转,与图像的transform.rotation也是尽量保持一致。
10: useConeFiction是否使用锥形摩擦,一般false; true一般不使用;

创建一个ball的脚本,挂载在Sphere球体下面。ball脚本的内容:

   Rigidbody body;// Use this for initializationvoid Start () {this.body = this.GetComponent<Rigidbody>();Debug.Log(this.body.angularVelocity); // 角速度Debug.Log(this.body.velocity); // 线性速度;Debug.Log(this.body.centerOfMass); //重心;// 关闭了以后就不会有碰撞,这个球就会穿透这个平面// this.body.detectCollisions = false; // transform.position 也会有一个坐标大致相等。Debug.Log(this.body.position); // 刚体所在的世界坐标Debug.Log(this.body.rotation); // 刚体的旋转}

刚体常用方法

F *T=冲量变化=MV1-MV0

F:力的大小和方向

T:力的作用时间

当V0为0时,F *T=MV

世界坐标就是Scene视图右上角那个坐标系的坐标,和物体自身的模型坐标系没有关系。

Mesh Colllider网格碰撞器不能直接加刚体组件Rigidbody,会报错。因为整个plane都会往下掉,触发打钩刚体属性中的is Kinematic才没事。

ball脚本里面的补充

  Rigidbody body;
  void Start () {this.body = this.GetComponent<Rigidbody>();// 力的方向,世界坐标方向上的力。// f * t = m * (v1 - v0) t = 0.02f;//瞬间作用力// this.body.AddForce(Vector3.up * this.body.mass * 10 * 20, ForceMode.Force);// f * t = 1.0f * (v1-v0); t = 0.02f;// this.body.AddForce(Vector3.up * this.body.mass * 20, ForceMode.Acceleration);// f * t = m * (v1-v0); t = 1.0f;//持续作用力// this.body.AddForce(Vector3.up * this.body.mass * 20, ForceMode.Impulse);//  f•1.0=1.0•v(VelocityChange)// this.body.AddForce(Vector3.up * this.body.mass * 20, ForceMode.VelocityChange);// postion世界坐标,保证在刚体内部,世界坐标的力,篮球在空中挑一下转起来,点力// this.body.AddForceAtPosition(Vector3.up * this.body.mass * 20, new Vector3(-0.4f, 2.99f, 0), ForceMode.Impulse);// 相对与模型的坐标方向的力;篮球在空中挑一下转起来// this.body.AddRelativeForce(Vector3.up * this.body.mass * 20, ForceMode.Impulse);// 力矩// this.body.AddTorque(Vector3.right * 10);//杠杆,模型绕着世界的X轴旋转// this.body.AddRelativeTorque(Vector3.right * 10);//模型绕着自身的X轴旋转
}

我觉得力分为

a.瞬间作用力

b.持续作用力

c:点力(空中挑一下篮球的某个点)

d:力矩(绕某个轴旋转)

物理管理器

1:Gravity 重力,设置重力的大小和方向;

2: Default Material:为每个物体给一个默认的物理材质;

3: Bounce Threshold 反弹阈值,低于这个不进行反弹计算;

4: SleepThreshold 休眠阈值能量低于这个阈值休眠 E = (sqrt(v) + sqrt(A)) * 0.5,休眠就是刚体休眠,如果两个物体碰撞到一起,等能量用完了就不会去调用OnCollisionStay函数了

5: Default Contact offset默认接触偏差,低于该值认为刚体已经接触必须>0;

6: Solver Iteration Count关节和连接迭代次数;

7: Raycasts Hit Triggers 射线是否命中触发器, true检测命中, false忽略触发器;

8:Enable Adaptive Force 允许自适应力 修正模拟运动状态的数值偏差;

8: 碰撞矩阵,配置层级间的碰撞关系,哪些层之间会发生碰撞检测,哪些层之间什么都不会发生;

物理形状/碰撞器

is Trigger打钩之后,只进行碰撞检测,不进行物理运算,也就是没有物理效果。

1:Box Collider 盒子碰撞器;
2: Sphere Collider 球体碰撞器
3: Capsule Collider 胶囊碰撞器;
4: Mesh Collider 网格碰撞器;
5: Terrian Collider 地形碰撞器;
6: Wheel Collider车轮碰撞器;

物理材质

是添加在碰撞器的属性里面,create-->Phsic Material,创建好材质后,关联到球的Collider上面,这样球掉下来的时候就会弹起来

1:每种物体的弹力,摩擦力等物理参数可能不一样,unity使用物理材质来描述它们;
2:Dynamic Friction 滑动摩擦
3: Static Firction 静态摩擦
4: Bounciness 表面弹性;
5: Friction Combine 摩擦力的混合方式
6: Bounciness Combine 弹力的混合方式;,Average就是每次弹完就取平均值,慢慢停下来

注意:

Is Kinematic是刚体组件的属性,勾选时物体不会受物理碰撞的影响,没有碰撞效果,但是会调用碰撞函数OnCollisionEnter等。只有两个都设置Is Kinematic的刚体之间会发生穿透现象,只有其中一个Is Kinematic则不会穿透

is trigger是碰撞器组件的属性,勾选时物体不会受物理碰撞的影响,变得透明,但是会调用触发器函数OnTriggerEnter等

转载于:https://www.cnblogs.com/HangZhe/p/7207571.html

关于Unity中的刚体和碰撞器的相关用法(一)相关推荐

  1. 关于Unity中的Mesh Collider碰撞器

    原来我的场景中有一个平面Plane带Mesh Collider碰撞器组件,一个主角Hero带有一个Box Collider碰撞器和有重力的Rigidbody刚体组件,主角可以放在平面上. 在导入场景后 ...

  2. Unity 2.Space Shooter(碰撞器Collider,WebGL,刚体中属性,(定时)实例化、销毁游戏对象,触碰OnTriggerEnter/Exit,爆炸效果,音频,文字,定时调方法)

    目录 项目介绍 WebGL发布 游戏对象设置 灯光.相机 背景 移动游戏对象 Debug 制作子弹 射击动作 清理离开边界的游戏对象 制作危险物 添加爆炸,移动小行星,作为预制件 创建游戏控制器 循环 ...

  3. Unity学习日志_车轮碰撞器简介

    Unity学习日志_车轮碰撞器简介 1. 简介: 车轮碰撞器是一种针对地面车辆的特殊碰撞体.他有内置的碰撞检测.车轮物理系统和有滑胎摩擦的参考体.除了车轮,该碰撞体也可以用于其他游戏对象. 属性: M ...

  4. Java中unicode增补字符(辅助平面)相关用法简介

    转载自 http://blog.csdn.net/gjb724332682/article/details/51324036 前言 Java从1.5版本开始,加入了unicode辅助平面的支持.相关的 ...

  5. Unity --- 物理引擎 ---- 刚体RigidBody 与 碰撞器 collider

    1.RigidBody(刚体)的作用是让物体具有物理特性(比如说重力,摩檫力等等) 2.如果想让物体能够与其它物体发生碰撞的话,我们还需要一个组件 --- Colider碰撞器组件 1.上图就是Uni ...

  6. 详解Unity中的粒子系统Particle System (七)

    前言 本篇来讲一讲Collision和Triggers模块,这两个模块主要用于粒子系统与物理世界的交互,一个是碰撞器,另一个是触发器.有了这两个模块我们又可以做出更炫酷的粒子效果啦! 目录 前言 本系 ...

  7. unity第三天:物体的碰撞器与触发器

    unity第三天:碰撞器与触发器 前言 一.吃豆球的豆 二.吃豆球 三.又是豆 前言 15:06- 很好, 又是一个下午开始的博客-- Code Start! 一.吃豆球的豆 在新建一个cube,命名 ...

  8. Unity中的一些重要函数和类的解析

    下面的这些函数在Unity3d程序开发中具有很重要的作用. Update 当MonoBehaviour启用时,其Update在每一帧被调用. LateUpdate 当Behaviour启用时,其Lat ...

  9. Unity中的射线检测

    using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson23 ...

最新文章

  1. JS改变input的value值不触发onchange事件解决方案 (转)
  2. Linux python impala/sasl/thrift-sasl command not found
  3. 在进度面前,质量该不该打折?
  4. web上传图片的几种方法!
  5. 【语言处理与Python】2.5WordNet
  6. 深度学习笔记(35) 滑动窗口的卷积实现
  7. php7 mcrypt模块_如何在php7.2/php7.3中安装mcrypt扩展?
  8. IBM连续20个季度营收下滑,但这可能是个好信号
  9. Codeforces 439E Devu and Birthday Celebration 容斥
  10. vb html转义字符,在VB中用什么转义字符表示双引号
  11. 灰度世界 matlab,灰度世界算法(Gray World Algorithm)和White Patch Retinex算法
  12. 地球上最长的两座山脉:一座4800公里,一座8900公里
  13. 计算机网络协议(三)——UDP、TCP、Socket
  14. GitChat,一个记录技术和躺着赚零花钱的免费平台
  15. PD快充方案:极具性价比的苹果iphone12 PD20W快充方案来了!
  16. 怎么给word插入页码,详细图文教学,轻松学会
  17. 华为注册“鸿蒙”商标为自研操作系统铺路,或已经用于华为设备中。
  18. 一份超详细的网站推广优化方案
  19. linux添加mx25l25645g,stm32驱动NOR Flash 之MX25L51245G(64MB)
  20. 4-黑马旅游网-分页展示

热门文章

  1. 编写一个可在android手机上运行的jar包
  2. MySQL 日期时间类型怎么选?千万不要乱用!
  3. Spring Boot 发邮件和附件,超实用!
  4. 为什么 Kafka 速度那么快?
  5. 如何写一个清晰明了的Bug
  6. 如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数
  7. 数据库:悲观锁与乐观锁
  8. 2.LRU算法实现 [C++]
  9. 鸿蒙发布的意义,华为鸿蒙正式发布!“鸿蒙”是什么意思?
  10. java 反射set方法赋值_反射 根据属性名获得属性set方法并为set方法赋值