使用LineRenderer實(shí)現(xiàn)畫圖程序

首先我們來看下LineRenderer的一些參數(shù)屬性


image.png

Color里面的顏色想要設(shè)置成功需要把材質(zhì)的Shader設(shè)置為Sprites->Default


image.png
下面我們來看看怎么寫一個(gè)畫圖小程序,首先看看我的布局,首先是三種顏色的選擇和三種畫筆大小的選擇,然后一個(gè)背景
image.png

下面是創(chuàng)建腳本LineRendererController寫入以下代碼掛載在LineRenderers游戲?qū)ο笊?/p>

using System.Collections.Generic;
using UnityEngine;

public class LineRendererController : MonoBehaviour {

    public  Color color=Color.red;
    public  float painSize = 0.1f;
    private LineRenderer CurrentLine;
    public Material materia;
    private List<Vector3> positions = new List<Vector3>();
    private bool isMouseDown = false;//是否一直按住鼠標(biāo)
    private Vector3 lastMousePosition;//下一個(gè)位置
  

    #region 選擇顏色
    public void OnRedColorChanged(bool isOn)
    {
        if (isOn)
        {
            color = Color.red;
        }
    }
    public void OnGreenColorChanged(bool isOn)
    {
        if (isOn)
        {
            color = Color.green;
    
        }
 
    }
    public void OnBlueColorChanged(bool isOn)
    {
        if (isOn)
        {
            color = Color.blue;
  
        }
    }
    #endregion

    #region 選擇大小
    public void OnPoint1Changed(bool isOn)
    {
        if (isOn)
        {
            painSize = 0.1f;

        }
    }
    public void OnPoint2Changed(bool isOn)
    {
        if (isOn)
        {
            painSize =0.2f;

        }

    }
    public void OnPoint4Changed(bool isOn)
    {
        if (isOn)
        {
            painSize =0.4f;

        }
    }
    #endregion

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //創(chuàng)建一個(gè)游戲?qū)ο竺⑻砑覮ineRenderer組件
            GameObject go = new GameObject();
            go.name = "LineRenderer";
            CurrentLine = go.AddComponent<LineRenderer>();
            go.transform.SetParent(this.transform);
            //給Line添加material設(shè)置Lin寬度大小和顏色
            CurrentLine.material = this.materia;
            CurrentLine.startWidth=painSize;
            CurrentLine.endWidth = painSize;
            CurrentLine.startColor = color;
            CurrentLine.endColor = color;
           
            positions.Clear();
            //設(shè)置Line轉(zhuǎn)折的時(shí)候的圓滑度
            CurrentLine.numCornerVertices = 5;
            //設(shè)置Line起始點(diǎn)和結(jié)束的圓滑度
            CurrentLine.numCapVertices = 5;

            Vector3 position = GetMousePoint();//獲取位置Position
            //把Position添加到List
            AddPosition(position);
            isMouseDown = true;
        }
        //如果一直按著鼠標(biāo)
        if (isMouseDown)
        {
            //一直獲取位置Position
            Vector3 position = GetMousePoint();
           // 如果當(dāng)前位置和下一個(gè)位置大于0.2才添加位置
            if (Vector3.Distance(position,lastMousePosition)>0.2f)
            AddPosition(position);

        }
        if (Input.GetMouseButtonUp(0))
        {
            CurrentLine = null;
            positions.Clear();
            isMouseDown = false;
        }
    }
    //添加位置并畫線
    void AddPosition(Vector3 position)
    { 
        //把畫Line的位置想Z軸移動(dòng)-1,就是不讓Line和Plane重合
        position.z -= 0.1f;
        positions.Add(position);//添加位置
        //當(dāng)前Line的總共需要描點(diǎn)的Count
        CurrentLine.positionCount = positions.Count;
        //把每次描點(diǎn)的位置添加到LinRenderer組建里
        CurrentLine.SetPositions(positions.ToArray());
        //下一個(gè)Lin位置設(shè)置為當(dāng)前位置
        lastMousePosition = position;
    }
    //發(fā)射射線獲取位置Position
    Vector3 GetMousePoint()
    {
        Ray ray= Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray,out hit))
        {
                return hit.point;
        }
        return Vector3.zero;
    }

}

最后把代碼里面三個(gè)選擇顏色和三個(gè)設(shè)置大小的方法對(duì)應(yīng)綁上Toggle上的OnValueChanged上


image.png

這樣我畫圖的小程序就完成了


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容