《Unity 4 3D开发实战详解》一6.6 布料-程序员宅基地

技术标签: 游戏  

本节书摘来异步社区《Unity 4 3D开发实战详解》一书中的第6章,第6.6节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.6 布料

Unity 4 3D开发实战详解
本节主要向读者介绍布料的相关知识,布料是Unity内建物理引擎中另外一个很重要的概念。弄清楚布料的概念对于Unity开发新手来说是很重要的。通过本节的学习,读者将对布料有一个基本的认识。

6.6.1 布料特性

Unity内建物理引擎中的布料是基于一个网格,来模拟类似布料行为的组件。如果场景中需要使用布料的效果,那么就用这个组件。

布料作为物理引擎的组件,包含有该类组件的特定属性,包括Transform、Interactive Cloth、Cloth Renderer,如图6-135所示。并对应封装了多个相关方法,下面进行分别介绍。


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,表示布料越不容易拉伸。


136_137

(3)阻尼(Damping)。

该属性表示布料运动的阻尼,其数据类型是float,默认值为0。Damping属性在属性查看器中的位置如图6-138所示。在现实生活中,布料物体会受到各方面的影响,速度会逐渐衰减,为了模拟这一效果,Unity设定了这一属性。这一属性值越高,布料物体的速度衰减越严重。

(4)厚度(Thickness)。

该属性表示布料的厚度,其数据类型是float,默认值为0.2。Thickness属性在属性查看器中的位置如图6-139所示。该属性的大小是有严格要求的,一般来说,大部分布料的Thickness属性值直接使用默认的数值,其数值一旦超过1,将会失去仿真所需达到的效果。


138_139

(5)使用重力(Use Gravity)。

该属性表示的是布料是否受到重力的影响,其数据类型是boolean,初始值为true。UseGravity属性在属性查看器中的位置如图6-140所示。这一属性被设为false时可以模拟布料物体在外太空状态下的失重状态。

(6)自身碰撞(Self Collision)。

该属性表示的是布料是否自身碰撞,其数据类型是boolean,初始值为false。SelfCollision属性在属性查看器中的位置如图6-141所示。这一属性被设为true时,布料之间将存在碰撞,可以根据场景的需要设定不同的状态。


140_141

