PathCreator使用教程:用PathCreator实现自定义轨迹动画与路径控制

【Unity笔记】PathCreator 使用教程:用 PathCreator 实现自定义轨迹动画与路径控制

引言

PathCreator 是 Unity Asset Store 上由 SebLague 开发的免费工具包(GitHub: SebLague/Path-Creator),专为创建和编辑 Bézier 曲线路径设计。它支持在编辑器中可视化绘制路径、实时预览和运行时动画控制,适用于自定义轨迹动画(如角色巡逻、相机轨道、粒子轨迹)和路径引导(如道路生成、AI 导航)。相比 Unity 内置的 LineRenderer 或 AnimationCurve,PathCreator 提供更灵活的编辑工具(如手柄拖拽)和扩展性(如 Playmaker 集成)。

核心功能:

  • 路径编辑:Bézier 曲线,支持线性/二次/三次样条。
  • 动画控制:BeziersPathContainer 和 PathFollower 组件实现物体沿路径移动。
  • 自定义轨迹:支持速度曲线、旋转控制和事件触发。
  • 性能:运行时高效,编辑器实时反馈。
  • 适用版本:Unity 2018.4+(推荐 2022.3 LTS),免费下载(Asset Store ID: 171693)。

本教程基于 PathCreator 2.0+(2023 年更新),结合 C# 脚本实现轨迹动画。下载后导入项目,教程分步骤讲解。时间复杂度 O(n),n 为路径点数(推荐 < 1000 以保持性能)。

安装与初始设置

  1. 下载插件
  • Asset Store 搜索 “Path Creator” > Import(免费)。
  • 或 GitHub 下载(https://github.com/SebLague/Path-Creator),导入 .unitypackage。
  1. 场景设置
  • 创建空 GameObject > Add Component > Path Creator(添加路径编辑器)。
  • 在 Hierarchy 选中路径对象,Scene View 中出现路径绘制工具(点击添加点,拖拽手柄调整曲线)。
  1. 基本路径创建
  • Scene View 工具栏 > Path Creator Tools(或右键 > Path Creator > Edit Path)。
  • 添加点:点击场景添加控制点。
  • 编辑:拖拽点/手柄调整 Bézier 曲线;支持闭合路径(Loop)。

自定义轨迹动画实现

PathCreator 的动画核心是 PathFollower 组件:将物体附加到路径上,支持速度控制和旋转跟随。

步骤1: 创建路径并配置

  • 添加 PathCreator 组件的对象作为路径容器(BeziersPathContainer)。
  • 编辑路径:设置 Global Path Distance(路径长度单位)。

步骤2: 附加 PathFollower 实现动画

using UnityEngine;
using PathCreation;  // PathCreator 命名空间

public class TrajectoryAnimator : MonoBehaviour
{
    [Header("路径设置")]
    public PathCreator pathCreator;  // 拖拽路径对象

    [Header("动画控制")]
    public float speed = 5f;         // 移动速度
    public bool orientToPath = true; // 面向路径方向
    public bool loop = true;         // 循环播放
    public AnimationCurve speedCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f);  // 速度曲线

    private PathFollower pathFollower;

    void Start()
    {
        pathFollower = gameObject.AddComponent<PathFollower>();
        pathFollower.pathCreator = pathCreator;
        pathFollower.speed = speed;
        pathFollower.orientToPath = orientToPath;
        pathFollower.loop = loop;

        // 应用速度曲线(自定义)
        StartCoroutine(AnimateWithCurve());
    }

    IEnumerator AnimateWithCurve()
    {
        float distanceTravelled = 0f;
        float pathLength = pathCreator.path.length;

        while (true)
        {
            distanceTravelled += speed * Time.deltaTime;
            if (loop) distanceTravelled %= pathLength;

            float normalizedDistance = distanceTravelled / pathLength;
            float curveSpeed = speedCurve.Evaluate(normalizedDistance);

            pathFollower.speed = curveSpeed;
            pathFollower.distanceTravelled = distanceTravelled;

            yield return null;
        }
    }

    // 公共方法:动态控制
    public void SetSpeed(float newSpeed)
    {
        speed = newSpeed;
        pathFollower.speed = newSpeed;
    }

    public void JumpToPercentage(float percentage)
    {
        pathFollower.distanceTravelled = percentage * pathCreator.path.length;
    }
}
  • 解释
  • PathFollower:内置组件,自动沿路径移动物体。
  • speedCurve:AnimationCurve 控制变速(如加速/减速轨迹)。
  • orientToPath:物体旋转跟随路径切线,实现平滑转向。
  • JumpToPercentage:支持跳跃到路径特定点(如事件触发)。

步骤3: 路径控制高级应用

  • 事件触发:使用 OnPathWaypointReached 回调。
public class PathEventTrigger : MonoBehaviour
{
    public UnityEngine.Events.UnityEvent onWaypointReached;

    void OnEnable()
    {
        PathFollower follower = GetComponent<PathFollower>();
        follower.waypointReached += OnWaypoint;
    }

    void OnWaypoint(int waypointIndex)
    {
        onWaypointReached?.Invoke();  // 到达点时触发事件
    }
}
  • 相机轨道动画:附加到 Camera,实现自定义镜头路径。
public class CameraPathController : MonoBehaviour
{
    public PathCreator cameraPath;

    void Start()
    {
        PathFollower follower = gameObject.AddComponent<PathFollower>();
        follower.pathCreator = cameraPath;
        follower.speed = 2f;
        follower.orientToPath = false;  // 相机不旋转跟随
    }
}

路径控制技巧

  • 编辑器工具
  • Scene View:启用 Path Creator Tools,添加/删除点,调整手柄(Tangent Mode: Free/Broken/Aligned)。
  • 预览:选中路径对象,按 Play 观察动画。
  • 运行时控制
  • 修改路径点:pathCreator.beziers[0].ControlPointPosition = newPos;
  • 动态添加点:pathCreator.beziers.Add(new BezierPathSegment(…))。
  • 性能优化
  • 减少路径点数(< 200)。
  • 使用 pathCreator.path.GetPointAtDistance(distance) 手动采样,避免 PathFollower 开销。
  • 扩展
  • 集成 DOTween:平滑插值路径点。
  • 与 NavMesh 结合:AI 路径引导。

常见问题解决

问题原因解决方案
路径不平滑手柄未对齐设置 Tangent Mode 为 Aligned
动画卡顿点数过多简化曲线,使用 Linear Interpolation
物体翻转orientToPath 冲突调整 Up Vector 或使用 Look Rotation
编辑器预览失效路径未选中选中 PathCreator 对象,按 Scene View 工具

资源链接

  • 官方 GitHub:https://github.com/SebLague/Path-Creator (源码与示例)。
  • YouTube 教程:https://www.youtube.com/watch?v=saAQNRSYU9k (Path Creator 介绍)。
  • Asset Store:https://assetstore.unity.com/packages/tools/utilities/path-creator-171693 (免费下载)。
  • 扩展工具:结合 Dreamteck Splines(付费)实现更复杂路径。

PathCreator 是高效的路径动画解决方案,适合自定义轨迹需求。如果需要完整项目示例或与动画系统的集成,请提供更多细节!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注