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

相关推荐
魔士于安8 小时前
unity 音乐会场景 unity2022
游戏·unity·游戏引擎·贴图·模型
一线灵10 小时前
Axmol 3.x 输入系统重构:从 Touch/Mouse 到统一 Pointer,再到现代 InputField
重构·游戏引擎
Zwarwolf10 小时前
Godot零散知识点项目汇总
游戏引擎·godot
Mediary10 小时前
Unity is running with Administrator privileges, which isnot supported...
unity
utf8mb4安全女神11 小时前
HTML网页【vscode】【Linux】
ide·vscode·编辑器
百度搜知知学社12 小时前
一键装裱照片,相框APP内置滤镜与贴纸编辑器
android·编辑器·滤镜·图片编辑·贴纸·相框
游乐码13 小时前
Unity基础(十四)场景异步加载
unity·游戏引擎
mxwin13 小时前
Unity Shader URP:法线在空间变换上的特殊性
unity·游戏引擎·shader
nnsix13 小时前
Unity 动态批处理、静态批处理、GPU Instaning、SRP Batcher 笔记
笔记·unity·单一职责原则
charlee4414 小时前
Unity在安卓端如何调试输出信息
android·unity·adb·游戏引擎·真机调试