(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右侧的小圆圈可以选择需要的网格,以达到开发的需要。


142_143

(10)摩擦力(Friction)。

该属性表示的是布料的摩擦系数,其数据类型是float,范围在0到1之间,初始值为0.5。Friction属性在属性查看器中的位置如图6-145所示。布料与其他物体接触时会产生摩擦的效果,此属性值越高,布料的摩擦力就越大。


144_145

(11)密度(Density)。

该属性表示的是布料密度,其数据类型是float,初始值为1。Density属性在属性查看器中的位置如图6-146所示。该属性的大小一般来说选择默认的初值,在某些特定情况下,可以根据需要调整布料的密度大小。


146

(12)压力(Pressure)。

该属性表示的是布料内部的压力,其数据类型是float,初始值为0。Pressure属性在属性查看器中的位置如图6-147所示。该属性的大小一般来说选择默认的初值,当用于封闭布料时,可以模拟气球等。

(13)碰撞反应(Collision Response)。

该属性表示的是对撞上布料的刚体施加多大的力,其数据类型是float,初始值为0。Collision Response属性在属性查看器中的位置如图6-148所示。在现实生活中,物体之间相互碰撞会受到力的作用,这一属性值越高,物体碰撞后受到的力就越大。


147_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所示。


149_150

(16)撕裂系数(Tear Factor)。

该属性表示布料的顶点之间距离多长会被撕开,其数据类型是float,初始值为0。Tear Factor属性在属性查看器中的位置如图6-151所示。在现实生活中,布料受到超过其可承受的力时会撕裂,为了模拟这一效果,Unity设定了这一属性。这一属性值越高,布料越不易被撕裂。

(17)附加碰撞器列表(Attached Collider)。

该属性表示的是一个包含布料挂接的所有碰撞体的数组,每个碰撞体都有TwoWayInteraction和Tearable两个选项。Attached Colliders属性在属性查看器中的位置如图6-152所示。

前面介绍了布料基本物理状态的参数,除此之外,布料还具有渲染器Cloth Renderer属性。开发者可以通过更改布料的渲染设置控制布料的表现效果。在实际开发中,这些参数都被详细地罗列在属性查看器中,开发者很容易就可以对其进行更改。接下来对这些属性进行介绍。


151_152

(1)投射阴影(Cast Shadows)。

该属性表示的是布料是否投射阴影,其数据类型是boolean,初始值为true。Cast Shadows属性在属性查看器中的位置如图6-153所示。这一属性被设为true时可以在场景中看到布料投射阴影的效果。

(2)接受阴影(Receive Shadows)。

该属性表示的是布料是否能被投影,其数据类型是boolean,初始值为true。Receive Shadows属性在属性查看器中的位置如图6-154所示。这一属性被设为true时,布料可以接受其他物体投射的阴影效果。


153_154

(3)材质(Materials)。

该属性表示的是布料所选择的材质。Materials属性在属性查看器中的位置如图6-155所示。

(4)使用光探测器(Use Light Probes)。

该属性表示的是如果勾选此选项,那么布料将开启光探测器,默认不选择。Use Light Probes属性在属性查看器中的位置如图6-156所示。


155_156

(5)光探针锚(Light Probe Anchor)。

该属性表示的是在分配的情况下,光照探测插入到渲染器边界的中心或者在锚点的位置,默认不选择。Light Probe Anchor属性在属性查看器中的位置如图6-157所示。

(6)不可见时暂停(Pause When Not Visible)。

该属性表示的是如果勾选此选项,那么在摄像机可见的范围外,布料将不进行模拟运算。Pause When Not Visible属性在属性查看器中的位置如图6-158所示。


157_158

布料是Unity自带物理引擎中十分重要的部分,熟练掌握布料的属性及参数设置,可以在开发中达到事半功倍的效果。

6.6.2 布料的简单案例

通过前面小节的学习,相信读者对布料有了一个简单的认识。本小节主要讲述如何在Unity 3D中创建以及使用布料,具体步骤如下。

在开发前首先要对案例开发需要的资源进行收集,主要需要的资源如表6-6所示。


b6_6

(1)双击桌面上的Unity快捷方式,进入Unity集成开发环境,导入所需的资源,具体的导入过程就单击Assets→Import New Assets菜单,会立刻弹出一个Import New Assets对话框,在对话框中选择需要的资源,单击Import按钮即可完成导入,Project面板下的Assets包括的资源如图6-159所示。


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所示。


140_141
142_143


(6)为场景中添加适合的平行光光源,即单击GameObject→Create Other→Directional light菜单,创建平行光光源,并在属性查看器中设置其参数,具体参数如图6-164所示。

(7)单击Unity中的游戏播放按钮,在Game窗口下可以看到布料落下与小球发生碰撞的效果,如图6-165所示。


164_164

到这里本案例的操作步骤以及各个游戏对象参数的设置已经全部讲解完毕,通过本案例的操作,希望读者可以掌握物理引擎中布料的基本使用,在今后的开发中可以熟练应用。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33795093/article/details/90556151

智能推荐

mybatis-plus:Failed to process, please exclude the tableName or statementId + 在系统中发现了多个分页插件,请检查系统配置!-程序员宅基地

文章浏览阅读2.2k次。网上好多都是讲一大堆的。。。@SqlParser(filter = true)看到这个应该就懂了,不懂就百度@SqlParser(filter = true)的使用也可以看这篇,写的很长很细https://blog.csdn.net/nibonnn/article/details/107228201

开关电源的PCB设计规范_电源板pcb设计规则-程序员宅基地

文章浏览阅读1.5k次。开关电源的PCB设计规范在任何开关电源设计中,PCB板的物理设计都是最后一个环节,如果设计方法不当,PCB可能会辐射过多的电磁干扰,造成电源工作不稳定,以下针对各个步骤中所需注意的事项进行分析: 一、从原理图到PCB的设计流程 建立元件参数->输入原理网表->设计参数设置->手工布局->手工布线->验证设计->复查->CAM输出。 二、参数设置相邻导线间距必须能_电源板pcb设计规则

SQL基本注入演示-程序员宅基地

文章浏览阅读423次。作者:ZERO 所属团队:Arctic Shell参考文献:《sql注入攻击与防御》使用平台:pikachu漏洞练习平台导语: 在owasp发布的top10排行榜中注入漏洞一直是危害排名极高的漏洞,数据库注入一直是web中一个令人头疼的问题。 一个严重的SQL注入漏洞,可能会直接导致一家公司破产!这并不是戏言,其实SQL注入漏洞最主要的形成原因是在进行数据交互中,当前端的数据传...

mybatis generator StringIndexOutOfBoundsException异常_mybatis报string index out of range -1-程序员宅基地

文章浏览阅读4.8k次。在使用 mybatis generator 生成代码的时候,如果出现 java.lang.StringIndexOutOfBoundsException: String index out of range: -1 异常,请检查 table 标签下的 domainObjectName属性值首字母是否为大写。修改完成后,问题解决! [INFO] --------------------_mybatis报string index out of range -1

交换机端口mtu值最大_->>【SDN】交换机MTU配置总结-程序员宅基地

文章浏览阅读6.8k次。本文主旨:好记性不如烂笔头,本文资料源自网络,主要目的为梳理终结,如有侵权,联系必删。摘要:在使用基于 VXLAN 的 SDN 解决方案时,对物理网络的基本要求是修改 MTU,让其大于1600 (NSX),下面总结了几大厂商不同型号或版本交换机的配置,以后会不断更新,也请有过配置经验的同行帮忙补充。配置简介:一般配置 MTU 时,需要配置端到端沿途所有设备,如果源和目标在同一个网段,则只需要配置沿..._交换机mtu怎么设置

USB连接示波器_示波器测量usb信号_zu7543的博客-程序员宅基地

文章浏览阅读1.3k次。USB连接示波器_示波器测量usb信号

随便推点

8086 及其汇编_8086汇编-程序员宅基地

文章浏览阅读5.7k次,点赞20次,收藏127次。1 基础知识1.1 汇编语言的组成机器码:一串二进制数,由 CPU 执行汇编指令:由对应机器码的指令,要通过编译器编译为机器码才能够运行伪指令:对汇编过程进行控制的指令,不能被运行,需要翻译成汇编指令1.2 指令和数据在内存或磁盘上,指令和数据没有区别,都是一串二进制数据CPU 工作时,将有的信息看作指令,有的看做数据1.3 CPU 对存储器的读写存储器被划分成多个单元,存储单元从 0 开始编号,即地址CPU 要想进行数据读写就必须进行 3 类信息交互存储单元的地址(地址信息)是读_8086汇编

QtConcurrent::run() 的使用-程序员宅基地

文章浏览阅读2k次。QFutureT>run(constClass*object,T(Class::*fn)(Param1,Param2,Param3,Param4,Param5)const,constArg1 &arg1,constArg2 &arg2,constArg3 &arg3,constArg4 &arg4,constArg5 &arg5)run()函数的

日本与日料-程序员宅基地

文章浏览阅读210次。很多人问什么是唐朝的滋味回答很简单可以去日本试试,近些年由于身边朋友开始沉迷日料,北京大大小小的日料基本都吃过一二。日料口味片清淡,多以甜鲜咸为主,食材也比较新鲜。长期使用顿感益寿延年,不过所有我们的中国胃口却总觉意尤未尽,兴义阑珊。用李逵的话说,都快淡出个鸟了。饮食反应了民族的性格,是我们底层基因的显性表达。 ..._520 日料

DB2 SQL Error: SQLCODE=-433, SQLSTATE=22001已解决_sqlcode-433-程序员宅基地

文章浏览阅读2.8w次。原因是建的表我自以为有一个字符串属性的长度是16,结果后来发现增加一条item其属性是长度为36的字符串(java.util.UUID),因增加时数据项属性不对应发生异常报错。..._sqlcode-433

<位操作>int转char_int转换为char低八位-程序员宅基地

文章浏览阅读2.7k次。在需要将int转为char的时候,可使用位操作进行赋值。 由于int为32bit大小即4个字节,char为8bit大小即1个字节。所以在赋值时,一个int对应4个char的大小,需要在发送时,将一个int拆成四个char发送,再在接收时,将四个char拼接成一个int,示例代码如下所示: 发送方unsigned int cmd;unsigned char sub_cmd_int转换为char低八位

【Android 教程系列第 12 篇】常用 App 的 URL Scheme_安卓常用应用的url scheme_Allen Su的博客-程序员宅基地

文章浏览阅读3.9k次,点赞10次,收藏33次。常用 App 的 URL Scheme_安卓常用应用的url scheme

推荐文章

热门文章

相关标签