关于Unity中物理引擎的使用
物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态
物理世界计算刚体的运行状态,通过贴图显现出运算结果。
一、物理引擎
1:Unity 2D物理引擎基于Box2D封装而成;
2: 物理引擎模拟物理运动和计算,物理引擎帮助我们计算物体运动; 
3: 重力加速度;
4: 碰撞器是物体的形状 + 碰撞的物理参数(物理材质);
5: 刚体控制物体运动和受力;
二、步骤
1.创建一个Canvas
2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率640X960
3.创建一个Image的UI节点作为Canvas的子节点,名字叫bg,拖进背景图片到这个节点中。
4.创建一个Image的UI节点叫做item的子节点,颜色设置为红色
5.给item节点添加一个Rigidbody 2D的组件,有这个组件后再运行,就会发现这个item节点往下掉
6.Rigidbody 2D的组件的物理参数设置:
UseAutoMass/Mass:根据密度*面积自动计算出来,刚体质量。
     Linear Drag: 线性阻尼,空气阻力等。
     Angular Drag: 旋转阻尼,旋转阻力。
     Gravity Scale: 重力缩放因子,1就是地球上的重力,0.6就是月球上的重力。
Is Kinematic: 静态刚体和动态刚体,静态刚体不能动,动态刚体可以动。
     Sleep Mode模式: 刚体休眠模式。平时:刚体不受任何外力的情况下默认是进入休眠状态,不会参与运算,Never Sleep永不休眠,而默认是Start Awake,唤醒时启动。
     Collistion DetectionMode: 刚体碰撞检测的模式(连续型检测/离散型检测)。Discrete离散,Continues连续。
注意:像子弹这种的刚体,Collistion DetectionMode运动模式要选择Continues连续,这样才不会因为速度太快,Update时间间隔太短而导致子弹穿透其他刚体,机制是判断运动期间是否碰撞某个刚体,如果有,就把状态拨回到两者碰撞前的状态,造成撞墙的效果。
其他情况下默认选择Discrete离散。
7.只是加一个Rigidbody 2D的组件叫刚体,刚体是没有任何形状的。没有形状的刚体之间是不会产生碰撞效果的,会直接穿过去,像幽灵一样。两个物体想要实现碰撞效果,必须都有Box Collider 2D组件,其中任何一个没有Collider 2D组件都不行,都会直接穿过。
只有Collider 2D组件,没有Rigidbody 2D组件也是不行的,会相当于一个不受力的静止的物体,但是会和有Collider 2D组有碰撞效果产生。
我们需要再加一个组件叫做Box Collider 2D(矩形碰撞器),用来表示刚体的形状,其实还有圆形碰撞器Circle Collider 2D等等各种碰撞器。
绿色方框就是碰撞检测的有效区域。在Box Collider 2D组件的Size属性(半径radius)里面调整大小,一般设置成和图片大小一样的大小。
边界碰撞器
Edge Collider 2D,可以给背景节点bg添加,这样里面的所有物体就不会跑出这个背景。四条边的顶点坐标自己手动输入划分。勾勒出一个长方体的形状,以点连线,一般要5个点,第一个和最后一个点的坐标一样。边界会随着节点的缩放而缩放。
可以设置物理材质的弹性,这样其他物体碰撞到的时候会反弹。
多边形碰撞器
Polygon Collider 2D,也是通过输入坐标来使得形状按照坐标的顺序勾勒出来,形成多边形。
注意:一个刚体节点可以带多个不同的碰撞器,但是记得设置offset区分开来。
Box Collider 2D的物理参数设置:
Material:材质,表示碰撞物体表面的材质,物理材质就是下雨天的地面和水泥地地面的区别
Is trigger:是否仅作为触发器,当这个属性打钩的时候,那么其他刚体碰撞到它的时候,只会触发碰撞事件,不会有碰撞效果产生,就是说系统检测到碰撞,但是不在画面上显示碰撞的过程,会直接穿过去。可以把一些通过的传送门,金币的Is trigger打钩,
这样就可以达到我们想要的效果,就是有碰撞事件发生,但是没有碰撞的画面效果。
补充:
创建物理材质
右键-->create--> Physics2D Material,物理材质有两个属性,Bounciness弹力和Friction摩擦力。
创建好物理材质后,需要拖到对应的Box Collider 2D组件的Material属性中,Bounciness弹力为0.5就可以看出碰撞后物体会反弹一段时间
关于Unity中物理引擎的使用的更多相关文章
- Unity的物理引擎是如何实现碰撞的呢?
		物理引擎不允许两个碰撞器重叠,当两个或多个物体碰撞时,Unity会根 据他们的旋转速度计算碰撞效果.计算主要根据物体的碰撞器是静止的还 是动态的.物体是不移动的,例如,墙,地面,院子里的喷池等.动态物 ... 
