unity LineRender结合多点触摸 实现拖拽 重复画线

Unity LineRender

之前我也关于linrender划线写过一篇博客 这个是最近项目中使用到的功能就研究了下 当然也欢迎大佬帮忙优化代码
闲话不多说 先上划线的代码

    //画线的端点
    public GameObject[] AllPosition;
    //移动的点
    public Transform MoveCube;
    //移动的坐标
    public Vector3[] VecValue;
    int num = 0;
    //LineRenderer
    private LineRenderer lineRenderer;
    void Start()
    {
        //画线
        //添加LineRenderer组件
        lineRenderer = gameObject.GetComponent();
        //设置颜色
        lineRenderer.startColor = new Color32(198, 171, 118, 255);
        lineRenderer.endColor = new Color32(198, 171, 118, 255);
        //设置宽度
        //lineRenderer.SetWidth(0.02f, 0.02f);
        lineRenderer.startWidth = 0.03f;
        lineRenderer.endWidth = 0.03f;
    }
    VecValue = new Vector3[AllPosition.Length];
        for (int i = 0; i < AllPosition.Length; i++)
        {
            VecValue[i] = AllPosition[i].transform.localPosition;
        }

相比较之前的划线  多了一个需要移动的点跟目标点位 划线方法 跟随移动的Transform来不断移动坐标 目标坐标就是设置的数组点 当然这个方法还需要在update中调用 并且  如果前面的节点不显示 后面的节点也不画线  由于是触摸屏 所以要根据节点是否显示 控制划线 所以要有结点显示与否的判定

//检测数组中是否包含某些数据
    public bool DetectionData(int num)
    {
        if (num == 0)
        {
            return true;
        }
        //如果包含
        for (int i = 0; i < num + 1; i++)
        {
            if (!Number.Contains(i))
            {
                return false;
            }
        }
        return true;
    }
    public List Number = new List();
    public void LineMove()
    {
        for (int i = 0; i < AllPosition.Length; i++)
        {
            if (AllPosition[i].activeSelf)
            {
                if (!Number.Contains(i))
                {
                    Number.Add(i);
                    Maxnums = i;
                    NumberValueSet();
                }
            }
            else
            {
                if (Number.Count > i)
                {
                    Number.RemoveAt(i);
                    Maxnums = i - 1;
                }
            }
        }
    }

根据这样的方法去判断 前面的结点是否显示  如果显示 在开始划线  划线结束 将所有划线的点坐标跟随物体的点坐标 这样移动的时候线条也跟着移动

public int Maxnums = 0;
    bool IsValue = true;
    bool IsLine = false;
    void Update()
    {
        LineMove();
        if (DetectionData(Maxnums) && Maxnums > 0)
        {
            AllActive(Maxnums + 1);
        }
    }
    //画线方法
    public void AllActive(int MaxNum)
    {
        if (IsValue)
        {
            VecValue = new Vector3[MaxNum];
            for (int i = 0; i < MaxNum; i++)
            {
                VecValue[i] = AllPosition[i].transform.position;
            }
            MoveCube.position = VecValue[0];
            IsValue = false;
            IsLine = true;
        }
        if (IsLine)
        {
            //画线
            lineRenderer.positionCount = MaxNum;
            MoveCube.position = Vector3.MoveTowards(MoveCube.position, VecValue[num], 5f * Time.deltaTime);
            for (int i = num; i < MaxNum; i++)
            {
                lineRenderer.SetPosition(i, MoveCube.position);
            }
            lineRenderer.SetPosition(num, MoveCube.position);

            if (MoveCube.position == VecValue[num])
            {
                num++;
                if (num > MaxNum - 1)
                {
                    num = MaxNum - 1;
                    IsLine = false;
                }
            }
        }
        if (!IsLine)
        {
            if (lineRenderer.positionCount != MaxNum)
            {
                lineRenderer.positionCount = MaxNum;
            }
            for (int i = 0; i < MaxNum; i++)
            {
                lineRenderer.SetPosition(i, AllPosition[i].transform.position);
            }
        }
    }

在update 中调用方法 并且判断结点 显示在开始划线  

当然还有另外一种方法 就是将判断结点是否显示 放在单个结点上检测  用一个控制器 控制这些划线动画 当然也更合理一些 不需要重新开始绘制线条

实现的效果

unity LineRender结合多点触摸 实现拖拽 重复画线_第1张图片

你可能感兴趣的:(新手,linerender重复划线)