本节书摘来异步社区《Unity 4 3D开发实战详解》一书中的第6章,第6.6节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。
6.6 布料
Unity 4 3D开发实战详解
本节主要向读者介绍布料的相关知识,布料是Unity内建物理引擎中另外一个很重要的概念。弄清楚布料的概念对于Unity开发新手来说是很重要的。通过本节的学习,读者将对布料有一个基本的认识。
6.6.1 布料特性
Unity内建物理引擎中的布料是基于一个网格,来模拟类似布料行为的组件。如果场景中需要使用布料的效果,那么就用这个组件。
布料作为物理引擎的组件,包含有该类组件的特定属性,包括Transform、Interactive Cloth、Cloth Renderer,如图6-135所示。并对应封装了多个相关方法,下面进行分别介绍。
为了利于开发者控制物理系统,Unity提供了多个属性接口,即Interactive Cloth中的参数。开发者可以通过更改布料的属性参数来控制布料的物理形态。在实际开发中,这些参数都被详细地罗列在属性查看器中,开发者很容易就可以对其进行更改。接下来对这些属性进行介绍。
(1)抗弯刚度(Bending Stiffness)。
该属性表示布料的弯曲强度,其数据类型是float,默认值为0。Bending Stiffness属性在属性查看器中的位置如图6-136所示。该属性的大小是有严格要求的,其范围在0到1之间,而且越接近1,表示布料越不容易弯曲。
(2)抗拉伸度(Stretching Stiffness)。
该属性表示布料的拉伸强度,其数据类型是float,默认值为1。Stretching Stiffness属性在属性查看器中的位置如图6-137所示。该属性的大小也是有严格要求的,其范围在0到1之间,而且越接近1,表示布料越不容易拉伸。
(3)阻尼(Damping)。
该属性表示布料运动的阻尼,其数据类型是float,默认值为0。Damping属性在属性查看器中的位置如图6-138所示。在现实生活中,布料物体会受到各方面的影响,速度会逐渐衰减,为了模拟这一效果,Unity设定了这一属性。这一属性值越高,布料物体的速度衰减越严重。
(4)厚度(Thickness)。
该属性表示布料的厚度,其数据类型是float,默认值为0.2。Thickness属性在属性查看器中的位置如图6-139所示。该属性的大小是有严格要求的,一般来说,大部分布料的Thickness属性值直接使用默认的数值,其数值一旦超过1,将会失去仿真所需达到的效果。
(5)使用重力(Use Gravity)。
该属性表示的是布料是否受到重力的影响,其数据类型是boolean,初始值为true。UseGravity属性在属性查看器中的位置如图6-140所示。这一属性被设为false时可以模拟布料物体在外太空状态下的失重状态。
(6)自身碰撞(Self Collision)。
该属性表示的是布料是否自身碰撞,其数据类型是boolean,初始值为false。SelfCollision属性在属性查看器中的位置如图6-141所示。这一属性被设为true时,布料之间将存在碰撞,可以根据场景的需要设定不同的状态。
(7)外部加速度(External Acceleration)。
该属性表示的是给布料设置一个固定的外部加速度,其数据类型是folate,初始值为0。External Acceleration属性在属性查看器中的位置如图6-142所示。从图6-142中可以看出,这一属性可以分别设置布料的x、y、z方向的加速度。
(8)随机加速度(Random Acceleration)。
该属性表示的是给布料设置一个随机的外部加速度,其数据类型是folate,初始值为0。Random Acceleration属性在属性查看器中的位置如图6-143所示。从图6-143中可以看出,这一属性可以分别设置布料的x、y、z方向的加速度。
(9)网格(Mesh)。
该属性表示的是用于模拟布料的网格。Mesh属性在属性查看器中的位置如图6-144所示。单击Mesh右侧的小圆圈可以选择需要的网格,以达到开发的需要。
(10)摩擦力(Friction)。
该属性表示的是布料的摩擦系数,其数据类型是float,范围在0到1之间,初始值为0.5。Friction属性在属性查看器中的位置如图6-145所示。布料与其他物体接触时会产生摩擦的效果,此属性值越高,布料的摩擦力就越大。
(11)密度(Density)。
该属性表示的是布料密度,其数据类型是float,初始值为1。Density属性在属性查看器中的位置如图6-146所示。该属性的大小一般来说选择默认的初值,在某些特定情况下,可以根据需要调整布料的密度大小。
(12)压力(Pressure)。
该属性表示的是布料内部的压力,其数据类型是float,初始值为0。Pressure属性在属性查看器中的位置如图6-147所示。该属性的大小一般来说选择默认的初值,当用于封闭布料时,可以模拟气球等。
(13)碰撞反应(Collision Response)。
该属性表示的是对撞上布料的刚体施加多大的力,其数据类型是float,初始值为0。Collision Response属性在属性查看器中的位置如图6-148所示。在现实生活中,物体之间相互碰撞会受到力的作用,这一属性值越高,物体碰撞后受到的力就越大。
(14)附加撕裂系数(Attachment Tear Factor)。
该属性表示布料从挂接刚体撕裂的拉伸程度,挂接刚体必须勾选tearable才能生效,其数据类型是float,初始值为0.5。Attachment Tear Factor属性在属性查看器中的位置如图6-149所示。布料受到超过一定力时就会从附加的刚体上撕裂,这一属性值越高,越不容易撕裂。
(15)附加反应(Attachment Response)。
该属性表示对挂接的刚体施加多少作用力,只有当挂接刚体勾选TwoWayInteraction才生效,其数据类型是float,初始值为0.2。Attachment Response属性在属性查看器中的位置如图6-150所示。
(16)撕裂系数(Tear Factor)。
该属性表示布料的顶点之间距离多长会被撕开,其数据类型是float,初始值为0。Tear Factor属性在属性查看器中的位置如图6-151所示。在现实生活中,布料受到超过其可承受的力时会撕裂,为了模拟这一效果,Unity设定了这一属性。这一属性值越高,布料越不易被撕裂。
(17)附加碰撞器列表(Attached Collider)。
该属性表示的是一个包含布料挂接的所有碰撞体的数组,每个碰撞体都有TwoWayInteraction和Tearable两个选项。Attached Colliders属性在属性查看器中的位置如图6-152所示。
前面介绍了布料基本物理状态的参数,除此之外,布料还具有渲染器Cloth Renderer属性。开发者可以通过更改布料的渲染设置控制布料的表现效果。在实际开发中,这些参数都被详细地罗列在属性查看器中,开发者很容易就可以对其进行更改。接下来对这些属性进行介绍。
(1)投射阴影(Cast Shadows)。
该属性表示的是布料是否投射阴影,其数据类型是boolean,初始值为true。Cast Shadows属性在属性查看器中的位置如图6-153所示。这一属性被设为true时可以在场景中看到布料投射阴影的效果。
(2)接受阴影(Receive Shadows)。
该属性表示的是布料是否能被投影,其数据类型是boolean,初始值为true。Receive Shadows属性在属性查看器中的位置如图6-154所示。这一属性被设为true时,布料可以接受其他物体投射的阴影效果。
(3)材质(Materials)。
该属性表示的是布料所选择的材质。Materials属性在属性查看器中的位置如图6-155所示。
(4)使用光探测器(Use Light Probes)。
该属性表示的是如果勾选此选项,那么布料将开启光探测器,默认不选择。Use Light Probes属性在属性查看器中的位置如图6-156所示。
(5)光探针锚(Light Probe Anchor)。
该属性表示的是在分配的情况下,光照探测插入到渲染器边界的中心或者在锚点的位置,默认不选择。Light Probe Anchor属性在属性查看器中的位置如图6-157所示。
(6)不可见时暂停(Pause When Not Visible)。
该属性表示的是如果勾选此选项,那么在摄像机可见的范围外,布料将不进行模拟运算。Pause When Not Visible属性在属性查看器中的位置如图6-158所示。
布料是Unity自带物理引擎中十分重要的部分,熟练掌握布料的属性及参数设置,可以在开发中达到事半功倍的效果。
6.6.2 布料的简单案例
通过前面小节的学习,相信读者对布料有了一个简单的认识。本小节主要讲述如何在Unity 3D中创建以及使用布料,具体步骤如下。
在开发前首先要对案例开发需要的资源进行收集,主要需要的资源如表6-6所示。
(1)双击桌面上的Unity快捷方式,进入Unity集成开发环境,导入所需的资源,具体的导入过程就单击Assets→Import New Assets菜单,会立刻弹出一个Import New Assets对话框,在对话框中选择需要的资源,单击Import按钮即可完成导入,Project面板下的Assets包括的资源如图6-159所示。
(2)单击GameObject→Create Other→Plane菜单,在场景中创建Plane,在此改名为diban,并在属性查看器中设置具体的参数,具体参数如图6-160所示。
(3)单击GameObject→Create Other→Sphere菜单,在场景中创建一个球体,在此改名为Ball,并在属性查看器中设置具体的参数,具体参数如图6-161所示。
(4)单击GameObject→Create Other→Cloth菜单项,在场景中创建一个布料,命名为Cloth,并在属性查看器中设置具体的参数,其具体参数如图6-162所示。
提示
布料Interactive Cloth属性下的Mesh选择刚才导入的Cloth.FBX文件。
(5)选中摄像机,在属性查看器中调整摄像机的视角,使摄像机的视角正对场景中的游戏对象,具体参数设置如图6-163所示。
(6)为场景中添加适合的平行光光源,即单击GameObject→Create Other→Directional light菜单,创建平行光光源,并在属性查看器中设置其参数,具体参数如图6-164所示。
(7)单击Unity中的游戏播放按钮,在Game窗口下可以看到布料落下与小球发生碰撞的效果,如图6-165所示。
到这里本案例的操作步骤以及各个游戏对象参数的设置已经全部讲解完毕,通过本案例的操作,希望读者可以掌握物理引擎中布料的基本使用,在今后的开发中可以熟练应用。