- Unity入门&物理引擎
		一.Unity六大模块 首先,Unity界面有六大模块,分别是:Hierarchy,Scene,Game,Inspector,Project,Console.下面对这六个视图的功能进行详解. 1.Hi ... 
- 关于Unity中物理检测的准备
		1.要确定每个物体的碰撞类型,是有碰撞效果的碰撞还是没有碰撞效果的碰撞(is trigger),带不带刚体. 2.给每个物体分层,再设置哪些层会发生碰撞,哪些完全不产生碰撞. 3.给每个物体设置标记, ... 
- Unity3D游戏开发初探—3.初步了解U3D物理引擎
		一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ... 
- Unity3D笔记三 物理引擎
		一.物理引擎 1.物理引擎就是模拟真实世界中物体碰撞.跌落等反应,通过Ballance.愤怒的小鸟来理解什么是物理引擎.Unity的物理引擎使用的是NviDIA的PhysX.2.选中一个游戏对象,主菜 ... 
- Unity 物理引擎动力学关节
		Unity物理引擎中的各个动力学关节 Hinge Joint (铰链关节) Fixed Joint (固定关节) Spring Joint (弹簧关节) Character Joint(角色关节) C ... 
- 游戏的物理和数学:Unity中的弹道和移动目标提前量计算
		下载地址:https://www.jianguoyun.com/p/DZPN6ocQ2siRBhihnx8 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺 ... 
- 【Unity 3D】学习笔记三十六:物理引擎——刚体
		物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ... 
- Bullet物理引擎在OpenGL中的应用
		Bullet物理引擎在OpenGL中的应用 在开发OpenGL的应用之时, 难免要遇到使用物理来模拟OpenGL中的场景内容. 由于OpenGL仅仅是一个关于图形的开发接口, 因此需要通过第三方库来实 ... 
随机推荐
- OAF_OAF控件系列4 - HGrid的实现(案列)
			2014-06-02 Created By BaoXinjian 
- .Net程序猿玩转Android开发---(11)页面跳转
			在不论什么程序开发中,都会遇到页面之间跳转的情况,Android开发也不例外.这一节,我们来认识下Android项目中如何进行页面跳转.页面跳转分为有參数和无參数页面跳转,已经接受还有一个页面的返回值 ... 
- 上传一个 游戏server架构图
- Sql Server添加单引号
			" ' "(单引号)的运用:在sql server中,两个" ' "(单引号)在拼接字符串的情况下运用,就是表示拼接上了一个" ' "单引号 ... 
- MongoDB索引原理
			转自:http://www.mongoing.com/archives/2797 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下M ... 
- php导出excel(xls或xlsx)
			$titles = array('订单号','商品结算码','合同号','供应商名称','专柜','商品名称','商品货号','商品单价','商品总价','供应商结算金额','商品数量','商品促销优 ... 
- unity3d prefab
			用prefab创建的实例,其position/rotation/scale并不会随prefab的position/rotation/scale修改而更新,其它属性才会. 不过如果prefab的某个实例 ... 
- 怎么样快速完整备份和压缩 很大的 sqlserver 1TB 数据库 -摘自网络
			How to increase SQL Database Full Backup speed using compression and Solid State Disks The SQL 2008 ... 
- vim-snipmate编写snippet的语法
			vim-snipmate真的很好用,以前好多编写代码的问题得到完美的解决.还附带提升我对vim的理解和信心,在这里感谢一下作者.thank you. 1.现说一下我浓缩的重要语法. 1.定义是下面这样 ... 
- HDU 4670 Cube number on a tree ( 树的点分治 )
			题意 : 给你一棵树 . 树的每一个结点都有一个权值 . 问你有多少条路径权值的乘积是一个全然立方数 . 题目中给了你 K 个素数 ( K <= 30 ) , 全部权值都能分解成这k个素数 思路 ... 
