這篇博客通過LineRenderer組件實現畫圖的效果
1.LineRenderer組件介紹
首先是倆個可以相互對比的面板 我們可以對照着觀察
2.搭建場景
搭建過程很簡單 創建一個Plane然後旋轉 正對着攝像機即可
這樣在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中運行結果是
同理任何類型都可以返回
在上述實現畫圖的功能代碼中 返回是一個Vector3[] 類型的變量
因爲 CurretLine.SetPositions(Vector3[]);
下面是總的效果圖
這個效果的實現可以配合UGUI中的toggle組件來修改劃線的顏色和大小