Unity教学课件: 第04章 物理引擎_第1页
Unity教学课件: 第04章 物理引擎_第2页
Unity教学课件: 第04章 物理引擎_第3页
Unity教学课件: 第04章 物理引擎_第4页
Unity教学课件: 第04章 物理引擎_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1页 第2页 4.1.1 刚体特性 1. 刚体属性刚体属性 如果需要为游戏中的物体赋予真实的物理效果,就如果需要为游戏中的物体赋予真实的物理效果,就 需要为其添加需要为其添加Rigidbody刚体组件,添加完成后可刚体组件,添加完成后可 以在属性查看器面板中看到刚体组件的设置面板以在属性查看器面板中看到刚体组件的设置面板 。 第3页 (1)质量()质量(Mass) 该属性用来设定刚体的质量,如果将质量设置为该属性用来设定刚体的质量,如果将质量设置为1,那么只,那么只 需要给这个物体一个向上的需要给这个物体一个向上的9.8N的力便可抵消重力。的力便可抵消重力。 (2)阻力()阻力(Drag)

2、Drag参数默认为参数默认为0,即没有阻力,阻力的方向与物体运动方,即没有阻力,阻力的方向与物体运动方 向相反,用来阻碍物体的运动。向相反,用来阻碍物体的运动。 (3)旋转阻力()旋转阻力(Angular Drag) 旋转阻力的方向与物体的旋转方向相反用来阻碍物体的旋转旋转阻力的方向与物体的旋转方向相反用来阻碍物体的旋转 运动,默认值为运动,默认值为0.05。设置了旋转阻力大小之后,物体在任。设置了旋转阻力大小之后,物体在任 何方向上的旋转运动都将会受到影响。何方向上的旋转运动都将会受到影响。 第4页 (4)使用重力()使用重力(Use Gravity) 该属性用来设定是否需要在刚体上施加重力

3、。用来该属性用来设定是否需要在刚体上施加重力。用来 模拟现实世界中的自由落体状态等等模拟现实世界中的自由落体状态等等 。 (5)是否遵循运动学()是否遵循运动学(Is Kinematic) 该属性用来设置刚体是否遵循牛顿的物理学运动定该属性用来设置刚体是否遵循牛顿的物理学运动定 律。如果勾选它,则表示该物体将不会调用物理计律。如果勾选它,则表示该物体将不会调用物理计 算,只受脚本和动画的影响而运动,作用力、关节算,只受脚本和动画的影响而运动,作用力、关节 和碰撞都不会对其产生任何作用。和碰撞都不会对其产生任何作用。 (6)插值()插值(Interpolate) 插值是获取近似当前渲染时间点数据

4、的一种手段插值是获取近似当前渲染时间点数据的一种手段 第5页 (7)碰撞检测()碰撞检测(Collision Detection) 刚 体 组 件 默 认 使 用 占 用 资 源 较 少 的 离 散 模 式刚 体 组 件 默 认 使 用 占 用 资 源 较 少 的 离 散 模 式 (Disctete),一般用于静止或运动速度较慢的物),一般用于静止或运动速度较慢的物 体,而对于高速运动或体积较小的物体建议使用连体,而对于高速运动或体积较小的物体建议使用连 续模式(续模式(Continuous),被使用了连续检测模式的),被使用了连续检测模式的 物体所撞击的物体,则应该使用动态连续模式物体所撞击

5、的物体,则应该使用动态连续模式 (Continuous Dynamic)。)。 (8)限制条件()限制条件(Constraints) 限制条件用来设置物体在哪一个方向上运动或旋转限制条件用来设置物体在哪一个方向上运动或旋转 将受到的限制。默认情况下,物体的运动和旋转在将受到的限制。默认情况下,物体的运动和旋转在 各个方向上都不会受到限制。各个方向上都不会受到限制。 第6页 4.1.1 刚体特性 2. 常用方法常用方法 (1)AddForce函数函数 AddForce函数用来对刚体施加一个指定方向的力,函数用来对刚体施加一个指定方向的力, 作用于刚体使其发生移动。作用于刚体使其发生移动。 1 f

6、unction AddForce (force : Vector3, mode : ForceMode = ForceMode.Force) : void 2 function AddForce (x : float, y : float, z : float, mode : ForceMode = ForceMode.Force) : void 第7页 4.1.1 刚体特性 2. 常用方法常用方法 (2)MovePosition函数函数 MovePosition函数用来将刚体移动到函数用来将刚体移动到position位置。位置。 1 function MovePosition (positi

7、on : Vector3) : void (3)MoveRotation函数函数 MoveRotation函数用来刚体旋转到函数用来刚体旋转到rot。rot为为Quaternion (四元数)会返回刚体需要旋转的角度。(四元数)会返回刚体需要旋转的角度。 1 function MoveRotation (rot : Quaternion) : void 第8页 4.1.1 刚体特性 3. 案例效果 第9页 4.1.1 刚体特性 4. 代码讲解 1 using UnityEngine; 2 using System.Collections; 3 public class Demo : MonoB

