使用unity實現畫圖(LineRenderer組件)

這篇博客通過LineRenderer組件實現畫圖的效果

1.LineRenderer組件介紹

在這裏插入圖片描述在這裏插入圖片描述
首先是倆個可以相互對比的面板 我們可以對照着觀察

2.搭建場景

搭建過程很簡單 創建一個Plane然後旋轉 正對着攝像機即可
在這裏插入圖片描述
這樣在Game面版中是全白效果

3.實現代碼

 private LineRenderer CurretLine;
    public Color LineColor = Color.green ;
    public float LineSize = 0.5f;

    public List<Vector3> Positions = new List<Vector3>();

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject go = new GameObject();//創建一個空物體
            go.transform.SetParent(this.transform);//設置父子關係
            CurretLine = go.AddComponent<LineRenderer>();//添加劃線組件

            CurretLine.endColor = LineColor;//顏色
            CurretLine.endColor = LineColor;

            CurretLine.startWidth = LineSize;//大小
            CurretLine.endWidth = LineSize;

            Vector3 StartPosition = GetScreenVec();//設置第一個點的位置
            Positions.Clear();
            Positions.Add(StartPosition);
            CurretLine.numPositions = Positions.Count;//給點的個數賦值
            CurretLine.SetPositions(Positions.ToArray());//設置點的位置
        }
        if (Input.GetMouseButton(0))
        {
            Vector3 Position = GetScreenVec();

            Positions.Add(Position);//給list中添加
            CurretLine.numPositions = Positions.Count;
            CurretLine.SetPositions(Positions.ToArray());

        }
        if (Input.GetMouseButtonUp(0))
        {
            Positions.Clear();//清空list
        }
    }
    Vector3 GetScreenVec()//獲取屏幕座標方法 返回一個Vector3的值
    {
        Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if(Physics.Raycast(ray,out hit))
        {
            if (hit.collider != null)
            {
                return hit.point;
            }
            return hit.point;
        }
        return hit.point;
    }

4.代碼中相關介紹

裏邊用到了List的相關知識 比如List.ToArray()這個方法
我大致介紹一下 這個方法是返回一個List裏邊的類型
比如

	public List<int > go = new List<int>();//創建一個int類型的List
    public int[] test; //作爲接受返回的int類型數組

    private void Update()
    {
        test = go.ToArray();//賦值
    }

在unity中運行結果是
在這裏插入圖片描述
同理任何類型都可以返回
在上述實現畫圖的功能代碼中 返回是一個Vector3[] 類型的變量
因爲 CurretLine.SetPositions(Vector3[]);

下面是總的效果圖
在這裏插入圖片描述
這個效果的實現可以配合UGUI中的toggle組件來修改劃線的顏色和大小

發佈了64 篇原創文章 · 獲贊 63 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章