书签 分享 收藏 举报 版权申诉 / 100
上传文档赚钱

类型Unity3D游戏开发标准教程第04章-物理引擎课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2912736
  • 上传时间:2022-06-10
  • 格式:PPT
  • 页数:100
  • 大小:7.71MB
  • 【下载声明】
    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

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

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

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

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

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

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

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

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

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

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

    36、有的红球将其有的红球将其Layer设置为设置为Red,如图,如图4-36所示。所有的绿球设置为所示。所有的绿球设置为Green,所有的蓝色球设置为所有的蓝色球设置为Blue。到这一步,就完成了对所有球游戏对象进行不。到这一步,就完成了对所有球游戏对象进行不同层的设置。同层的设置。(8)点击)点击EditProject SettingsPhysics菜单,打开物理管理器,在菜单,打开物理管理器,在属性面板呈现出排列比较整齐的层次矩阵。细心的读者会发现每一层和每属性面板呈现出排列比较整齐的层次矩阵。细心的读者会发现每一层和每一层的物理关系都可以调节。这时笔者设置同一颜色层可以忽略碰撞,反一层的物理

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

    38、发流程1 using UnityEngine;2 using System.Collections;3 public class IgnoreCollision : MonoBehaviour4 public Transform RedBall;/声明挂载场景中红色球的变量声明挂载场景中红色球的变量5 public Transform GreenBall;/声明挂载场景中绿色球的变量声明挂载场景中绿色球的变量6 public Transform BlueBall;/声明挂载场景中蓝色球的变量声明挂载场景中蓝色球的变量第第3-6行声明挂载场景中的不同颜色球的变量。行声明挂载场景中的不同颜色球的变

    39、量。第38页4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程7 void Start ()/重写重写Start方法方法8 Physics.IgnoreCollision(RedBall .GetComponent (),GreenBall .GetComponent ();9 Physics.IgnoreCollision(BlueBall .GetComponent (),GreenBall .GetComponent();10 /调用调用Physics类中的方法使得绿色球与蓝色和红色球忽略碰撞类中的方法使得绿色球与蓝色和红色球忽略碰撞11 Physics.IgnoreCollision

    40、(RedBall .GetComponent (),BlueBall .GetComponent ();12 /调用调用Physics类中的方法使得蓝色球和红色球忽略碰撞类中的方法使得蓝色球和红色球忽略碰撞13第第7-13行是重写行是重写Start方法,调用方法,调用Physics类中的类中的IgnoreCollision方法使得方法使得场景中第一列三个不同颜色的球忽略物理碰撞,从而产生重叠在一起的效场景中第一列三个不同颜色的球忽略物理碰撞,从而产生重叠在一起的效果。果。第39页4.2.2 碰撞过滤碰撞过滤 3. 开发流程开发流程(10)编辑完脚本之后点击保存按钮保存脚本,并将)编辑完脚本之后

    41、点击保存按钮保存脚本,并将其挂载到其挂载到Main Camera,将每个颜色第一列的球拖,将每个颜色第一列的球拖拽到对应变量上,笔者这里用的是拽到对应变量上,笔者这里用的是Redfour、Greenfour、Bluefour。如图。如图4-38所示。在将每个颜所示。在将每个颜色的球调整完成后点击播放按钮运行即可查看效果。色的球调整完成后点击播放按钮运行即可查看效果。第40页4.2.3物理材质1.基础知识基础知识 物理材质有多个参数可以调节,这些属性参数共同决定物理材质的弹性和摩擦因数,同时包括碰撞体间的摩擦力混合模式,以及物体在不同轴向可以设置不同摩擦力大小的各向异性方向 大小。大小。属性名含

    42、义属性名含义Dynamic Friction滑动摩擦力Static Friction静摩擦力Bounciness表面弹性Friction Combine碰撞体的摩擦力混合方式Bounce Combine表面弹性混合方式Friction Direction 2各向异向的方向DynamicFriction2作用于Friction Direction 2方向的滑动摩擦力Static Friction 2作用于Friction Direction 2方向的静摩擦力第41页4.2.3物理材质1.基础知识基础知识 (1)首先是)首先是Dynamic Friction(滑动摩擦因子)和(滑动摩擦因子)和St

    43、atic Friction(静态摩擦(静态摩擦因子),这两个摩擦因子的取值范围是因子),这两个摩擦因子的取值范围是01。当取值为。当取值为0时,被该物理材质控制时,被该物理材质控制的物体将会产生类似于冰面的效果,流畅感很强。当取值为的物体将会产生类似于冰面的效果,流畅感很强。当取值为1时受控对象就会时受控对象就会产生类似于橡胶面的效果,流畅感很差。产生类似于橡胶面的效果,流畅感很差。(2)接下来是)接下来是Bounciness(表面弹性),该值得范围也是(表面弹性),该值得范围也是01,当弹性因子,当弹性因子设为设为0时则受控物体没有弹性,与其碰撞的物体碰撞后不会产生反弹效果。而时则受控物体没

    44、有弹性,与其碰撞的物体碰撞后不会产生反弹效果。而当弹性因子设为当弹性因子设为1时,受控物体的弹性很强,与其碰撞的物体会发生完全碰撞,时,受控物体的弹性很强,与其碰撞的物体会发生完全碰撞,没有能量损耗。没有能量损耗。(3)Firction Direction 2(各向异性方向设定),通过设置该参数可以实现(各向异性方向设定),通过设置该参数可以实现运动的物体在某一方向上运动十分流畅而向其他方向却很缓慢的效果。在其参运动的物体在某一方向上运动十分流畅而向其他方向却很缓慢的效果。在其参数下面的动态摩擦力和静态摩擦力参数就是对数下面的动态摩擦力和静态摩擦力参数就是对Friction Direction

    45、 2的具体摩擦的具体摩擦设置。设置。第42页4.2.3物理材质2.案例效果案例效果 第43页4.2.3物理材质3.开发流程开发流程 (1)打开)打开Unity集成开发环境,新建一个项目并重命名为集成开发环境,新建一个项目并重命名为“PhysicsMaterialDemo”。在。在Assets目录下新建两个文件夹,分别重命名为目录下新建两个文件夹,分别重命名为“Texture”和和“PhysicsMaterial”,将作为地,将作为地板、板、Cube以及小球的纹理图导入以及小球的纹理图导入Texture文件夹。文件夹。(2)纹理图导入完成后,点击)纹理图导入完成后,点击GameObject3D

    46、ObjectPlane菜单创建一个地板。将其菜单创建一个地板。将其Transform组件下组件下Rotation中的中的X值修改为值修改为20,使其变为一个倾斜的地板。创建一个正方体,使其变为一个倾斜的地板。创建一个正方体,调整其大小和位置参数,将调整其大小和位置参数,将Cube与与Plane的底端重合。为这两个对象赋上纹理图。的底端重合。为这两个对象赋上纹理图。(3)点击)点击GameObject3D ObjectSphere创建两个小球,将一个小球调至到地板创建两个小球,将一个小球调至到地板 的上方,另外一个则放置在地板上使其可以自由滚落。这时选中两个的上方,另外一个则放置在地板上使其可以

    47、自由滚落。这时选中两个Sphere游戏对象,游戏对象, 为其添加刚体组件。为其添加刚体组件。(4)在)在PhysicsMaterial文件夹下创建两个材质,右击文件夹下创建两个材质,右击CreatePhysics Material,重命名,重命名为为Ball和和BallTwo,将这两个物理材质参数统一设置为如图,将这两个物理材质参数统一设置为如图4-44所示。并将所示。并将Ball和和BallTwo两个两个材质分别拖拽到材质分别拖拽到Ball和和BallTwo两个游戏对象的两个游戏对象的Collision组件下的组件下的Material中,点击播放按钮中,点击播放按钮即可观察效果。即可观察效果

    48、。第44页4.3.1 粒子系统的创建粒子系统通过对一两个材质进行重复的绘制来产生大量的粒子,并且产生的粒粒子系统通过对一两个材质进行重复的绘制来产生大量的粒子,并且产生的粒子能够随时间在颜色、体积、速度等方面发生变化,不断产生新的粒子销毁旧子能够随时间在颜色、体积、速度等方面发生变化,不断产生新的粒子销毁旧的粒子,基于这些特性就能够很轻松的打造出绚丽的浓雾、雨水、火焰、烟花的粒子,基于这些特性就能够很轻松的打造出绚丽的浓雾、雨水、火焰、烟花等等特效。等等特效。1. 创建粒子系统对象创建粒子系统对象首先打开首先打开Unity集成开发环境,在菜单栏中点击集成开发环境,在菜单栏中点击GameObje

    49、ctParticle System,如图,如图4-45所示,这样就会在场景中创建一个粒子系统对象,所示,这样就会在场景中创建一个粒子系统对象, 而且在而且在Hierarchy列表中会生成名为列表中会生成名为“Particle System”的游戏对象,的游戏对象, 点击该对象就能够在点击该对象就能够在Inspector面板中查看粒子系统的设置面板。面板中查看粒子系统的设置面板。第45页4.3.1 粒子系统的创建2. 添加粒子系统对象组件添加粒子系统对象组件首先需要打开首先需要打开Unity集成开发环境并在场景中创建一个游戏对象,然后选中该集成开发环境并在场景中创建一个游戏对象,然后选中该游戏对

    50、象,点击菜单栏中游戏对象,点击菜单栏中ComponentEffectParticle System,如图,如图4-47。这样就会在选中的游戏物体上添加粒子系统组件,在游戏对象的这样就会在选中的游戏物体上添加粒子系统组件,在游戏对象的Inspector面面板中同样可以看到粒子系统的设置面板。板中同样可以看到粒子系统的设置面板。第46页4.3.2 粒子系统特性1. 基础知识基础知识粒子系统由若干模块组成,每一个模块都负责不同的功能,接下来将介绍日常粒子系统由若干模块组成,每一个模块都负责不同的功能,接下来将介绍日常开发过程中常用的粒子系统的三个设置模块,分别为粒子初始化、开发过程中常用的粒子系统的

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Unity3D游戏开发标准教程第04章-物理引擎课件.ppt
    链接地址:https://www.163wenku.com/p-2912736.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库