8、ehaviour 4 public float force; /声明float类型变量,设置施加在物体上的力的大小 5 public float speed; /物体移动的速度 第4-5行声明两个float类型变量,分别设置对物体施加的力的 大小以及移动的速度。由于为public类型,所以能够在 Inspector面板处直接进行修改。 第10页 4.1.1 刚体特性 4. 代码讲解 6 private bool ForceMode_Force; /布尔类 型的变量,判断当前是否对物体施加恒力 7 private bool CubeMovePosition; /判断当前是否 移动物体 8 pri

9、vate bool CubeMoveRotation; /判断当前是否 旋转物体 第6-8行声明了三个布尔类型的变量分别用来判断是 否对当前的物体施加力或者使其发生平移、旋转。 第11页 4.1.1 刚体特性 4. 代码讲解 9 private Vector3 eulerAngleVelocity = 10 new Vector3(0, 100, 0); /声明三维 向量,用来设置物体绕那个轴旋转 11 private Vector3 cubePosition;/用来存储物体的位置 12 private Quaternion cubeRotation; /声明四元 数变量,存储物体当前的旋转状

10、态 第9-12行声明了两个三维向量和一个四元数,两个三维向量分 别用来指定物体旋转的旋转轴与储存物体的初始位置 坐标,四元数用来存储物体初始的旋转状态,用于物体的复位。 第12页 4.1.1 刚体特性 4. 代码讲解 13 void Awake() /重写Awake函 数,当脚本加载时被调用 14 cubePosition=this.transform.position; /记录物体初始的位置 15 cubeRotation = this.transform.rotation; /记录物体初始的旋转状态 16 第13-16行通过使用Awake函数,该函数在脚本被加 载时调用,用来存储物体的位置

11、与旋转状态。 第13页 4.1.1 刚体特性 4. 代码讲解 17 void FixedUpdate() 18 if (ForceMode_Force) /如果点击施加恒 力按钮,就对物体施加向右的恒力 19 this.GetComponent().AddForce(Vector3.right * force, ForceMode.Force); 20 第18-20行首先判断ForceMode_Force变量的值,如果为false 就不执行,如果为true就通过 AddForce函数对物体施加一个 水平向右,力度大小为force的恒力。 第14页 4.1.1 刚体特性 4. 代码讲解 21 i

12、f (CubeMovePosition) /如果点击 移动物体按钮,就使物体向右移动 22 this.GetComponent().MovePosition 23 (this.transform.position+Vector3.right*speed*Time.deltaTime); 24 第21-24行首先判断CubeMovePosition变量的值,如果为false 就不执行,如果为true就通过MovePosition函数将物体向右 移动。 第15页 4.1.1 刚体特性 4. 代码讲解 25 if (CubeMoveRotation) /如果点击旋转物体按钮,就使物体旋 转 26 Q

13、uaternion deltaRotation = Quaternion.Euler(eulerAngleVelocity * Time.deltaTime); 27 this.GetComponent().MoveRotation(this.transform.rotation*d eltaRotation); 28 第25-28行首先判断CubeMoveRotation变量的值,如果为false就不执行, 如果为true就声明一个四元数变量deltaRotation,用来记录每 一帧物体的欧拉角,然后通过MoveRotation将该四元数的数值赋给 物体,形成旋转的效果。 第16页 4.1

