栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity应用Handles画线,方便查看点间的路径

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity应用Handles画线,方便查看点间的路径

今天工作碰到一个实现NPC巡逻的功能需求,需要程序实现相关逻辑,并且能够让策划自由配置NPC巡逻路径和NPC交互功能。

这里我就想记录一下我利用Unity的Handles画线的功能实现路径可视化的一种方式吧。可能设计不是很好,欢迎各位大佬提出自己的建议。总之下面来看下这个拓展Unity编辑器功能的自制画线组件吧。先上个效果图:

我的设计是这样的:

Npcs下面存放NPC模型,NPC具体的操作这块,就先不在这边说了。

PointList下面存放地图上NPC巡逻的转折点。可以是地图上的一些岔路口,这样可以明确的告知Unity的Nav寻路AI在某个个路口向下一个路口移动,而不是完全依托Nav本身的功能来实现寻路,这样会有更高的路径确定性。

Paths下面存放策划配置的路径,这边也是需要我所用到的Handles画线工具的地方。可以看到我定义的这个组件非常简单只有三个变量空间:

  1. bool isShowLine=true;//表示是否需要显示线段
  2. Color lineColor;//自定义线条显示颜色
  3. List Paths;//寻路路径转折点

 有了这些信息后再有一个继承Editor的类来实现OnSceneGUI()函数就能实现点的连线了。依然是简单且实用。下面是代码:

///  画线工具 
public class HandlesLineTool : MonoBehaviour
{
    public bool isShowLine = true;
    public Color lineColor = Color.white;
    public List paths = new List();
}
[CustomEditor(typeof(HandlesLineTool))]
public class HandlesLineEditor :Editor
{
    private Vector3[] positions;
    public void OnSceneGUI()
    {        
        HandlesLineTool handles = target as HandlesLineTool;
        if (!handles.isShowLine)
            return;
        Handles.color = handles.lineColor;
        if (handles.paths == null )
        {
            return;
        }

        if (handles.paths.Count > 0)
        {
            positions = new Vector3[handles.paths.Count];
        }

        for (var i = 0; i < handles.paths.Count; i++)
        {
            if(handles.paths[i]==null)
            {
                continue;
            }
            positions[i] = handles.paths[i].position;
        }
        if(positions!=null && positions.Length>0)
        Handles.DrawPolyLine(positions);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号