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 塔防可视化路点编辑器 - 运行时高性能 无额外渲染节点 纯数据处理

相关推荐
淡海水2 小时前
03-03-架构篇-SGen GC架构解析
unity·架构·c#·gc·sgen
/**书香门第*/3 小时前
Cocos Creator 打螺丝游戏的实现
游戏引擎·cocos2d·螺丝·打螺丝
不爱吃鱼的蔓热莓18 小时前
释放VSCode插件占用系统盘垃圾
ide·vscode·编辑器
萌萌的提莫队长20 小时前
Unity相机捕捉,图像识别,抠像+合成
opencv·unity
易知微EasyV数据可视化21 小时前
会插卡片的编辑器:在 Agent 输入框里混排文字与结构化内容
人工智能·经验分享·编辑器·agent·设计
打工仔折腾 AI1 天前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 的建表与增删改查手法
数据库·人工智能·后端·python·sql·编辑器·ai agent 实战
志尊宝1 天前
AI原生前端开发(001):Cursor编辑器深度使用从入门到精通
前端·编辑器·ai-native
martindelophy1 天前
开源 AI 视频编辑器实战:用结构化命令连接视频生成、对话剪辑与浏览器导出
人工智能·编辑器·音视频
小师兄吃牛肉1 天前
SQL 编辑器异常排查:基于 KStudio 的一次实战记录
java·sql·编辑器
(未雨绸缪)1 天前
VScode中AI补全功能开关
编辑器