14、.1 刚体特性 4. 代码讲解 30 GUI.BeginGroup(new Rect(Screen.width / 12, 31 Screen.height / 1.56f, 600, 150); /在指 定的位置创建Group控件 32 GUI.Box(new Rect(0, 0, 600, 150), ); /在其中创建一个Box 控件 33 if (GUI.Button(new Rect(39, 42, 130, 80), 施加爆炸力) /创建 Button控件 34 this.GetComponent().AddForce 35 (Vector3.right * force, Forc

15、eMode.Impulse); /当点击时对 物体施加爆炸力 36 第30-32行通过GUI系统,创建一个Group控件和Box控件。 第33-36行首先创建一个Button控件,当该控件被点击时就用AddForce函 数对物体施加一个水平向右,大小为force的爆炸力。 第17页 4.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(n

16、ew Rect(305, 42, 130, 80), 移动方块) 41 CubeMovePosition = !CubeMovePosition;/当点击时就将 CubeMovePosition置反 42 43 if (GUI.Button(new Rect(438, 42, 130, 80), 旋转方块) 44 CubeMoveRotation = !CubeMoveRotation; /当点击时就将 CubeMoveRotation置反 45 第37-45行创建了三个Button控件,分别用来控制对物体施加恒力、物体移动和物 体旋转的布尔变量,通过连续点击同一个Button可以开启或关闭效

17、果。 第18页 4.1.1 刚体特性 4. 代码讲解 47 if (GUI.Button(new Rect(0, 0, 100 , 80), 重置方块) /创建一个重置按钮, 将物体复位 48 this.GetComponent 49 ().isKinematic = true; /使其不遵循物理学定律,消除物体的旋转、平移 的状态 50 this.GetComponent 51 ().isKinematic = false; /使其遵循定律,使Rigidbody得函数能够影响到物 体 52 this.transform.position=cubePosition; /将物体的位置 修改为初始

18、位置 53 this.transform.rotation = cubeRotation; /将物体的旋转 状态修改为初始状态 第47-53行首先通过将刚体的Is Kinematic属性置为false使物体不会再受到物理效果 的影响,也可以理解为停止下落、旋转和移动。然后再将Is Kinematic属性置为 true,使物体能够受到刚体组件的影响。最后将物体的位置,旋转状态都设置为初 始参数,使其复位。 第19页 4.1.2物理管理器物理管理器 1. 物理管理器界面物理管理器界面 可以通过点击菜单栏中的EditProject SettingsPhysics来打开物理管理器 第20页 4.1.2

19、物理管理器物理管理器 2. 物理管理器变量物理管理器变量 (1)Gravity(重力)(重力) 在在Unity中默认的重力的方向为中默认的重力的方向为Y轴的负方向,大小为轴的负方向,大小为 9.81N。 (2)Default Material(默认材质)(默认材质) 全局管理器中默认没有使用任何物理材质,在其中开全局管理器中默认没有使用任何物理材质,在其中开 发人员可以为其添加物理材质。发人员可以为其添加物理材质。 第21页 4.1.2物理管理器物理管理器 2. 物理管理器变量物理管理器变量 (3)Bounce Threshold(反弹阈值)(反弹阈值) 在两个相互碰撞的刚体间的相对速度小于阈

20、值时,就不会再进在两个相互碰撞的刚体间的相对速度小于阈值时,就不会再进 行反弹计算,这样会有效的减少模拟物理过程中物体的抖动与行反弹计算,这样会有效的减少模拟物理过程中物体的抖动与 物理计算。物理计算。 (4)Raycasts Hit Triggers(射线检测触发器)(射线检测触发器) Unity集成开发环境的物理引擎中集成开发环境的物理引擎中3D射线拾取功能需要和碰撞射线拾取功能需要和碰撞 器相互配合使用,即射线命中碰撞器之后会返回命中信息,被器相互配合使用,即射线命中碰撞器之后会返回命中信息,被 开发人员捕获后可以实现特定的功能。开发人员捕获后可以实现特定的功能。 第22页 4.1.2物

21、理管理器物理管理器 2. 物理管理器变量物理管理器变量 (5)Layer Collision Matrix(层碰撞矩阵)(层碰撞矩阵) Unity集成开发环境中可开发人员可以对场景中的物集成开发环境中可开发人员可以对场景中的物 体进行分层,将不同功能或类型的物体区分开来。在体进行分层,将不同功能或类型的物体区分开来。在 物理管理器中,可以使用层碰撞矩阵来设置不同层的物理管理器中,可以使用层碰撞矩阵来设置不同层的 物体间的碰撞计算。两个层的交叉处就是设置碰撞检物体间的碰撞计算。两个层的交叉处就是设置碰撞检 测的标志位。测的标志位。 第23页 4.2.1 碰撞器的添加 1. 基础知识 Unity中

22、内置了六种碰撞器,分别是盒子碰撞器、球中内置了六种碰撞器,分别是盒子碰撞器、球 体碰撞器、胶囊碰撞器、网格碰撞器、车轮碰撞器以体碰撞器、胶囊碰撞器、网格碰撞器、车轮碰撞器以 及地形碰撞器。及地形碰撞器。 因为因为Unity并未限制同一物体上挂载碰撞器的数量,并未限制同一物体上挂载碰撞器的数量, 若碰上不规则物体读者可以将这几种碰撞器组合使用。若碰上不规则物体读者可以将这几种碰撞器组合使用。 第24页 4.2.1 碰撞器的添加 1. 基础知识 (1)盒子碰撞器()盒子碰撞器(Box Collider) 盒子碰撞器是一种基本方形碰撞器的原型,可以调整盒子碰撞器是一种基本方形碰撞器的原型,可以调整

23、成不同大小的长方体。成不同大小的长方体。 (2)球体碰撞器()球体碰撞器(Sphere Collider) 球体碰撞器是一种基本球形碰撞器的原型,在三维方球体碰撞器是一种基本球形碰撞器的原型,在三维方 向均可以调整大小但是不能单独调整某一维。向均可以调整大小但是不能单独调整某一维。 第25页 4.2.1 碰撞器的添加 1. 基础知识 (3)胶囊碰撞器()胶囊碰撞器(Capsule Collider) 胶囊碰撞器是类似胶囊形状的碰撞器,由一个圆柱体胶囊碰撞器是类似胶囊形状的碰撞器,由一个圆柱体 和两个上下的半球组成。和两个上下的半球组成。 (4)网格碰撞器()网格碰撞器(Mesh Collide

24、r) 网格碰撞器是一种在物体网格资源上构建的碰撞器,网格碰撞器是一种在物体网格资源上构建的碰撞器, 用于对复杂网状模型物体的检测。用于对复杂网状模型物体的检测。 第26页 4.2.1 碰撞器的添加 1. 基础知识 (5)车轮碰撞器()车轮碰撞器(Wheel Collider) 车轮碰撞器是一种特殊的碰撞器,该碰撞器包含碰撞车轮碰撞器是一种特殊的碰撞器,该碰撞器包含碰撞 检测、车轮物理引擎和基于滑动的轮胎摩擦模型检测、车轮物理引擎和基于滑动的轮胎摩擦模型 (6)地形碰撞器()地形碰撞器(Terrain Collider) 地形碰撞器是主要作用于地形的碰撞器。用于检测地地形碰撞器是主要作用于地形的

25、碰撞器。用于检测地 形和地形上物体对象的碰撞,防止地形上加有刚体属形和地形上物体对象的碰撞,防止地形上加有刚体属 性的物体无限制下落。性的物体无限制下落。 第27页 4.2.1 碰撞器的添加 1. 基础知识 碰撞器的参数列表 参数名含义参数名含义 Is Trigger如果启用,此碰撞体 (Collider) 则用于触发 事件,会由物理引擎忽 略。 Material引用可确定此碰撞体与其他碰撞体 (Collider) 的交互方式的物理材 质。 Size碰撞器在xyz轴上的尺寸content碰撞器在本地对象的位置 Radius球体碰撞器的半径大小Height胶囊碰撞器圆柱体的高度 第28页 4.2

26、.1 碰撞器的添加 2案例效果案例效果 第29页 4.2.1 碰撞器的添加 3. 开发流程开发流程 (1)打开)打开Unity集成开发环境,在集成开发环境,在Assets目录目录 下新建一名为下新建一名为Texture的文件夹,并将的文件夹,并将Diban.jpg 和和bg01.jpg导入该文件夹,分别作为地板和胶囊导入该文件夹,分别作为地板和胶囊 的纹理图。点击的纹理图。点击GameObject3D ObjectPlane菜单创建一个地板,赋上纹理图。菜单创建一个地板,赋上纹理图。 (2)再次点击)再次点击GameObject3D ObjectCapsule菜单创建胶囊游戏对象,为其菜单创建

27、胶囊游戏对象,为其 赋上纹理图并调整该胶囊和地板的距离使其在地赋上纹理图并调整该胶囊和地板的距离使其在地 板上方。选中板上方。选中Capsule游戏对象,为其添加刚体游戏对象,为其添加刚体 组件。选择组件。选择Capsule Collider组建右侧的设置按组建右侧的设置按 钮,选择钮,选择Remove Component菜单,移除该组菜单,移除该组 件。如图件。如图4-25所示。所示。 第30页 4.2.1 碰撞器的添加 3. 开发流程开发流程 (3)此时的胶囊游戏对象没有碰撞器。)此时的胶囊游戏对象没有碰撞器。 选 中选 中 C a p s u l e 游 戏 对 象 , 点 击游 戏 对

28、 象 , 点 击 ComponentPhysicsBox Collider, 如图如图4-26所示。胶囊属性列表中增加了所示。胶囊属性列表中增加了 Box Collider组件,点击组件,点击Box Collider 的编辑按钮,其每个面中心都会出现一的编辑按钮,其每个面中心都会出现一 个点,调整其尺寸包裹住半个胶囊对象。个点,调整其尺寸包裹住半个胶囊对象。 如图如图4-27所示。所示。 第31页 4.2.1 碰撞器的添加 3. 开发流程开发流程 (4)按照上述步骤再次为胶囊添加)按照上述步骤再次为胶囊添加 Sphere Collider碰撞器组件,在碰撞器组件,在 Center参数列表中调整

