Unity 画虚线

昨天公司老大提出要将寻路的路点用虚线的形式显示出来,刚听到这个问题时,感觉有难度,想了好久没有好的解决方案
于是寻求度娘帮助,网上大部分是用shader 画虚线,但是好像都是显示在屏幕上的,并不是在3D空间中显示的。
偶尔发现一个帖子,只是粗略的说了用LineRenderer,再用贴图即可,说的比较笼统。当时也试了但是
效果不理想,主要原因是自己没有仔细看LineRender的属性,导致没有达到想要的效果,后来仔细想了想,
应该是UV问题导致的。于是就有了下面的解决方案。

首先看效果:
Unity 画虚线_第1张图片
解决这个问题需要以下几点
1. 画曲线 画曲线可以使用Itween, 将曲线点计算出来
2. 添加LineRender组件
3. 新建材质line ,材质的纹理是虚线png图片
4. 写脚本将线绘制出来 收工
怎么利用Itween画线?
1.首先下载Itween 插件,ItweenPath
官网地址:http://www.pixelplacement.com/itween/index.php
2. 将Itween类改写在该类里添加这个函数即可

 /// 
    /// 获取曲线
    /// 
    /// 
    /// 
    public static List GetCrvePaths(Vector3[] path)
    {
        List paths = new List();
        try
        {

            Vector3[] vector3s = PathControlPointGenerator(path);
            Vector3 prevPt = Interp(vector3s, 0);
            paths.Add(prevPt);
            int SmoothAmount = path.Length * 20;
            for (int i = 1; i <= SmoothAmount; i++)
            {
                float pm = (float)i / SmoothAmount;
                Vector3 currPt = Interp(vector3s, pm);
                prevPt = currPt;
                paths.Add(prevPt);
            }
        }
        catch (System.Exception ex)
        {

        }

        return paths;
    }

3.利用ItweenPath 摆放路点,拿到路点后

 List listPath = new List();
  listPath=   iTween.GetCrvePaths(iTweenPath.GetPath("1")) ;

路点曲线已经解决完毕
Unity 画虚线_第2张图片

怎么画曲线?
1. 新建空的GameObject ,添加LineRender组件
2. 新建材质命名line,将虚线png图片做为line的纹理
3. line的shader改为GUI/TextShader
4. line的tiling x y 缩放根据自己情况我这里设置为0.1f,0.1f
5. line 的TextColor 设置为自己想要的颜色
如图:
Unity 画虚线_第3张图片
6.LineRender 设置材质为line
7.LineRender TextureMode 设置为Repate Per Segment
Unity 画虚线_第4张图片
到此基本上就OK了

另外需要写一些代码

public class TestLine : MonoBehaviour {
    LineRenderer line;
    List listPath = new List();
    // Use this for initialization
    void Start () {
        line = GetComponent();
       listPath=   iTween.GetCrvePaths(iTweenPath.GetPath("1")) ;
        line.SetVertexCount(listPath.Count);
        line.SetWidth(0.1f, 0.1f);    
        line.receiveShadows = false;
    }

    // Update is called once per frame
    void Update () {
        for(int i=0;i

最后贴出虚线图片
这里写图片描述

你可能感兴趣的:(unity,画虚线)