欢迎光临散文网 会员登陆 & 注册

MMD联动Unity学习笔记 Vol.14

2019-05-11 22:04 作者:NXL2  | 我要投稿

前言

    从这期开始我把标题稍微改一下,原因嘛,这根本就不是日志,每周不定期随缘更新。所以我还是改为笔记吧。这回我们还是继续学习Visual Effect Graph,还是接着13期的内容,这期我们将给粒子特效附加一个广泛的力,来控制它移动到何处。事实最近四期内容都是照油管上学得,因为得技术上网,所以不贴出处了。

具体操作

    

最终效果

    我们将使用一些额外的节点和另一个我们没有用过的叫做“VFX Parameter Binder”的组件。当我们完成时,我们可以用一个空物件来引导火焰跟随粒子系统,指挥它们朝向我们选定的空间内的一个3D点,这样我们还将用VFX产生一个新的交互层次。

如果你没有详细看过系列以往的笔记,推荐你去看一下第10期以后的笔记。

Force块

在Update文本的底部,右击新建一个块或者按空格键,选择Force>Force,保持默认参数不变,等待编译然后刷新。现在不会看到很大不同。我们回到编辑器,在世界X轴方向有一个很小的力推动粒子,现在不太容易看清楚,我们将推力提升到20到25之间,可以明显看到粒子向x轴正方向活跃地流动起来。

向X轴方向运动

我们把值调低一点,可以看到粒子像烟环绕并漂荡在矢量场附近。但我们还要将吸引力将粒子拉到顶上。所以我们要用两种力同时在这里作用。

原理图解

    我们所要做的是在空间中确定一个点,来吸引粒子。我们叫它吸引目标位置,在一段特定时间内。我们的系统可能看起来像带着许多粒子,如果你有当前一个单独粒子的位置,你可以决定粒子到我们目标位置的方向,使用一些简单矢量数学,从目标坐标减去粒子的坐标,得到这个矢量代表差值,本质上它是方向。把方向输入到Force块中,我们可以推或拉依据你视图中的点,它是粒子朝向的一个单独的3D点。

Force块设置

    要实现这个我们首先要将Force块中的Absolute(绝对)模式切换到Relative(相对)模式,然后还要给Velocity一个的Vector3类型的参数,直到可输入我们想要的我们将补充一个方向矢量。

    在黑板里创建一个Vector3的参数,点击加号选择Vector3,重命名为Attractive Target Position,勾选Expose暴露给检查器,保持默认值,在Tooltip中输入“使用VFX参数绑定到附加目标游戏物体”,我们在后面解释它的意思。将参数拖到工作区域,我想要得到这个3D位置到这个给定粒子的位置的差异值,我需要改变坐标系统到粒子的局部空间,我们用一个改变空间的节点很容易做到。创建节点,选择Operator>Math>Geometry>Change Space,将Attractive Target Position连接到Change Space节点上,它将Attractive Target Position转换到一个独立粒子的Local Space(局部空间),直到它自己得到粒子位置。我们可以用另一个节点来做到,Operator>Attribute>Get Attribute position。现在我们有一对3D位置信息,我们需要用一个减法节点得到它们的差值,我们增加节点Operator>Math>Arithmetic>Subtract,用它可以得到一个从粒子到目标的矢量方向。如果你只做减法,这些矢量将全部变成不同的大小,我们不想粒子产生不同的速度,所以我们要添加另一个节点来使每一个节点统一标准。添加节点Normalize,将Subtract的结果与其相连,它将使每个方向化矢量转化成一个单位矢量的大小。我们在连接到Force Velocity之前,在上面添加命名为AttractiveStrength的参数。在黑板点击加号添加float类型的参数,命名为Attractive Strength,勾选暴露给外面,我们给它一个在10到15之间的默认值,在Tooltip里面输入“吸引力倍数”,将它拖到工作区域,在右侧节点添加Operator>Math>Arithmetic>Multiply,我们再把Normalize得到的结果连接到Multiply的B点位置,最后把Multiply的节点连接到Force块是Velocity上。

如图设置

我们回到场景中,点击VFX,保持它的位置和旋转值均为0。如果你想要重构建效果,移动摄像机来说更简单一点。我们已经暴露了一个矢量给“Attractive Target Position”参数,我们保持它的位置为(0,0,0),在场景中它不会关联任何物件,我们想要用一个真正Transform连接到这个参数,可以围绕它。创建一个空物体,命名为VFXAttractiveTarget,这是我们常用的游戏物件,我们却只使用它包含的一个位置信息,

我们可以创建一个特别连接点,在一个参数和一些在场景中使用的叫做Binder的特殊的组件之间。

在此处我们想要绑定一个带有Vector3位置的参数,选择VFX,在检查器中增加组件,输入VFX我们可以看到很多组件,这里我想要得是VFX Parameter Binder,点击加号,添加Transform>Position,选中它,打开它的详细内容,点击右侧图标,我想选择一个特定的Vector3参数,我们只有一个选项就是Attractive Target Position。在Target选项空白处,我们想选择一个Transform让这个参数吸附,我们这里选择刚才创建的空物件VFXAttractiveTarget,它将使我们用参数连接游戏的对象。

现在我们拖动VFXAttractiveTarget,观察粒子跟随它围绕运行。我们可以给空物件加一个ICON,更好的观察。

你可能会想在VFXAttractiveTarget层级下加一个Cube或Sphere,它可以帮助你看到火焰怎么向着目标位置缓行。使用Attractive Strength参数调节力量的强度。

如果你想要用户控制拖动的力量或者空气阻力,你可以在黑板上增加一个float类型的参数,命名为AttractiveDrag,暴露到外面,拖到工作区域与Force的Drag相连接。

    下面我们还可以实验性地对初始文本进行改进,现在我们使用得是从一个圆环的横截面移动来产生粒子,我们可以选择一个不同的首选做为源Position(位置),我们把Torus块禁用,用Sphere替代它创建一个新的位置块。右键选择Position>Sphere,我们可以看到粒子的形状更加明显。

如果我们想把图表分享给其他人,我们可以给节点增加组群,选中想要合并的节点,右击选择Group Selection,可以给组群修改名称,你还可以拖动整个组群。如果你想要记录细节,我们可以在一旁增加便签,右击选择Create Sticky Note,可以改变字体大小,在里面记录图表的有关信息。

最终图表



MMD联动Unity学习笔记 Vol.14的评论 (共 条)

分享到微博请遵守国家法律