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
}
(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
{
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效果將無法看到。