Unity功能点---使用LineRenderer任意划线,自动画圆。

首先是任意画线,添加了一个选择颜色和大小的功能,脚本挂在摄像机上在,UI是三个Toggle和一个Slider,先看效果:

Unity功能点---使用LineRenderer任意划线,自动画圆。_第1张图片

下面的代码:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class DrawLine : MonoBehaviour
{


    private LineRenderer line;
    private int linePoint;
    private int lineIndex;
    private Vector3 mousePos;

    public Material mat;
    public Slider slider;//画线的粗细
    private Color color;//画线的颜色

    private void Start()
    {
        color = Color.red;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())//鼠标按下一次并且不是在UI上
        {
            InitLine();
        }
        if (Input.GetMouseButton(0) && line != null && !EventSystem.current.IsPointerOverGameObject())//鼠标按下不松并且不是在UI上
        {
            Drawing();
        }
    }

    /// 
    /// 创建一个LineRendere,并且设置它的属性
    /// 
    public void InitLine()
    {
        GameObject go = new GameObject();
        go.name = "LineRenderer";
        line = go.AddComponent();    
        line.material.color = color; 
        line.startWidth = slider.value;
        line.endWidth = slider.value;
        linePoint = 0;
        lineIndex = 0;
    }

    /// 
    /// 开始画线
    /// 
    public void Drawing()
    {
        //获取鼠标位置,给一个深度使摄像机能够看到
        mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.forward.magnitude * 1));      
        linePoint++;
        line.positionCount = linePoint;//连接LineRenderer的位置个数
        if (lineIndex < linePoint)
        {
            lineIndex++;
            line.SetPosition(lineIndex - 1, mousePos);

        }
    }
   
    /// 
    /// 红色Toggle调用
    /// 
    public void ChooseRedColor()
    {
        color = Color.red;
    }

    /// 
    /// 黄色Toggle调用
    /// 
    public void ChooseYellowColor()
    {
        color = Color.yellow;
    }

    /// 
    /// 蓝色Toggle调用
    /// 
    public void ChooseBlueColor()
    {
        color = Color.blue;
    }
}

这里是使用的鼠标位置划线,想在哪里画就用哪个的坐标就可以了,另外设置一下Slider的最大和最小:

-------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------

下面是使用LineRenderer画一个圆圈,主要使用的是四元数的右乘:

Unity功能点---使用LineRenderer任意划线,自动画圆。_第2张图片

Unity功能点---使用LineRenderer任意划线,自动画圆。_第3张图片

上面的一个是一次生成,大小变动是我在手动调节半径,下面的是慢慢生成。代码:

using UnityEngine;

public class LineCircle : MonoBehaviour
{

    public LineRenderer line;
    public int LineCount;//需要多少个位置点
    public float Radius;//园的半径
    private float Angle;//从中心点出发,和两个点之间的夹角
    private Quaternion q;

    private float timer;//计时器
    private int index = -1;//起始点
    public float IntervalTime;//画一个点的间隔时间

    private void Start()
    {
        line.positionCount = LineCount + 1;
        Angle = 360 / LineCount;

    }
    private void Update()
    {
        //DrawCircle();
        SlowDrawCircle();
    }

    /// 
    /// 一次生成
    /// 
    public void DrawCircle()
    {
        for (int i = 0; i <= LineCount; i++)
        {
            q = Quaternion.Euler(q.eulerAngles.x, q.eulerAngles.y, q.eulerAngles.z + Angle);//
            Vector3 linePoint = transform.position + q * Vector3.up * Radius;
            line.SetPosition(i, linePoint);
        }
    }

    /// 
    /// 时间间隔生成
    /// 
    public void SlowDrawCircle()
    {
        timer += Time.deltaTime;
        if (timer > IntervalTime)
        {
            if (index < LineCount)
            {
                index += 1;
                q = Quaternion.Euler(q.eulerAngles.x, q.eulerAngles.y, q.eulerAngles.z + Angle);//表示Z轴旋转Angle度
                Vector3 linePoint = transform.position + q * Vector3.up * Radius;//q * Vector3.up表示把Vector3.up旋转q度。获取一个旋转后的向量
                /*旋转自身,通过自身的方向获取坐标
                transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z + Angle);
                //Vector3 linePoint = transform.position + transform.up * Radius;
                */
                line.SetPosition(index, linePoint);
                timer = 0;
            }

        }
    }
}

下一篇会通过四元数右乘制作一个敌人检测玩家的功能, 顺带熟悉一下行为树的简单使用。

欢迎加群:4364930讨论交流

你可能感兴趣的:(Unity,功能点)