Unity3D游戏开发标准教程第04章-物理引擎课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Unity3D游戏开发标准教程第04章-物理引擎课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Unity3D 游戏 开发 标准 教程 04 物理 引擎 课件
- 资源描述:
-
1、 第1页4.1.1 刚体特性1. 刚体属性刚体属性如果需要为游戏中的物体赋予真实的物理效果,就如果需要为游戏中的物体赋予真实的物理效果,就需要为其添加需要为其添加Rigidbody刚体组件,添加完成后可刚体组件,添加完成后可以在属性查看器面板中看到刚体组件的设置面板以在属性查看器面板中看到刚体组件的设置面板 。第2页(1)质量()质量(Mass)该属性用来设定刚体的质量,如果将质量设置为该属性用来设定刚体的质量,如果将质量设置为1,那么只,那么只需要给这个物体一个向上的需要给这个物体一个向上的9.8N的力便可抵消重力。的力便可抵消重力。 (2)阻力()阻力(Drag)Drag参数默认为参数默认
2、为0,即没有阻力,阻力的方向与物体运动方,即没有阻力,阻力的方向与物体运动方向相反,用来阻碍物体的运动。向相反,用来阻碍物体的运动。 (3)旋转阻力()旋转阻力(Angular Drag)旋转阻力的方向与物体的旋转方向相反用来阻碍物体的旋转旋转阻力的方向与物体的旋转方向相反用来阻碍物体的旋转运动,默认值为运动,默认值为0.05。设置了旋转阻力大小之后,物体在任。设置了旋转阻力大小之后,物体在任何方向上的旋转运动都将会受到影响。何方向上的旋转运动都将会受到影响。 第3页(4)使用重力()使用重力(Use Gravity)该属性用来设定是否需要在刚体上施加重力。用来该属性用来设定是否需要在刚体上施
3、加重力。用来模拟现实世界中的自由落体状态等等模拟现实世界中的自由落体状态等等 。 (5)是否遵循运动学()是否遵循运动学(Is Kinematic)该属性用来设置刚体是否遵循牛顿的物理学运动定该属性用来设置刚体是否遵循牛顿的物理学运动定律。如果勾选它,则表示该物体将不会调用物理计律。如果勾选它,则表示该物体将不会调用物理计算,只受脚本和动画的影响而运动,作用力、关节算,只受脚本和动画的影响而运动,作用力、关节和碰撞都不会对其产生任何作用。和碰撞都不会对其产生任何作用。 (6)插值()插值(Interpolate)插值是获取近似当前渲染时间点数据的一种手段插值是获取近似当前渲染时间点数据的一种手
4、段 第4页(7)碰撞检测()碰撞检测(Collision Detection)刚 体 组 件 默 认 使 用 占 用 资 源 较 少 的 离 散 模 式刚 体 组 件 默 认 使 用 占 用 资 源 较 少 的 离 散 模 式(Disctete),一般用于静止或运动速度较慢的物),一般用于静止或运动速度较慢的物体,而对于高速运动或体积较小的物体建议使用连体,而对于高速运动或体积较小的物体建议使用连续模式(续模式(Continuous),被使用了连续检测模式的),被使用了连续检测模式的物体所撞击的物体,则应该使用动态连续模式物体所撞击的物体,则应该使用动态连续模式(Continuous Dyna
5、mic)。)。(8)限制条件()限制条件(Constraints)限制条件用来设置物体在哪一个方向上运动或旋转限制条件用来设置物体在哪一个方向上运动或旋转将受到的限制。默认情况下,物体的运动和旋转在将受到的限制。默认情况下,物体的运动和旋转在各个方向上都不会受到限制。各个方向上都不会受到限制。 第5页4.1.1 刚体特性2. 常用方法常用方法(1)AddForce函数函数AddForce函数用来对刚体施加一个指定方向的力,函数用来对刚体施加一个指定方向的力,作用于刚体使其发生移动。作用于刚体使其发生移动。 1 function AddForce (force : Vector3, mode :
6、 ForceMode = ForceMode.Force) : void2 function AddForce (x : float, y : float, z : float, mode : ForceMode = ForceMode.Force) : void第6页4.1.1 刚体特性2. 常用方法常用方法(2)MovePosition函数函数MovePosition函数用来将刚体移动到函数用来将刚体移动到position位置。位置。 1 function MovePosition (position : Vector3) : void(3)MoveRotation函数函数MoveRota
7、tion函数用来刚体旋转到函数用来刚体旋转到rot。rot为为Quaternion(四元数)会返回刚体需要旋转的角度。(四元数)会返回刚体需要旋转的角度。 1 function MoveRotation (rot : Quaternion) : void第7页4.1.1 刚体特性3. 案例效果第8页4.1.1 刚体特性4. 代码讲解1 using UnityEngine;2 using System.Collections;3 public class Demo : MonoBehaviour 4 public float force; /声明float类型变量,设置施加在物体上的力的大小5
8、public float speed; /物体移动的速度第4-5行声明两个float类型变量,分别设置对物体施加的力的大小以及移动的速度。由于为public类型,所以能够在Inspector面板处直接进行修改。第9页4.1.1 刚体特性4. 代码讲解6 private bool ForceMode_Force; /布尔类型的变量,判断当前是否对物体施加恒力7 private bool CubeMovePosition; /判断当前是否移动物体8 private bool CubeMoveRotation; /判断当前是否旋转物体第6-8行声明了三个布尔类型的变量分别用来判断是否对当前的物体施加
9、力或者使其发生平移、旋转。第10页4.1.1 刚体特性4. 代码讲解9 private Vector3 eulerAngleVelocity = 10 new Vector3(0, 100, 0); /声明三维向量,用来设置物体绕那个轴旋转11 private Vector3 cubePosition;/用来存储物体的位置12 private Quaternion cubeRotation; /声明四元数变量,存储物体当前的旋转状态第9-12行声明了两个三维向量和一个四元数,两个三维向量分别用来指定物体旋转的旋转轴与储存物体的初始位置坐标,四元数用来存储物体初始的旋转状态,用于物体的复位。 第
10、11页4.1.1 刚体特性4. 代码讲解13 void Awake() /重写Awake函数,当脚本加载时被调用14 cubePosition=this.transform.position; /记录物体初始的位置15 cubeRotation = this.transform.rotation; /记录物体初始的旋转状态16 第13-16行通过使用Awake函数,该函数在脚本被加载时调用,用来存储物体的位置与旋转状态。第12页4.1.1 刚体特性4. 代码讲解17 void FixedUpdate() 18 if (ForceMode_Force) /如果点击施加恒力按钮,就对物体施加向右的
11、恒力19 this.GetComponent().AddForce(Vector3.right * force, ForceMode.Force);20 第18-20行首先判断ForceMode_Force变量的值,如果为false就不执行,如果为true就通过 AddForce函数对物体施加一个水平向右,力度大小为force的恒力。第13页4.1.1 刚体特性4. 代码讲解21 if (CubeMovePosition) /如果点击移动物体按钮,就使物体向右移动22 this.GetComponent().MovePosition23 (this.transform.position+Vec
12、tor3.right*speed*Time.deltaTime);24 第21-24行首先判断CubeMovePosition变量的值,如果为false就不执行,如果为true就通过MovePosition函数将物体向右移动。第14页4.1.1 刚体特性4. 代码讲解25 if (CubeMoveRotation) /如果点击旋转物体按钮,就使物体旋转26 Quaternion deltaRotation = Quaternion.Euler(eulerAngleVelocity * Time.deltaTime);27 this.GetComponent().MoveRotation(thi
13、s.transform.rotation*deltaRotation);28 第25-28行首先判断CubeMoveRotation变量的值,如果为false就不执行,如果为true就声明一个四元数变量deltaRotation,用来记录每一帧物体的欧拉角,然后通过MoveRotation将该四元数的数值赋给物体,形成旋转的效果。第15页4.1.1 刚体特性4. 代码讲解30 GUI.BeginGroup(new Rect(Screen.width / 12,31 Screen.height / 1.56f, 600, 150); /在指定的位置创建Group控件32 GUI.Box(new
14、Rect(0, 0, 600, 150), ); /在其中创建一个Box控件33 if (GUI.Button(new Rect(39, 42, 130, 80), 施加爆炸力) /创建Button控件34 this.GetComponent().AddForce35 (Vector3.right * force, ForceMode.Impulse); /当点击时对物体施加爆炸力36 第30-32行通过GUI系统,创建一个Group控件和Box控件。第33-36行首先创建一个Button控件,当该控件被点击时就用AddForce函数对物体施加一个水平向右,大小为force的爆炸力。第16页4
15、.1.1 刚体特性4. 代码讲解37 if (GUI.Button(new Rect(172, 42, 130, 80), 施加恒力) 38 ForceMode_Force = !ForceMode_Force; /当点击时就将ForceMode_Force置反39 40 if (GUI.Button(new Rect(305, 42, 130, 80), 移动方块) 41 CubeMovePosition = !CubeMovePosition;/当点击时就将CubeMovePosition置反42 43 if (GUI.Button(new Rect(438, 42, 130, 80),
16、旋转方块) 44 CubeMoveRotation = !CubeMoveRotation; /当点击时就将CubeMoveRotation置反45 第37-45行创建了三个Button控件,分别用来控制对物体施加恒力、物体移动和物体旋转的布尔变量,通过连续点击同一个Button可以开启或关闭效果。第17页4.1.1 刚体特性4. 代码讲解47 if (GUI.Button(new Rect(0, 0, 100 , 80), 重置方块) /创建一个重置按钮,将物体复位48 this.GetComponent49 ().isKinematic = true; /使其不遵循物理学定律,消除物体的旋
17、转、平移的状态50 this.GetComponent51 ().isKinematic = false; /使其遵循定律,使Rigidbody得函数能够影响到物体52 this.transform.position=cubePosition; /将物体的位置修改为初始位置53 this.transform.rotation = cubeRotation; /将物体的旋转状态修改为初始状态第47-53行首先通过将刚体的Is Kinematic属性置为false使物体不会再受到物理效果的影响,也可以理解为停止下落、旋转和移动。然后再将Is Kinematic属性置为true,使物体能够受到刚体组
18、件的影响。最后将物体的位置,旋转状态都设置为初始参数,使其复位。第18页4.1.2物理管理器物理管理器 1. 物理管理器界面物理管理器界面可以通过点击菜单栏中的EditProject SettingsPhysics来打开物理管理器 第19页4.1.2物理管理器物理管理器 2. 物理管理器变量物理管理器变量(1)Gravity(重力)(重力)在在Unity中默认的重力的方向为中默认的重力的方向为Y轴的负方向,大小为轴的负方向,大小为9.81N。(2)Default Material(默认材质)(默认材质)全局管理器中默认没有使用任何物理材质,在其中开全局管理器中默认没有使用任何物理材质,在其中开
19、发人员可以为其添加物理材质。发人员可以为其添加物理材质。 第20页4.1.2物理管理器物理管理器 2. 物理管理器变量物理管理器变量(3)Bounce Threshold(反弹阈值)(反弹阈值)在两个相互碰撞的刚体间的相对速度小于阈值时,就不会再进在两个相互碰撞的刚体间的相对速度小于阈值时,就不会再进行反弹计算,这样会有效的减少模拟物理过程中物体的抖动与行反弹计算,这样会有效的减少模拟物理过程中物体的抖动与物理计算。物理计算。 (4)Raycasts Hit Triggers(射线检测触发器)(射线检测触发器)Unity集成开发环境的物理引擎中集成开发环境的物理引擎中3D射线拾取功能需要和碰撞
20、射线拾取功能需要和碰撞器相互配合使用,即射线命中碰撞器之后会返回命中信息,被器相互配合使用,即射线命中碰撞器之后会返回命中信息,被开发人员捕获后可以实现特定的功能。开发人员捕获后可以实现特定的功能。 第21页4.1.2物理管理器物理管理器 2. 物理管理器变量物理管理器变量(5)Layer Collision Matrix(层碰撞矩阵)(层碰撞矩阵)Unity集成开发环境中可开发人员可以对场景中的物集成开发环境中可开发人员可以对场景中的物体进行分层,将不同功能或类型的物体区分开来。在体进行分层,将不同功能或类型的物体区分开来。在物理管理器中,可以使用层碰撞矩阵来设置不同层的物理管理器中,可以使
21、用层碰撞矩阵来设置不同层的物体间的碰撞计算。两个层的交叉处就是设置碰撞检物体间的碰撞计算。两个层的交叉处就是设置碰撞检测的标志位。测的标志位。 第22页4.2.1 碰撞器的添加1. 基础知识Unity中内置了六种碰撞器,分别是盒子碰撞器、球中内置了六种碰撞器,分别是盒子碰撞器、球体碰撞器、胶囊碰撞器、网格碰撞器、车轮碰撞器以体碰撞器、胶囊碰撞器、网格碰撞器、车轮碰撞器以及地形碰撞器。及地形碰撞器。因为因为Unity并未限制同一物体上挂载碰撞器的数量,并未限制同一物体上挂载碰撞器的数量,若碰上不规则物体读者可以将这几种碰撞器组合使用。若碰上不规则物体读者可以将这几种碰撞器组合使用。 第23页4.
22、2.1 碰撞器的添加1. 基础知识(1)盒子碰撞器()盒子碰撞器(Box Collider)盒子碰撞器是一种基本方形碰撞器的原型,可以调整盒子碰撞器是一种基本方形碰撞器的原型,可以调整成不同大小的长方体。成不同大小的长方体。(2)球体碰撞器()球体碰撞器(Sphere Collider)球体碰撞器是一种基本球形碰撞器的原型,在三维方球体碰撞器是一种基本球形碰撞器的原型,在三维方向均可以调整大小但是不能单独调整某一维。向均可以调整大小但是不能单独调整某一维。 第24页4.2.1 碰撞器的添加1. 基础知识(3)胶囊碰撞器()胶囊碰撞器(Capsule Collider)胶囊碰撞器是类似胶囊形状的
23、碰撞器,由一个圆柱体胶囊碰撞器是类似胶囊形状的碰撞器,由一个圆柱体和两个上下的半球组成。和两个上下的半球组成。 (4)网格碰撞器()网格碰撞器(Mesh Collider)网格碰撞器是一种在物体网格资源上构建的碰撞器,网格碰撞器是一种在物体网格资源上构建的碰撞器,用于对复杂网状模型物体的检测。用于对复杂网状模型物体的检测。 第25页4.2.1 碰撞器的添加1. 基础知识(5)车轮碰撞器()车轮碰撞器(Wheel Collider)车轮碰撞器是一种特殊的碰撞器,该碰撞器包含碰撞车轮碰撞器是一种特殊的碰撞器,该碰撞器包含碰撞检测、车轮物理引擎和基于滑动的轮胎摩擦模型检测、车轮物理引擎和基于滑动的轮
24、胎摩擦模型(6)地形碰撞器()地形碰撞器(Terrain Collider)地形碰撞器是主要作用于地形的碰撞器。用于检测地地形碰撞器是主要作用于地形的碰撞器。用于检测地形和地形上物体对象的碰撞,防止地形上加有刚体属形和地形上物体对象的碰撞,防止地形上加有刚体属性的物体无限制下落。性的物体无限制下落。 第26页4.2.1 碰撞器的添加1. 基础知识 碰撞器的参数列表 参数名含义参数名含义Is Trigger如果启用,此碰撞体 (Collider) 则用于触发事件,会由物理引擎忽略。Material引用可确定此碰撞体与其他碰撞体 (Collider) 的交互方式的物理材质。Size碰撞器在xyz轴
25、上的尺寸content碰撞器在本地对象的位置Radius球体碰撞器的半径大小Height胶囊碰撞器圆柱体的高度第27页4.2.1 碰撞器的添加2案例效果案例效果第28页4.2.1 碰撞器的添加3. 开发流程开发流程(1)打开)打开Unity集成开发环境,在集成开发环境,在Assets目录目录下新建一名为下新建一名为Texture的文件夹,并将的文件夹,并将Diban.jpg和和bg01.jpg导入该文件夹,分别作为地板和胶囊导入该文件夹,分别作为地板和胶囊的纹理图。点击的纹理图。点击GameObject3D ObjectPlane菜单创建一个地板,赋上纹理图。菜单创建一个地板,赋上纹理图。(2
展开阅读全文