布料
布料是特殊的组件,它可以变化成任意形状,比如说:随风飘的旗子,窗帘等
创建布料的方法有两种:创建布料对象,在游戏对象中添加布料组件。前者通过hierarchy视图中选择create——cloth即可,创建后,系统会自动将互动布料组件(interactive clothe)与布料渲染组件(cloth renderer)添加值该对象中。后者是在导航菜单中选component——physics——interactive cloth菜单项即可。
交互布料组件是由网格组成的布料,只要用于布料的逻辑判断,应用于摩擦,密度,气压等影响布料的效果,影响到布料的具体物理数值之间的判断。
布料渲染是给布料绘制一张贴图使指更加美观。
布料皮肤(skinned cloth)是用来模拟人物模型皮肤的布料,比如说衣服,裤子等。这些布料会根据角色骨骼动画的运动而发生改变。
bending stiffness:硬度,取值0-1。
stretching stiffness:韧度,取值0-1。
damping:阻力,取值0-1。
thickness:厚度,直接影响布料的质量大小。
user gravity:只用重力。
self collision:自身碰撞。
external acceleration:作用于布料的一个外力,影响布料的默认行为。
random acceleration:随机外力。
mesh:网格面,决定布料的形状。
friction:摩擦力,取值0-1.
density:密度,数值越大布料的质量越高。
pressure:气压。
collision response:与其他模型碰撞后的反馈。
attachment tear factor:附带撕破系数。
attachment response:附带反馈。
tear factor:撕破系数,值越大越不容易撕破。
attached colliders:附带碰撞器。
本文将总结回顾一个布料实例,点击左侧的按钮可以控制平面对象的移动方向,由于会和正方体发生碰撞,所以布料会变形。
using UnityEngine; using System.Collections; public class Script_06_12 : MonoBehaviour { //布料对象 Cloth cloth = null; void Start() { //获取布料对象 cloth = (Cloth)GetComponent<InteractiveCloth>(); } void OnGUI() { //移动布料 if(GUILayout.RepeatButton("向上")) { cloth.externalAcceleration = new Vector3(0,1,0); } if(GUILayout.RepeatButton("向下")) { cloth.externalAcceleration = new Vector3(0,-1,0); } if(GUILayout.RepeatButton("向左")) { cloth.externalAcceleration = new Vector3(1,0,0); } if(GUILayout.RepeatButton("向右")) { cloth.externalAcceleration = new Vector3(-1,0,0); } } }
运行:
点击按钮后:
【Unity 3D】学习笔记四十三:布料