目录 |
1 场景搭建 2 Mesh调节器 2.1 准备 2.2 顶点速度 3 Mesh 调节器的输入 3.1 输入检测 3.2 施加力 3.3 力偏移 4 最基础的变形 4.1 将力转换为速度 4.2 移动顶点 5 保持形状 5.1 弹簧 5.2 阻尼 6 处理变换 6.1 调整缩放 |
本章内容重点
向对象投射射线并绘制调试线。
将力转换为顶点速度。
用弹簧和阻尼保持形状。
补偿对象转换。
这篇教程的主要内容是介绍一下网格变形。把网格变成一个弹力球,然后戳它。
本教程是CatLikeCoding系列的一部分,原文地址见文章底部。“原创”标识意为原创翻译而非原创教程。
这篇教程是基于上一篇 立方体球 的。它复用了同一个网格,并在此基础上做增加更多的测试模型。本示例适用于Unity5.0.1及以上版本。
(施加了一些按压操作)
1 场景搭建
我们会从一个以单个立方体球体为中心的场景开始。你既可以从头开始,也可以复用上一章 立方体球 的场景,然后删除所有多余的东西。
为了获得平滑的变形效果,球体应该包含相当数量的顶点。我把球体的网格大小设为20,半径设为1。
(从一个规则的立方体球开始)
2 Mesh调节器
创建一个新的MeshDeformer脚本来处理变形。就像立方体球面组件一样,它需要一个mesh filter组件来处理。
(添加完组件之后的展示)
这里需要注意,和前面的章节不同,这里我们只需要mesh filter。这里我们不在乎它是如何得到网格数据的。而现在正在使用我们的程序生成的 立方体球,但其实它可以是任何网格。
2.1 准备
要进行任何的变形,我们都需要访问Mesh。一旦我们有了Mesh,就可以提取到原始的顶点位置。除此之外,还必须跟踪变形过程中的位移点。
在Start方法中对网格及其顶点进行赋值,并将原始顶点复制到移位点。
之所以要使用Start,是因为我们需要在Awake时生成过程网格,因为Awake总是在Start前被调用。这种方法依赖于其他组件在Awake时处理好他们自身的东西,Awake本身的先后顺序并不能保证,所以你其实可以在Unity的设置里自己调节脚本执行顺序,以强制执行第一和最后的脚本。
2.2 顶点速度
当网格变形是由顶点移动造成的。所以我们还必须存储每个顶点的速度。