Unity 画线
2018-08-01 本文已影响0人
玄策丶
一、使用Vectrosity插件
1. 画一条(X0,Y0)到(X1,Y1)的线
using Vectrosity
public class DrawLine:MonoBehaviour
{
public VectorLine energyLine;
List<Vector2> linePoints;
float lineWeight = 2f;
public void LineDraw_1()
{
linePoints = new List<Vector2>();
linePoints.Add(new Vector2(X0, Y0));
linePoints.Add(new Vector2(X1, Y1));
energyLine = new VectorLine("Energy", linePoints, lineWeight, LineType.Continuous);
energyLine.Draw();
}
}
如果有画折线的话,将每个折点加入List中。
2. 正弦曲线
using Vectrosity
public class DrawLine:MonoBehaviour
{
public VectorLine energyLine;
List<Vector2> linePoints;
float lineWeight = 2f;
public void LineDraw_2()
{
linePoints = new List<Vector2>();
energyLine = new VectorLine("Energy", linePoints, lineWeight, LineType.Continuous);
for (int i = 0; i < 200; i++)
{
//y=Asin(ωx+φ)+k A——振幅 (ωx+φ)——相位 φ——初相 k——偏距 ω——角速度, 控制正弦周期
energyLine.points2.Add(new Vector2(i , A * Mathf.Sin( ( (a * i) + b) + K) );
}
energyLine.Draw();
}
}
删除线:
public void Des()
{
List<Transform> list = new List<Transform>();
GameObject a = GameObject.Find("VectorCanvas");
if (a)
{
foreach (Transform child in a.transform)
{
if (child.name.Equals("Energy"))
{
list.Add(child);
}
}
for (int i = 0; i < list.Count; i++)
{
Destroy(list[i].gameObject);
}
}
}
二、使用LineRenderer
新建物体Tr0,挂载脚本drawLine,添加LineRenderer组件。Tr0移动时会画出Tr0移动的轨迹。
PS:开始绘制的时候将脚本打开,绘制完之后关闭。不然会一直绘制,卡!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class drawLine : MonoBehaviour
{
private LineRenderer line;
Vector3[] path;
private float time = 0;
List<Vector3> pos = new List<Vector3>();
void Awake()
{
path = pos.ToArray();//初始化
line = GetComponent<LineRenderer>();//获得该物体上的LineRender组件
}
void Update()
{
time += Time.deltaTime;
if (time > 0.1)//每0.1秒绘制一次
{
time = 0;
pos.Add(transform.position);//添加当前坐标进链表
path = pos.ToArray();//转成数组
}
if (path.Length != 0)//有数据时候再绘制
{
line.positionCount = path.Length;//设置顶点数
line.SetPositions(path);//设置顶点位置
}
}
}