原作者:只待苍霞

这一章讲一下布料系统, 这次的布料系统有很大的改良.
Unity4中, 需要对SkinnedMeshRenderer使用SkinnedCloth, 或者对Cloth Renderer使用Interactive Cloth, 很麻烦, 在Unity5中, Cloth合二为一了.
Cloth只能必须和Skinned Mesh Renderer搭配使用, 但是这不代表使用简单的物体时还必须在Max中导出一个带有蒙皮信息的FBX, 其实可以新建一个GameObject然后赋予Cloth组件, 这会自动添加Skinned Mesh Renderer组件, 然后在Skinned Mesh Renderer组件中赋予基本体的Mesh上去并且设置正确的材质也完全可以.

布料可以接受外部影响,但完全不会将影响赋予外部刚体, 换句话说, 布料系统的物理模拟是单向的.

出于性能的考虑, 可以对Cloth产生影响的Collider只有两种, SphereCollider以及CapsuleCollider, 但是SphereCollider可以赋予两个为一组(当然了还可以只赋予一个, 第二个保持null), 那么通过组合这两个SphereCollider可以出现第三种, Unity会将这组的两个SphereCollider进行相连, 那么就可以有圆锥形的Collider.

按这个
按钮来打开编辑Constraint模式,
Max Distance可以设置每个顶点最大可移动距离. 最常用的用法是将不能动的顶点的Max Distance设置为0.
Surface Penetration控制的是顶点最大可以嵌入到Mesh里面的程度. 在布料网格顶点比较稀疏的情况下可以明显对比出差别. 具体是什么概念我不太清楚. 不过将顶点的Surface Penetration设置得很低会看起来很不正常, 默认, 也就是Unconstrained应该是一个较高的值, 没有任何问题. 不知道在什么情况下需要将这个值设置得低一些呢? 哪位大神知道的话欢迎在本楼补充.


Visualization这里能够选择当前在Scene视图中预览Max Distance还是Surface Penetration. (这两者二选一), 还能选择是否让操作影响视口背面的顶点.

Select编辑模式要先通过框选, 或者Shift+点击来多选, 来选中顶点, 然后勾选Max Distance或者Surface Penetration前面的复选框, 代表我现在要改变选中的顶点的值了! 然后再在后面的数值里面输入想要的数值就OK了, 要想将当前有数值的顶点设置为Unconstrained, 只需要选中那些带有数值的顶点然后将对应复选框取消勾选即可.

在Paint模式中, 这个按钮
代表要绘制这里设置的值了!
而这个复选框代表的意思是是否想为现在已经有值的顶点Paint成为Unconstrained的顶点.

Stretching Stiffness---拉扯硬度.
Bending Stiffness---弯曲硬度.
Use Tethers---默认开启, 用于方式过度拉伸
Use Gravity---是否使用世界重力.
Damping---阻尼会应用于每个布料顶点. 要想打造看上去抖动更小的布料, 可以试试这个.
External Acceleration---常量外力.
Random Acceleration---随机外力.
World Velocity Scale---与World Acceleration Scale共同组成布料的GameObject.transfrom的运动会对物理模拟造成的影响比例.
World Acceleration Scale---与World Velocity Scale共同组成布料的GameObject.transfrom的运动会对物理模拟造成的影响比例.
Friction---当布料碰到在
这个列表中存在的Collider时所产生的摩擦力, 这只会影响布料的模拟. 上面说过了布料的物理模拟是单向的.
Collision Mass Scale---How much to increase mass of colliding particles. 这个参数我不懂, 求补充.
Use Continuous Collision---使用Continuous Collision, 增加消耗, 减少直接穿透碰撞的几率.
Use Virtual Particles---Add one virtual particle per triangle to improve collision stability.
Solver Frequency---Number of solver iterations per second. 显然是一个优化参数, 默认120很高了, 我可以试着调低一些.
Sleep Threshold---静止阈值.
Capsule Colliders---要对布料产生交互的胶囊碰撞体.
Sphere Colliders---要对布料产生交互的ClothSphereColliderPairs. 可以理解为他是按照一组来的, 一组中可以只有一个SphereCollider, 也可以有两个, 当有两个的时候, 那么这两个SphereCollider会在布料的碰撞系统中被”焊接”起来. 这样就允许通过两个大小不同的SphereCollider来组合成一个圆锥形状的碰撞体了.

这一章讲一下动画系统的更新.

首先要说一下StateMachineBehaviour.

可以为Animator的每个State都赋予一个或多个Behavior.

使用这里的New Script按钮来创建StateMachineBehaviour是最方便的, 这样创建出来的脚本不仅自动继承自StateMachineBehaviour类, 还会自动添加经过注释的Message.

需要注意的是, 不要在Awake中使用Animator.GetBehaviour.

StateMachineBehaviour可用的内容有:

上面这些是用于State的.

上面这两个是用于SubStateMachine的.

对于StateMachineBehaviour,可以使用一个SharedBetweenAnimatorsAttribute属性, 有了他, 在多个相同的Animator之上, 仅会生成一个实例. 既然是一个实例, 那么变量当然也是共享的.


IK现在支持膝盖和手肘的控制. 可以混合在正常动画中, 还可以混合在手脚的IK动画中. 我不清楚这到底是不是5.0的新功能, 反正我以前通读Unity4的文档的时候是没有这个功能的, 那时应该是4.1, 不管了, 先写在这里吧, 知识这东西不嫌多.