29、其位置,将参数列表中调整其位置,将Y值值 调整为调整为0.4,并且点击编辑按钮调整其半,并且点击编辑按钮调整其半 径大小,也可以在径大小,也可以在Radius参数中调整该参数中调整该 碰撞器组件的半径的大小。如图碰撞器组件的半径的大小。如图4-28所所 示。示。 (5)点击播放按钮运行该案例,观察)点击播放按钮运行该案例,观察 到胶囊会从空中掉下来但并不会穿过到胶囊会从空中掉下来但并不会穿过 Plane落到下面去,这是刚体和碰撞器落到下面去,这是刚体和碰撞器 结合而产生的效果。结合而产生的效果。 第32页 4.2.2碰撞过滤碰撞过滤 1. 基础知识基础知识 为规避不必要的碰撞检测,既可以通过开

30、发平台进行菜单设置又可以通过脚本中的为规避不必要的碰撞检测,既可以通过开发平台进行菜单设置又可以通过脚本中的 代码进行控制。首先笔者介绍如何在脚本中进行规避碰撞。代码进行控制。首先笔者介绍如何在脚本中进行规避碰撞。 1 void Start () /开始方法在对象被激活时开始执行开始方法在对象被激活时开始执行 2Physics.IgnoreCollision(ballA.GetComponent(),ballC.GetCompon ent(); 3 Physics.IgnoreCollision(ballB.GetComponent(), ballC.GetComponent(); 4/控制控

31、制ballC对象不和对象不和ballA和和ballB发生碰撞发生碰撞 5 说明:该代码片段主要是通过获取游戏对象的说明:该代码片段主要是通过获取游戏对象的Collider组件,调用组件,调用Physics类的类的 IgnoreCollsion方法使得两个球之间忽略碰撞检测。方法使得两个球之间忽略碰撞检测。 第33页 4.2.2 碰撞过滤碰撞过滤 2. 案例效果案例效果 可以通过点击菜单栏中的EditProject SettingsPhysics来打开物理管理器 第34页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 (1)打开)打开Unity集成开发环境,利用快捷键集成开发环境,利用快

32、捷键Ctrl+N新建一个新建一个 Scene, Ctrl+S保存场景并命名为保存场景并命名为“IgnoreCollisionDemo”。 在在Assets目录下新建三个文件夹分别命名为目录下新建三个文件夹分别命名为Texture(存放需(存放需 要使用的纹理图)、要使用的纹理图)、C#(存放开发中(存放开发中c#脚本文件)、脚本文件)、 Materialss(存放开发过程中的材质球)。(存放开发过程中的材质球)。 (2)利用快捷键)利用快捷键Ctrl+Shift+N新建一个空游戏对象,命名为新建一个空游戏对象,命名为 Ball,用来存放场景中的所有小球游戏对象。在,用来存放场景中的所有小球游戏

33、对象。在Ball游戏对象游戏对象 下,再次重新新建三个空游戏对象,重命名为下,再次重新新建三个空游戏对象,重命名为RedBall、 GreenBall、BlueBall。下面以新建一个红色球为例介绍所有。下面以新建一个红色球为例介绍所有 颜色球的开发。颜色球的开发。 第35页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 (3)将准备好的两幅纹理图片导入)将准备好的两幅纹理图片导入Texture文件夹,分别作文件夹,分别作 为为Plane和球的纹理图,点击和球的纹理图,点击GameObject3D ObjectPlane新建一个地板,将新建一个地板,将Diban.jpg纹理图拖拽到该纹

