jeudi 12 janvier 2012

DrawLine dans la fenetre Game

Unity fournit une fonction Debug.DrawLine(...) tres pratique qui permet de tracer des lignes de couleur dans la fenetre Scene pour faire du debugage, mais ces lignes n'apparaissent pas dans la fenetre Game et on ne peut donc pas s'en servir pour autre chose que du debug.
Il y a pourtant un moyen de tracer des lignes dans Game (sans a voir a fabriquer de mesh pour cela), le voici.

Le tracé doit se faire dans le callback OnPostRender().
De ce fait ce code doit se trouver dans une classe de type MonoBehavior attachée à un objet de la scene.


static public Material lineMaterial;

void OnPostRender()
{
CreateLineMaterial();
lineMaterial.SetPass(0);
GL.Begin(GL.LINES);
Color col = Color.red;
GL.Color(col);
Vector3 v0 = new Vector3(0,0,0);
Vector3 v1 = new Vector3(10,10,10);
GL.Vertex3(v0.x, v0.y, v0.z);
GL.Vertex3(v1.x, v1.y, v1.z);
Debug.DrawLine(v0,v1,col); //Pour avoir le tracé aussi dans Scene
GL.End();
}


static public void CreateLineMaterial()
{
if( !lineMaterial )
{
lineMaterial = new Material( "Shader \"Lines/Colored Blended\" {" +
"SubShader { Pass { " +
"    Blend SrcAlpha OneMinusSrcAlpha " +
"    ZWrite Off Cull Off Fog { Mode Off } " +
"    BindChannels {" +
"      Bind \"vertex\", vertex Bind \"color\", color }" +
"} } }" );
lineMaterial.hideFlags = HideFlags.HideAndDontSave;
lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
}
}

Aucun commentaire:

Enregistrer un commentaire