使用unity实现画图(LineRenderer组件)

这篇博客通过LineRenderer组件实现画图的效果

1.LineRenderer组件介绍

使用unity实现画图(LineRenderer组件)_第1张图片使用unity实现画图(LineRenderer组件)_第2张图片
首先是俩个可以相互对比的面板 我们可以对照着观察

2.搭建场景

搭建过程很简单 创建一个Plane然后旋转 正对着摄像机即可
使用unity实现画图(LineRenderer组件)_第3张图片
这样在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中运行结果是
使用unity实现画图(LineRenderer组件)_第4张图片
同理任何类型都可以返回
在上述实现画图的功能代码中 返回是一个Vector3[] 类型的变量
因为 CurretLine.SetPositions(Vector3[]);

下面是总的效果图
使用unity实现画图(LineRenderer组件)_第5张图片
这个效果的实现可以配合UGUI中的toggle组件来修改划线的颜色和大小

你可能感兴趣的:(游戏效果,c#脚本开发,unity组件)