34、理图拖拽到该 游戏对象上。点击游戏对象上。点击GameObject3D ObjectSphere菜单,菜单, 分别命名为分别命名为Redone到到Redfour。 (4)在)在Materialss文件夹中新建三个文件夹中新建三个Material,右击,右击 CreateMaterial,分别命名为,分别命名为Redmaterial、 Greenmaterial、Bluematerial。如图。如图4-32所示。选中所示。选中 Redmaterial材质球,将材质球,将Texture文件夹中的文件夹中的BallBG纹理图拖纹理图拖 拽到拽到MainMaps下的下的Albedo中,并将右侧的颜色版

35、调制为红中,并将右侧的颜色版调制为红 色。色。 第36页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 (5)红色小球制作完成后按照此步骤分别制作绿色球材质和)红色小球制作完成后按照此步骤分别制作绿色球材质和 蓝色球材质,并将它们分别拖拽到与其对应的小球上,调整小蓝色球材质,并将它们分别拖拽到与其对应的小球上,调整小 球位置和案例运行效果前一样。至此就完成了场景的开发,接球位置和案例运行效果前一样。至此就完成了场景的开发,接 下来笔者将讲解如何通过创建层和编写脚本去控制小球的碰撞下来笔者将讲解如何通过创建层和编写脚本去控制小球的碰撞 检测。检测。 (6)在)在Hierarchy面板随意

36、选中一个游戏对象,在其属性面面板随意选中一个游戏对象,在其属性面 板会看到板会看到Layer下拉列表,笔者需要新建一个层,左击下拉列表,笔者需要新建一个层,左击Add Layer,如图,如图4-34所示。这时会出现一个如图所示。这时会出现一个如图4-35所示的界面。所示的界面。 从从Layer0到到Layer7都是系统默认的,开发人员不可以更改,都是系统默认的,开发人员不可以更改, 从从Layer8笔者依次建立笔者依次建立Red、Green、Blue层。层。 第37页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 (7)在层创建完成后需要为场景中不同游戏对象设置不同的层,选中所)在层创

37、建完成后需要为场景中不同游戏对象设置不同的层,选中所 有的红球将其有的红球将其Layer设置为设置为Red,如图,如图4-36所示。所有的绿球设置为所示。所有的绿球设置为Green, 所有的蓝色球设置为所有的蓝色球设置为Blue。到这一步,就完成了对所有球游戏对象进行不。到这一步,就完成了对所有球游戏对象进行不 同层的设置。同层的设置。 (8)点击)点击EditProject SettingsPhysics菜单,打开物理管理器,在菜单,打开物理管理器,在 属性面板呈现出排列比较整齐的层次矩阵。细心的读者会发现每一层和每属性面板呈现出排列比较整齐的层次矩阵。细心的读者会发现每一层和每 一层的物理

38、关系都可以调节。这时笔者设置同一颜色层可以忽略碰撞,反一层的物理关系都可以调节。这时笔者设置同一颜色层可以忽略碰撞,反 之则不可。如图之则不可。如图4-37所示所示 (9)到这一步,处于相同层次的游戏对象就会忽略碰撞而不同层次的对)到这一步,处于相同层次的游戏对象就会忽略碰撞而不同层次的对 象还发生物理碰撞,那么如何实现案例运行效果中第一列不同颜色球重叠象还发生物理碰撞,那么如何实现案例运行效果中第一列不同颜色球重叠 在一起的效果。这里就涉及到脚本控制了。在在一起的效果。这里就涉及到脚本控制了。在C#文件夹中新建名为文件夹中新建名为 “IgnoreCollision的的c#脚本脚本”。脚本代码