Animator窗口的布局有一定的改动不过不是什么重要的内容各位自行研究一下就懂了. 但是这次的Animator有一个很好的改动, 那就是加入了Entry以及Exit. 
The Entry node is used when transitioning into a state machine.
The Exit node is used to indicate that a state machine should exit.
有了Entry和Exit, 对于SubStateMachine的处理可以更加灵活, 可以通过Entry和Exit将SubStateMachine完全理解为一个单独的State. 或者像Unity5之前那样将SubStateMachine内部的State与外部的东西连接. 
现在可以将State多选然后拖拽到SubStateMachine中, Unity会自动帮你整理他们的Transition关系, 还可以在SubStateMachine中多选State然后拖拽到Up节点, 同样, Unity会自动整理Transition, Unity4在这方面极其尴尬, 用过的都知道. Unity5终于进步了.

橙色的Transition代表是的默认的过渡, 当第一次触发, 或者当前没有其他过渡可用时会使用这个Transition, 灰色的Transition代表的是过渡之前可以是任何State. 因此灰色的Transition只能设置condition, 不能设置过渡的细节, 因为没有任何意义.
SubStateMachine中的Exit和(UP)的区别在于Exit创建的是灰色Transition, 而(UP)创建的是白色的正常Transition.


关于Animator, 多了一种BlendTree的方式, 非常适用于面部动画.
这个模式可以将多个动画混合起来一起播放. 用参数来指定混合比例.

一般情况, Animation的运动是绝对位置的, 要想将绝对位置改变为根动画, 也就是相对位置, 可以使用这个”Generate Root Motion Curves”, 并且将Animator的Apply Root Motion开启.

unity5.0新功能-布料、动画系统的更多相关文章

  1. unity5.0新功能

    原作者 只待苍霞 章节1: 先来两个最关心的新功能, 第一章先讲PBS, 第二章讲光影GI.说到PBS, 首先应该想到的是Unity自带的两个新的Shader, 分别是Standard以及Standa ...

  2. VS2015预览版中的C#6.0 新功能(二)

    VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(三) 自动属性的增强 只读自动属性 以前自动属性必须同时提供setter和getter方法,因而只读属性只能通 ...

  3. VS2015预览版中的C#6.0 新功能(三)

    VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(二) Using static 使用using StaticClass,你可以访问StaticClass类里的 ...

  4. VS2015预览版中的C#6.0 新功能(一)

    VS2015预览版中的C#6.0 新功能(二) VS2015预览版中的C#6.0 新功能(三) VS2015的预览版在11月12日发布了,下面让我们来看看C#都提供了哪些新的功能. 字符串添写(Str ...

  5. REDGATE SQLPROMPT 6.0新功能

    原文:REDGATE SQLPROMPT 6.0新功能 REDGATE SQLPROMPT 6.0新功能 下载地址:http://files.cnblogs.com/lyhabc/SQLPrompt6 ...

  6. Unity User Group 北京站:《Unity5.6新功能介绍以及HoloLens开发》

    ​时间一转眼从春天来到了初夏,Unity User Group(以下简称UUG)活动也迎来了第七期.我们面向Unity3D开发从业者以及未来想从事Unity3D开发的学生群体的UUG活动这次仍然在海淀 ...

  7. (六)Unity5.0新特性------新动画功能

     unity 5.0 中的新动画功能 这里是你能够期待的新动画功能高速概述 ! State Machine Behaviours状态机行为 在Unity 5 中,你会能够将StateMachine ...

  8. Redis 4.0新功能介绍

    Redis 的作者 antirez 在三天之前通过博客文章<The first release candidate of Redis 4.0 is out>发布了 Redis 4.0 的第 ...

  9. ASP.NET Core 2.0 新功能汇总

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...

随机推荐

  1. LINUX 下Open cv练习使用小记(1)

    首先肯定离不开选一张自己喜欢的图像来显示 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp ...

  2. jquery “做页面滚动到某屏时改变状态标题” 所用知识点记录

    浏览器滚动条滚动时触发事件 //浏览器滚动条滚动时触发事件 $(window).scroll(function(){}); 浏览器窗口大小改变时触发事件 //浏览器窗口大小改变时触发事件 $(wind ...

  3. vim常用操作

    vim filename 编辑一个文件 在一般模式里按yy是复制的意思(复制当前行),按yy之前先按相应的数字键就是复制光标所在行到指定的行,然后按p粘贴在一般模式里按dd是删除的意思(也叫做剪切), ...

  4. Google Developing for Android 三 - Performance最佳实践

    Google Developing for Android 三 - Performance最佳实践 发表于 2015-06-07   |   分类于 Android最佳实践 原文 Developing ...

  5. RIO-SEIO水泵流量表

    http://rio-seio.com/TW/products_pumps/Rio_plus.html 流量表:

  6. 在Win2008上运行ASP.NET 1.1程序

    在之前的文章<将Web站点由IIS6迁移至IIS7>中已经提到了关于在Win2008下运行ASP.NET 1.1程序的问题,但还不够完整,因此在这里重新整理一下. 1.要安装.net fr ...

  7. 软件工程—我的IT的新篇章

    这学期开了一门软件工程,在开始学习过程中,我对软件工程充满了浓厚的兴趣,我很享受软件工程带给我的快乐与激情,让我对计算机编程更加的了解与享受,我非常的喜欢这门学科,我对老师的教学方式非常的喜欢,我觉得 ...

  8. 小结一下: web中的人民币

    在编辑器中 shift+4  以为得到的是 两杠人民币符号(¥)---->但是.....在ie6,7,8下怎么不是呀? 对比一下下图: 下面那个是ok的哈: 要用时可以复制一下:     ¥ 完 ...

  9. 【整理】动态加载Web Services

    WebClient client = new WebClient(); String url = "http://localhost/MESAPIWebService/MESAPI.asmx ...

  10. nodejs——qureystring的作用

    当node服务器向另一个服务器发送数据时,首先要转换成字符串再post或者get,这个时候就要用到node内置的这个包querystring, querystring.stringify(data);