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

相关推荐
魔士于安3 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
weixin_464078073 天前
ppt转为draw.io方法
编辑器
小贺儿开发4 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水4 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
小小数媒成员4 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
林川~015 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发5 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
一木 之林5 天前
手搓家庭服务器:二手装机、Docker部署、端口映射与frp内网穿透
服务器·人工智能·git·编辑器
goujunwe5 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~016 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具