一、前言

关于路线插件,Unity商店有一个简单好用且免费插件——Bézier Path Creator (https://assetstore.unity.com/packages/tools/utilities/b-zier-path-creator-136082)。可以支持路径运行和路线物体排序。使用比较简单这里就不过多介绍,这里主要讲的是另一款更强大的路线插件——Curvy Spline (https://assetstore.unity.com/packages/tools/utilities/curvy-splines-7038)。当然这是一款收费插件,我改用Curvy Spline 的重要原因是它拥有Bézier Path Creator没有的两个重要功能(其实多出的远不止两个功能)。一个是它支持动态生成mesh;二是分叉路线切换运行。但Curvy Spline一个很大缺点就是学习上手成本比较大。这次讲讲他的主要使用。

二、Curvy Spline使用

(一) 路线编辑

导入插件后再Scene窗口会多出及个工具菜单

android运动轨迹绘制 运动轨迹生成软件_unity


其中Create里的Shape是几个插件内置的路线图形,

android运动轨迹绘制 运动轨迹生成软件_unity_02


而旁边的Generator则是一个蓝图编辑工具编辑工具

android运动轨迹绘制 运动轨迹生成软件_贝塞尔曲线_03


DrawSpline就是我们路线点绘制工具

android运动轨迹绘制 运动轨迹生成软件_unity_04


如图可以选择不同平面进行绘制,按住Ctrl键然后在Scene中即可用鼠标点击绘制

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_05


同时会在Hierachy窗口生成相应的元素对象

android运动轨迹绘制 运动轨迹生成软件_贝塞尔曲线_06


插值模式中我们最常用的应该是贝塞尔曲线,选择的贝塞尔曲线就可以很灵活的在每个贵点点进行曲度编辑

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_07

(二)动态Mesh生成

首先要创建打开编辑蓝图

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_08


右键点击添加Shap Extrusion

android运动轨迹绘制 运动轨迹生成软件_unity_09


构成动态mesh的4个基本块如下:

android运动轨迹绘制 运动轨迹生成软件_mesh_10


形成的mesh效果如下

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_11


一个mesh中也可以使用多个材质球,首先要在蓝图的ShapeExtrusion勾选材质和展UV,还要在Volume里再添加一个材质球,然后材质球就有默认的编号Mat0,Mat1。

android运动轨迹绘制 运动轨迹生成软件_贝塞尔曲线_12


最后在对应的形状节点选择需要使用的材质ID,以及使用位置,相当于分UV.

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_13


我这里使用了一个金属材质和全透明材质

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_14

(三) 排序模型

添加排序模型需要增加如下3个蓝图组件

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_15


效果如下

android运动轨迹绘制 运动轨迹生成软件_游戏引擎_16


再增加一个物体排序

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_17

(四)路线运动

需要让物体沿轨迹运动,挂上SplineController脚本即可

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_18


实现路径岔道运行,则需要先把两条路径的点连接起来,选中两点,然后点击菜单工具的Connect即可

android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_19


android运动轨迹绘制 运动轨迹生成软件_android运动轨迹绘制_20


然后再在运动物测上挂一个代码

public class SplineTest : MonoBehaviour
{
    public SplineController splineController;
    void Start()
    {
        //运行到每个节点触发
        splineController.OnControlPointReached.AddListenerOnce(OnCPReached);
    }

    private void OnCPReached(CurvySplineMoveEventArgs arg0)
    {
        //切换一条路径
        splineController.ConnectionBehavior = SplineControllerConnectionBehavior.RandomSpline;
        Debug.Log(arg0.ControlPoint);
    }
}

这样就能在运动到交叉节点切换路线了。