Unity 塔防自用可视化路点寻路编辑器

插件源码可见, 你能学到

  • 可视化场景编辑器
  • 贝塞尔路径设计
  • Unity Editor扩展
  • 更多扩展,可地形生成,地图笔刷

使用方法

设置地面

新建路径

寻路编辑器界面位置: Tools/Pathfinding Editor

按住Shift键 鼠标左键点击 新建路点, 按Delete键删除节点

控制点编辑

移动组件

数据以序列化的形式存储

高性能, 无额外的场景节点,不生成空节点

csharp 复制代码
using UnityEngine;
using System;

[System.Serializable]
public class Waypoint
{
    [Header( "基础设置" )]
    [SerializeField] public Vector3 position;
    [SerializeField] public float radius = 1f;
    [SerializeField] public Color color = Color.white;
    [SerializeField] public string name;

    [Header( "贝塞尔控制点" )]
    [SerializeField] public Vector3 forwardControlPoint;  // 前向控制点
    [SerializeField] public Vector3 backwardControlPoint; // 后向控制点
    [SerializeField] public bool showControlPoints = true;
    [SerializeField] public bool autoCalculateControlPoints = true;
    [SerializeField] public float controlPointDistance = 2f; // 控制点距离

    public Waypoint( Vector3 pos, string waypointName = "" )
    {
        position = pos;
        name = string.IsNullOrEmpty( waypointName ) ? "Waypoint" : waypointName;

        // 初始化控制点
        forwardControlPoint = pos + Vector3.forward * controlPointDistance;
        backwardControlPoint = pos + Vector3.back * controlPointDistance;
    }

    // 获取世界坐标的前向控制点
    public Vector3 GetWorldForwardControlPoint( )
    {
        return position + forwardControlPoint;
    }

    // 获取世界坐标的后向控制点
    public Vector3 GetWorldBackwardControlPoint( )
    {
        return position + backwardControlPoint;
    }

    // 设置世界坐标的前向控制点
    public void SetWorldForwardControlPoint( Vector3 worldPos )
    {
        forwardControlPoint = worldPos - position;
    }

    // 设置世界坐标的后向控制点
    public void SetWorldBackwardControlPoint( Vector3 worldPos )
    {
        backwardControlPoint = worldPos - position;
    }

    // 自动计算控制点
    public void AutoCalculateControlPoints( Waypoint previousWaypoint, Waypoint nextWaypoint )
    {
        if ( !autoCalculateControlPoints ) return;

        Vector3 direction = Vector3.zero;

        if ( previousWaypoint != null && nextWaypoint != null )
        {
            // 中间点:使用前后路点的方向
            direction = ( nextWaypoint.position - previousWaypoint.position ).normalized;
        }
        else if ( nextWaypoint != null )
        {
            // 起始点:使用到下一个点的方向
            direction = ( nextWaypoint.position - position ).normalized;
        }
        else if ( previousWaypoint != null )
        {
            // 结束点:使用从上一个点的方向
            direction = ( position - previousWaypoint.position ).normalized;
        }

        forwardControlPoint = direction * controlPointDistance;
        backwardControlPoint = -direction * controlPointDistance;
    }
}

[System.Serializable]
public class PathData
{
    [SerializeField] public string pathName = "New Path";
    [SerializeField] public Waypoint[] waypoints = new Waypoint[ 0 ];
    [SerializeField] public bool useBezierSmoothing = true;
    [SerializeField] public int bezierResolution = 20;
    [SerializeField] public Color pathColor = Color.yellow;
    [SerializeField] public float pathWidth = 0.1f;

    [Header( "控制点设置" )]
    [SerializeField] public bool showAllControlPoints = true;
    [SerializeField] public Color controlPointColor = Color.cyan;
    [SerializeField] public Color controlLineColor = Color.gray;
    [SerializeField] public float controlPointSize = 0.3f;
}

工具下载

CSDN下载链接

视频地址

Unity 塔防可视化路点编辑器 - 运行时高性能 无额外渲染节点 纯数据处理

相关推荐
技术探讨者1 天前
极境导表工具 —— 让配置数据成为游戏开发的效率引擎
unity·编辑器·ai编程·游戏策划
游乐码1 天前
Unity基础(六)小案例
游戏·unity·游戏引擎
AI小百科1 天前
目前开源AI编辑器面临的主要挑战是什么
人工智能·开源·编辑器
爱吃龙利鱼1 天前
MobaXterm连接ubuntu26.04无法在vim界面粘贴问题解决方法(粘贴会提示进入进入可视模式VISUAL))
linux·ubuntu·编辑器·vim
秋91 天前
Cursor 编辑器:下载、安装与深度使用详解
编辑器
Sator11 天前
Unity2022版接入MCP
unity·ai编程
小则又沐风a1 天前
一步搞定Xshell远程连接vscode的问题
ide·vscode·编辑器
Codiggerworld2 天前
Vim配置从0到1:打造专属编辑器
编辑器·vim·excel
lqj_本人2 天前
鸿蒙electron跨端框架PC青简笔记实战:从笔记列表、编辑器到桌面导出,一次做完整
笔记·编辑器
相信神话20212 天前
第四章:创建《酒魂》项目与场景结构
游戏·游戏引擎·godot·2d游戏开发