1. 程式人生 > >unity使用GL庫畫線

unity使用GL庫畫線

圖形化除錯可以加速開發。

例如在戰鬥中,可能需要知道所有單位的仇恨值,如果這些資訊全打log的話,很難有直觀感受,

而如果在Scene窗口裡,單位頭頂有一個球,越紅表示仇恨越高,越暗表示仇恨越低,那麼除錯起來比打log直觀多了。

【一 圖形化除錯】

Unity中圖形化除錯主要4種

Debug.Draw

Gizmos.Draw

Graphic.DrawMesh

GL

只需在Scene視窗顯示的除錯影象

     一直顯示的 OnDrawGizmos + Gizmos.Draw

     選中顯示的 OnDrawGizmosSelected + Gizmos.Draw

     指令碼控制的 Update + Debug.Draw

需要在實際裝置螢幕顯示的除錯影象

    Update+Graphic.DrawMesh

    OnRenderObject+GL

Graphic.DrawMesh和Debug.Draw   呼叫一致,都是在Update系裡

Graphic.DrawMesh和GL       顯示類似,都在各個視窗顯示,並且可以設定材質。

四種方式比較

(1)Debug.Draw

=1=一般在Update/Fixed Update/LateUpdate裡呼叫

=2=只在Scene窗口裡顯示

=3=並且不能設定材質

 voidUpdate()
{
Debug.DrawLine(worldPos1
,worldPos2,Color.yellow);
}

(2)Gizmos.Draw

=1=在OnDrawGizmos /OnDrawGizmosSelected裡呼叫

=2=只在Scene窗口裡顯示

=3=並且不能設定材質

publicvoidOnDrawGizmosSelected(){
Gizmos.DrawLine(Vector3.zero,newVector3(0,3f,0));
}

(3)Graphic.DrawMesh

=1=一般在Update/Fixed Update/LateUpdate裡呼叫

=2=實際螢幕和Scene視窗都能顯示

=3=可以設定材質

畫Mesh Ok

 void

Update()
{
Graphics.DrawMesh(mesh,worldPos,worldRotation,material,0);
}

(4)GL,

=1=一般在物體的OnRenderObject 或者相機的OnPostRender裡呼叫

=2=實際螢幕和Scene視窗都能顯示

=3=可以設定材質

一個GL.Begin/GL.End裡的渲染是自動合併的,一般是一個Drawcall

畫一些線,三角可以。用GL.TRIANGLES 顯示整個Mesh的話會超卡。

例:渲染線框

   voidOnRenderObject()
{
mat.SetPass(0);

         GL.wireframe=true;

 GL.Color(newColor(1,1,0,0.8F));
GL.PushMatrix();
GL.Begin(GL.TRIANGLES);
for(inti=0;i<</span>mesh.triangles.Length-2;i+=3)
{
GL.Vertex(mesh.vertices[mesh.triangles[i]]);
GL.Vertex(mesh.vertices[mesh.triangles[i+1]]);
GL.Vertex(mesh.vertices[mesh.triangles[i+2]]);
}
GL.End();
GL.PopMatrix();

 GL.wireframe=false;
}

【二 GL】

GL除了可以用來除錯,可以拿來做功能,例如LineRenderer,地格等。

GL即Graphics Library。Low-Level Graphics Library。計算matrices,發出類似OpenGL的immediate模式的渲染指令,和其他低階影象任務。Graphic.DrawMesh()比GL更高效。

GL立即繪製函式只用當前material的設定。因此除非你顯示指定mat,否則mat可以是任何材質。並且GL可能會改變材質。

GL是立即執行的,如果你在Update()裡呼叫,它們將在相機渲染前執行,相機渲染將會清空螢幕,GL效果將無法看到。