Unity之LineRenderer组件

LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意LineRenderer渲染出的线段的两个端点是3D世界中的点,即他是属于世界坐标(World Point)中的。 LineRenderer是以组件形成存在的,首先我们新建一个空的Game Object,然后我们选择“Component→Effects→Line Renderer”,即可为其添加LineRenderer组件了。


其实我们也可以通过脚本来为其添加

Z0Q8Q(HTLX@56P@SF~K~$RU.png

LineRenderer组件:

LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>();  

获取LineRenderer组件:

lineRenderer = GetComponent<LineRenderer>();  

【案例】根据鼠标左击的位置,来持续绘制线段
首先我们在场景中新建一个空的GameObject,并Reset一下。然后将Script1脚本添加给他。

using UnityEngine;  
using System.Collections;  
  
public class Script1 : MonoBehaviour {  
    //LineRenderer  
    private LineRenderer lineRenderer;  
    //定义一个Vector3,用来存储鼠标点击的位置  
    private Vector3 position;  
    //用来索引端点  
    private int index = 0;  
    //端点数  
    private int LengthOfLineRenderer=0;  
  
    void Start()  
    {  
        //添加LineRenderer组件  
        lineRenderer = gameObject.AddComponent<LineRenderer>();  
        //设置材质  
        lineRenderer.material = new Material(Shader.Find("Particles/Additive"));  
        //设置颜色  
        lineRenderer.SetColors(Color.red, Color.yellow);  
        //设置宽度  
        lineRenderer.SetWidth(0.02f, 0.02f);  
          
    }  
  
    void Update()  
    {    
        //获取LineRenderer组件  
        lineRenderer = GetComponent<LineRenderer>();  
       //鼠标左击  
        if (Input.GetMouseButtonDown(0))  
        {  
            //将鼠标点击的屏幕坐标转换为世界坐标,然后存储到position中  
            position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,1.0f));   
            //端点数+1  
            LengthOfLineRenderer++;  
            //设置线段的端点数  
            lineRenderer.SetVertexCount(LengthOfLineRenderer);  
              
        }  
        //连续绘制线段  
        while (index < LengthOfLineRenderer)  
        {     
            //两点确定一条直线,所以我们依次绘制点就可以形成线段了  
            lineRenderer.SetPosition(index, position);  
            index++;  
        }   
         
  
    }  
  
    void OnGUI()  
    {            
        GUILayout.Label("当前鼠标X轴位置:" + Input.mousePosition.x);  
        GUILayout.Label("当前鼠标Y轴位置:" + Input.mousePosition.y);          
    }    
}  

效果图:

在这里我提一下,如果我们将Input.GetMouseButtonDown(0)改为Input.GetMouseButton(0)会产生什么样的效果呢?那就是我们拖动鼠标就可以持续的渲染线段了。


添加脚本使物体射线跟随

    public GameObject a;
    LineRenderer or;

    void Start () {
        or = transform.GetComponent<LineRenderer>();
    }
    
    // Update is called once per frame
    void Update () {
        //使射线跟随物体a
        or.SetPosition(1, a.transform.position);
        //创建物体a拖尾效果(飞机的航线)
        //or.SetPosition(0,a.transform.position);
    }
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Unity简介 1. Unity界面 Shift + Space : 放大界面 Scene界面按钮渲染模式2D...
    MYves阅读 12,707评论 0 22
  • This article is a record of my journey to learn Game Deve...
    蔡子聪阅读 9,408评论 0 9
  • 为了对得起新买的运动裤,更为了分散某些注意力,疯狂运动了一番,决定去办张卡了,行动力是不是又碾压了那个谁谁,没办法...
    自由和安阅读 1,103评论 1 1
  • 兴趣与负担 我觉得,只要是一门兴趣,即不应该成为一种负担,即使它也是一种使命。 但就目前来看,很多计划我的确完成不...
    蒙古海军上将阅读 1,234评论 0 1
  • 最近阿里巴巴旗下的招财宝发生了逾期事件,即违约事件,了解一下事件背后的逻辑,或许对你我会有警示作用: 这个事件主要...
    胡思乱想之阅读 1,540评论 0 0

友情链接更多精彩内容