使用lineRender畫線時不能在UI圖上顯示線的問題解析
阿新 • • 發佈:2019-01-31
LineRenderer 線渲染器
畫線
bool isMouseDown;//滑鼠是否按下;
GameObject obj;// 有lineRender元件的預製體
List<Vector3> points = new List<Vector3>();//宣告一個Vector類連結串列;儲存點的座標
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0)) {//滑鼠按下;
points.Clear();//每次劃線前清空資料,這樣每次的線不會相互影響;
obj = GameObject.Instantiate(Resources.Load("MyProjectRes/Huaduoxian2d1")) as GameObject;
obj.transform.parent = MainUI.GetInstance.m_uiSelectParent.transform;
isMouseDown = true;
obj.transform.localScale = Vector3.one;
}
if (Input.GetMouseButtonUp(0)) {//滑鼠擡起;
isMouseDown = false;
}
if (isMouseDown) {
Vector3 position = Input.mousePosition;//獲取滑鼠位置,屬於二維座標;
position = Camera.main.ScreenToWorldPoint(position);//螢幕座標轉世界座標,z軸為攝像機的;
position.Set(position.x, position.y, 0f);//z軸遠離攝像機,可以觀察到;
points.Add(position);//座標存放在list中;
Huaduoxin2d3 line1 = obj.GetComponent<Huaduoxin2d3>();
line1.Draw(points);
}
}
將上面指令碼綁在主攝像機上
obj預製體上綁下面指令碼,要有lineRender元件,這裡加了邊緣碰撞器,為了是線可以發生物理效果
LineRenderer line;//劃線類;
EdgeCollider2D edge;//邊緣碰撞器;
List<Vector2> points = new List<Vector2>();//宣告一個二維連結串列;
void Awake() {
line = GetComponent<LineRenderer>();
edge=GetComponent<EdgeCollider2D>();
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update (){
}
public void Draw(List<Vector3> _points)//Draw方法;
{
//line.material = new Material(Shader.Find("Unlit/Transparent Colored"));
line.SetVertexCount(_points.Count);//設定點數量;
for (int i = 0; i < _points.Count; i++)
{
line.SetPosition(i, _points[i]);//每個賦值;
points.Add(new Vector2(_points[i].x, _points[i].y));//新增;
}
if (points.Count > 1)
edge.points = points.ToArray();//點數大於1就賦值給邊緣碰撞其的陣列;
}
這樣就可以實現畫線在螢幕上,但是如果加上UI圖片,線不能顯示在圖片了,被圖片遮擋了,就是下面的效果
為了讓線不被遮擋,我發現原因是因為UICamera的屬性Clear Flags
Clear Flags 清除標記
相機在渲染時會儲存顏色和深度資訊。螢幕的未繪製部分是空的,預設情況下會顯示天空盒。當你使用多個相機時,每一個都將自己的顏色和深度資訊儲存在緩衝區中,還將積累大量的每個相機的渲染資料。當場景中的任何特定相機進行渲染時,你可以設定清除標記以清除緩衝區資訊的不同集合
Skybox 天空盒
預設設定。在螢幕上空的部分將顯示當前相機的天空盒。如果當前相機沒有設定天空盒,它會預設使用渲染設定(在Edit->Render Settings裡)中選擇的天空盒。然後它將退回使用背景顏色。
Solid Color 純色
螢幕上的空的部分將顯示當前相機的背景顏色。
Depth Only 僅深度
不同的深度顯示的優先順序不同,優先順序高的會覆蓋優先順序低的物體,第一人稱fps中,玩家手裡的槍就是如此,紀要顯示場景,又要顯示槍,需要不同的深度去控制顯示,設定一個深度為0的相機來繪製環境,還要另一個深度為1的相機單獨繪製武器。該武器相機的清除標記應設定為僅深度。這將保持環境的圖形顯示在螢幕上,槍被繪製出來,不透明的部分將完全覆蓋任何已繪製的事物