39、如下。脚本代码如下。 第38页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 1 using UnityEngine; 2 using System.Collections; 3 public class IgnoreCollision : MonoBehaviour 4 public Transform RedBall; /声明挂载场景中红色球的变量声明挂载场景中红色球的变量 5 public Transform GreenBall; /声明挂载场景中绿色球的变量声明挂载场景中绿色球的变量 6 public Transform BlueBall; /声明挂载场景中蓝色球的变量声明挂载

40、场景中蓝色球的变量 第第3-6行声明挂载场景中的不同颜色球的变量。行声明挂载场景中的不同颜色球的变量。 第39页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 7 void Start ()/重写重写Start方法方法 8 Physics.IgnoreCollision(RedBall .GetComponent (),GreenBall .GetComponent (); 9 Physics.IgnoreCollision(BlueBall .GetComponent (),GreenBall .GetComponent(); 10 /调用调用Physics类中的方法使得绿色球与蓝色

41、和红色球忽略碰撞类中的方法使得绿色球与蓝色和红色球忽略碰撞 11 Physics.IgnoreCollision(RedBall .GetComponent (),BlueBall .GetComponent (); 12 /调用调用Physics类中的方法使得蓝色球和红色球忽略碰撞类中的方法使得蓝色球和红色球忽略碰撞 13 第第7-13行是重写行是重写Start方法,调用方法,调用Physics类中的类中的IgnoreCollision方法使得方法使得 场景中第一列三个不同颜色的球忽略物理碰撞,从而产生重叠在一起的效场景中第一列三个不同颜色的球忽略物理碰撞,从而产生重叠在一起的效 果。果。

42、第40页 4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程 (10)编辑完脚本之后点击保存按钮保存脚本,并将)编辑完脚本之后点击保存按钮保存脚本,并将 其挂载到其挂载到Main Camera,将每个颜色第一列的球拖,将每个颜色第一列的球拖 拽到对应变量上,笔者这里用的是拽到对应变量上,笔者这里用的是Redfour、 Greenfour、Bluefour。如图。如图4-38所示。在将每个颜所示。在将每个颜 色的球调整完成后点击播放按钮运行即可查看效果。色的球调整完成后点击播放按钮运行即可查看效果。 第41页 4.2.3物理材质 1.基础知识基础知识 物理材质有多个参数可以调节,这些属性参数共

43、同决定物理材质的弹性和摩 擦因数,同时包括碰撞体间的摩擦力混合模式,以及物体在不同轴向可以设 置不同摩擦力大小的各向异性方向 大小。大小。 属性名含义属性名含义 Dynamic Friction滑动摩擦力Static Friction静摩擦力 Bounciness表面弹性Friction Combine碰撞体的摩擦力混合方式 Bounce Combine表面弹性混合方式Friction Direction 2各向异向的方向 DynamicFriction2作用于Friction Direction 2方 向的滑动摩擦力 Static Friction 2作用于Friction Directio

44、n 2 方向的静摩擦力 第42页 4.2.3物理材质 1.基础知识基础知识 (1)首先是)首先是Dynamic Friction(滑动摩擦因子)和(滑动摩擦因子)和Static Friction(静态摩擦(静态摩擦 因子),这两个摩擦因子的取值范围是因子),这两个摩擦因子的取值范围是01。当取值为。当取值为0时,被该物理材质控制时,被该物理材质控制 的物体将会产生类似于冰面的效果,流畅感很强。当取值为的物体将会产生类似于冰面的效果,流畅感很强。当取值为1时受控对象就会时受控对象就会 产生类似于橡胶面的效果,流畅感很差。产生类似于橡胶面的效果,流畅感很差。 (2)接下来是)接下来是Bouncin

45、ess(表面弹性),该值得范围也是(表面弹性),该值得范围也是01,当弹性因子,当弹性因子 设为设为0时则受控物体没有弹性,与其碰撞的物体碰撞后不会产生反弹效果。而时则受控物体没有弹性,与其碰撞的物体碰撞后不会产生反弹效果。而 当弹性因子设为当弹性因子设为1时,受控物体的弹性很强,与其碰撞的物体会发生完全碰撞,时,受控物体的弹性很强,与其碰撞的物体会发生完全碰撞, 没有能量损耗。没有能量损耗。 (3)Firction Direction 2(各向异性方向设定),通过设置该参数可以实现(各向异性方向设定),通过设置该参数可以实现 运动的物体在某一方向上运动十分流畅而向其他方向却很缓慢的效果。在其

46、参运动的物体在某一方向上运动十分流畅而向其他方向却很缓慢的效果。在其参 数下面的动态摩擦力和静态摩擦力参数就是对数下面的动态摩擦力和静态摩擦力参数就是对Friction Direction 2的具体摩擦的具体摩擦 设置。设置。 第43页 4.2.3物理材质 2.案例效果案例效果 第44页 4.2.3物理材质 3.开发流程开发流程 (1)打开)打开Unity集成开发环境,新建一个项目并重命名为集成开发环境,新建一个项目并重命名为“PhysicsMaterialDemo”。在。在 Assets目录下新建两个文件夹,分别重命名为目录下新建两个文件夹,分别重命名为“Texture”和和“Physics

