LineRenderer線渲染器主要是用于在3D中渲染線段,雖然我們也可以使用GL圖像庫(kù)來渲染線段,但是使用LineRenderer我們可以對(duì)線段進(jìn)行更多的操作,例如:設(shè)置顏色,寬度等。在這里要注意LineRenderer渲染出的線段的兩個(gè)端點(diǎn)是3D世界中的點(diǎn),即他是屬于世界坐標(biāo)(World Point)中的。 LineRenderer是以組件形成存在的,首先我們新建一個(gè)空的Game Object,然后我們選擇“Component→Effects→Line Renderer”,即可為其添加LineRenderer組件了。
其實(shí)我們也可以通過腳本來為其添加
Z0Q8Q(HTLX@56P@SF~K~$RU.png
LineRenderer組件:
LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>();
獲取LineRenderer組件:
lineRenderer = GetComponent<LineRenderer>();
【案例】根據(jù)鼠標(biāo)左擊的位置,來持續(xù)繪制線段
首先我們?cè)趫?chǎng)景中新建一個(gè)空的GameObject,并Reset一下。然后將Script1腳本添加給他。
using UnityEngine;
using System.Collections;
public class Script1 : MonoBehaviour {
//LineRenderer
private LineRenderer lineRenderer;
//定義一個(gè)Vector3,用來存儲(chǔ)鼠標(biāo)點(diǎn)擊的位置
private Vector3 position;
//用來索引端點(diǎn)
private int index = 0;
//端點(diǎn)數(shù)
private int LengthOfLineRenderer=0;
void Start()
{
//添加LineRenderer組件
lineRenderer = gameObject.AddComponent<LineRenderer>();
//設(shè)置材質(zhì)
lineRenderer.material = new Material(Shader.Find("Particles/Additive"));
//設(shè)置顏色
lineRenderer.SetColors(Color.red, Color.yellow);
//設(shè)置寬度
lineRenderer.SetWidth(0.02f, 0.02f);
}
void Update()
{
//獲取LineRenderer組件
lineRenderer = GetComponent<LineRenderer>();
//鼠標(biāo)左擊
if (Input.GetMouseButtonDown(0))
{
//將鼠標(biāo)點(diǎn)擊的屏幕坐標(biāo)轉(zhuǎn)換為世界坐標(biāo),然后存儲(chǔ)到position中
position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,1.0f));
//端點(diǎn)數(shù)+1
LengthOfLineRenderer++;
//設(shè)置線段的端點(diǎn)數(shù)
lineRenderer.SetVertexCount(LengthOfLineRenderer);
}
//連續(xù)繪制線段
while (index < LengthOfLineRenderer)
{
//兩點(diǎn)確定一條直線,所以我們依次繪制點(diǎn)就可以形成線段了
lineRenderer.SetPosition(index, position);
index++;
}
}
void OnGUI()
{
GUILayout.Label("當(dāng)前鼠標(biāo)X軸位置:" + Input.mousePosition.x);
GUILayout.Label("當(dāng)前鼠標(biāo)Y軸位置:" + Input.mousePosition.y);
}
}
效果圖:
在這里我提一下,如果我們將Input.GetMouseButtonDown(0)改為Input.GetMouseButton(0)會(huì)產(chǎn)生什么樣的效果呢?那就是我們拖動(dòng)鼠標(biāo)就可以持續(xù)的渲染線段了。
添加腳本使物體射線跟隨
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);
//創(chuàng)建物體a拖尾效果(飛機(jī)的航線)
//or.SetPosition(0,a.transform.position);
}
Paste_Image.png