47、Material”,将作为地,将作为地 板、板、Cube以及小球的纹理图导入以及小球的纹理图导入Texture文件夹。文件夹。 (2)纹理图导入完成后,点击)纹理图导入完成后,点击GameObject3D ObjectPlane菜单创建一个地板。将其菜单创建一个地板。将其 Transform组件下组件下Rotation中的中的X值修改为值修改为20,使其变为一个倾斜的地板。创建一个正方体,使其变为一个倾斜的地板。创建一个正方体, 调整其大小和位置参数,将调整其大小和位置参数,将Cube与与Plane的底端重合。为这两个对象赋上纹理图。的底端重合。为这两个对象赋上纹理图。 (3)点击)点击Gam

48、eObject3D ObjectSphere创建两个小球,将一个小球调至到地板创建两个小球,将一个小球调至到地板 的上方,另外一个则放置在地板上使其可以自由滚落。这时选中两个的上方,另外一个则放置在地板上使其可以自由滚落。这时选中两个Sphere游戏对象,游戏对象, 为其添加刚体组件。为其添加刚体组件。 (4)在)在PhysicsMaterial文件夹下创建两个材质,右击文件夹下创建两个材质,右击CreatePhysics Material,重命名,重命名 为为Ball和和BallTwo,将这两个物理材质参数统一设置为如图,将这两个物理材质参数统一设置为如图4-44所示。并将所示。并将Ball

49、和和BallTwo两个两个 材质分别拖拽到材质分别拖拽到Ball和和BallTwo两个游戏对象的两个游戏对象的Collision组件下的组件下的Material中,点击播放按钮中,点击播放按钮 即可观察效果。即可观察效果。 第45页 4.3.1 粒子系统的创建 粒子系统通过对一两个材质进行重复的绘制来产生大量的粒子,并且产生的粒粒子系统通过对一两个材质进行重复的绘制来产生大量的粒子,并且产生的粒 子能够随时间在颜色、体积、速度等方面发生变化,不断产生新的粒子销毁旧子能够随时间在颜色、体积、速度等方面发生变化,不断产生新的粒子销毁旧 的粒子,基于这些特性就能够很轻松的打造出绚丽的浓雾、雨水、火焰

50、、烟花的粒子,基于这些特性就能够很轻松的打造出绚丽的浓雾、雨水、火焰、烟花 等等特效。等等特效。 1. 创建粒子系统对象创建粒子系统对象 首先打开首先打开Unity集成开发环境,在菜单栏中点击集成开发环境,在菜单栏中点击GameObjectParticle System,如图,如图4-45所示,这样就会在场景中创建一个粒子系统对象,所示,这样就会在场景中创建一个粒子系统对象, 而且在而且在Hierarchy列表中会生成名为列表中会生成名为“Particle System”的游戏对象,的游戏对象, 点击该对象就能够在点击该对象就能够在Inspector面板中查看粒子系统的设置面板。面板中查看粒子

51、系统的设置面板。 第46页 4.3.1 粒子系统的创建 2. 添加粒子系统对象组件添加粒子系统对象组件 首先需要打开首先需要打开Unity集成开发环境并在场景中创建一个游戏对象,然后选中该集成开发环境并在场景中创建一个游戏对象,然后选中该 游戏对象,点击菜单栏中游戏对象,点击菜单栏中ComponentEffectParticle System,如图,如图4-47。 这样就会在选中的游戏物体上添加粒子系统组件,在游戏对象的这样就会在选中的游戏物体上添加粒子系统组件,在游戏对象的Inspector面面 板中同样可以看到粒子系统的设置面板。板中同样可以看到粒子系统的设置面板。 第47页 4.3.2

52、粒子系统特性 1. 基础知识基础知识 粒子系统由若干模块组成,每一个模块都负责不同的功能,接下来将介绍日常粒子系统由若干模块组成,每一个模块都负责不同的功能,接下来将介绍日常 开发过程中常用的粒子系统的三个设置模块,分别为粒子初始化、开发过程中常用的粒子系统的三个设置模块,分别为粒子初始化、 “Emission”(喷射)、(喷射)、“Shape”(形态)三个模块,每一个模块下都有若(形态)三个模块,每一个模块下都有若 干相关参数可以进行修改。干相关参数可以进行修改。 (1)粒子初始化模块)粒子初始化模块 粒子初始化模块主要对粒子的形态与数量进行设置,其中包含对粒子粒子初始化模块主要对粒子的形态

53、与数量进行设置,其中包含对粒子 的速度、颜色、生存周期、粒子最大数量等等属性。点击场景中的速度、颜色、生存周期、粒子最大数量等等属性。点击场景中 的粒子对象,粒子系统便会开始工作,修改参数的同时,的粒子对象,粒子系统便会开始工作,修改参数的同时, 场景中的出现的粒子也会实时改变场景中的出现的粒子也会实时改变 第48页 4.3.2 粒子系统特性 1. 基础知识基础知识 参数名含义参数名含义 Duration粒子的喷射周期Start Color粒子颜色 Looping是否循环喷射Inherit Velocity新生粒子的继承速度 Start Rotation粒子的旋转角Simulation Spa

54、ce粒子系统的模拟空间 Play On Awake创建时自动播放Gravity Modifier相对于物理管理器中重力加速度的重力密度(缩 放比) Start Lifetime粒子的生命周期Prewarm预热(Looping状态下预产生下一周期粒子) Start Speed粒子的喷射速度Start Delay粒子喷射延迟(Prewarm状态下无法延迟) Start Size粒子的大小Max Particles一个周期内发射的粒子数,多余此数目停止发射 第49页 4.3.2 粒子系统特性 1. 基础知识基础知识 (2)Emission(喷射)(喷射) Emission(喷射)模块主要控制粒子系统

55、中粒子发射的速率,通过增大粒子发射速率,在粒(喷射)模块主要控制粒子系统中粒子发射的速率,通过增大粒子发射速率,在粒 子的生存时间内,可实现瞬间产生大量粒子的效果,在模拟烟花效果时非常实用子的生存时间内,可实现瞬间产生大量粒子的效果,在模拟烟花效果时非常实用 Rate(速率)选项下有两个参数,其中上面的参数表示粒子发射数量。下面的参数有两种选项(速率)选项下有两个参数,其中上面的参数表示粒子发射数量。下面的参数有两种选项 分别为分别为Time和和Distance,前者以时间为标准定义每秒的喷射的粒子个数,后者表明以距离为,前者以时间为标准定义每秒的喷射的粒子个数,后者表明以距离为 标准定义每个

56、单位长度里喷射的粒子个数。标准定义每个单位长度里喷射的粒子个数。 Bursts(爆发)选项只有在以时间为基准的情况下才能使用,用来在粒子生存时间内(爆发)选项只有在以时间为基准的情况下才能使用,用来在粒子生存时间内 的特定时刻喷射额外数量的粒子。的特定时刻喷射额外数量的粒子。Time用来设置爆发时间,用来设置爆发时间,Particle用来设置喷射的粒子数。用来设置喷射的粒子数。 Shape(形态)(形态) 形态模块是用来设置粒子生成器的形状,不同形状的生成器发射出来的粒子形态模块是用来设置粒子生成器的形状,不同形状的生成器发射出来的粒子 的运动轨迹也不尽相同,的运动轨迹也不尽相同, 第50页

57、4.3.2 粒子系统特性 1. 基础知识基础知识 Shape(形态)(形态) 形态模块是用来设置粒子生成器的形状,不同形状的生成器发射出来的粒子形态模块是用来设置粒子生成器的形状,不同形状的生成器发射出来的粒子 的运动轨迹也不尽相同。的运动轨迹也不尽相同。 参数名含义参数名含义 Sphere球体发射器HemiSphere半球体发射器 Cone圆锥体发射器Box盒状发射器 Mesh网格发射器Circle环形发射器 Edge线形发射器 第51页 4.3.2 粒子系统特性 2.案例效果案例效果 本案例将通过球状发射器来瞬间发射大量的粒子,来演示粒子爆发效果。其中粒子会随着喷射本案例将通过球状发射器来

58、瞬间发射大量的粒子,来演示粒子爆发效果。其中粒子会随着喷射 的距离而逐渐变小,每个粒子发射的方向是随机的,粒子系统如果使用不当就会耗费大量的运的距离而逐渐变小,每个粒子发射的方向是随机的,粒子系统如果使用不当就会耗费大量的运 算资源,在开发过程中要合理使用,尽量避免产生过多的粒子算资源,在开发过程中要合理使用,尽量避免产生过多的粒子 。 第52页 4.3.2 粒子系统特性 3. 制作流程制作流程 (1)首先使用)首先使用Unity新建一个工程,打开工程文件进入到新建一个工程,打开工程文件进入到Unity集成开发环境中并点击菜单栏集成开发环境中并点击菜单栏 中的中的FileSave Scene保

59、存场景并重命名为保存场景并重命名为“ParticleSystem_Demo”。然后点击菜单栏。然后点击菜单栏 GameObjectParticleSystem,如图,如图4-53所示,此时就能够在场景中看到有粒子被发射出来,所示,此时就能够在场景中看到有粒子被发射出来, 如图如图4-54所示。所示。 (2)接下来选中创建的粒子系统对象,在)接下来选中创建的粒子系统对象,在Inspector面板中就可以查看到其设置面板,首先需面板中就可以查看到其设置面板,首先需 要修改粒子系统初始化模块中的参数,修改其发射周期为要修改粒子系统初始化模块中的参数,修改其发射周期为10,粒子的初始速度为,粒子的初始

60、速度为10,粒子大,粒子大 小在小在5到到2之间变化,最大粒子数设置为之间变化,最大粒子数设置为500。 (3)下面修改生成的粒子颜色点击)下面修改生成的粒子颜色点击StartColor参数后面的向下箭头选择参数后面的向下箭头选择 “Random Between Two Gradients”(颜色在两个梯度间变化),(颜色在两个梯度间变化), 点击两个颜色条的其中一个,在弹出的窗口中开始和结尾处选择任意颜色,点击两个颜色条的其中一个,在弹出的窗口中开始和结尾处选择任意颜色, 第53页 4.3.2 粒子系统特性 3. 制作流程制作流程 (4)初始化完成后,要对喷射模块进行设置,以达到粒子爆发的效

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论