jueves, 18 de abril de 2013

Crear un grid con planos



Saludos amigos.

Hoy os traigo un script para crear un grid con planos.


Podéis ejecutarlo en EditMode si quitáis el comentario de //@script ExecuteInEditMode().
Lo que sí es recomendable, es que le incorporéis un script para poder destruirlo.
Recordad que hay que usar "DestroyImmediate" al estar en EditMode.


Entiendo que a la mayoría de la gente no le resulte útil, pero tened en cuenta que es parte
de un proyecto mayor en el que más adelante pintaremos estos planos con el puntero asignando
un nuevo material. También decir, que este código está cortado y metido en scripts aparte para
que lo uséis de forma indepéndiente.



#pragma strict
 
 //@script ExecuteInEditMode()
 
 
 var largoGrid : int = 10;
 var anchoGrid : int = 10;
 var crearDummys : boolean = false;
 
 var p : Vector3;
 var posDummys : Vector3 [];
 
 function Update () {
  
  PosDummys ();
  
  if(largoGrid < 1){
   largoGrid = 1;
  }
  if(anchoGrid < 1){
   anchoGrid = 1;
  }
  
  
 }
 
 function PosDummys () {
  if(crearDummys){
   posDummys = new Vector3 [largoGrid * anchoGrid];
   var GridNuevo : GameObject = new GameObject("Grid");
   GridNuevo.transform.position = p;
   for(var i:int=0;i<largoGrid;i++){
    for(var b:int=0;b<anchoGrid;b++){
     (posDummys[i].x) = (p.x)+i;
     (posDummys[i].y) = (p.y);
     (posDummys[i].z) = (p.z)+b;
     Crear (posDummys[i], GridNuevo);
    }
   }
   crearDummys = false;
  }
 }

 var material : Material;
 var shader : Shader;
 var normals : Vector3[];
 
 function Crear (p : Vector3, GridNuevo : GameObject) {
  
  var mesh : Mesh = new Mesh ();
  mesh.vertices = [p+Vector3(0,0,0), p+Vector3(0,0,1), p+Vector3(1, 0, 1), 
         p+Vector3(0,0,0), p+Vector3(1, 0, 1), p+Vector3(1,0,0)];
     mesh.uv = [Vector2 (0, 0), Vector2 (0, 1), Vector2 (1, 1), 
          Vector2 (0, 0), Vector2 (1, 1), Vector2 (1, 0)];
     mesh.triangles = [0, 1, 2, 3, 4, 5];
     mesh.RecalculateNormals();
  normals = mesh.normals;
  
  var plano : GameObject = new GameObject ("CeldaGrid");
  plano.AddComponent("MeshFilter");
     plano.AddComponent("MeshRenderer");
     plano.AddComponent("MeshCollider");
     plano.transform.parent = GridNuevo.transform;
  var color : Color = Color(1, 1, 1, 0.1);
  plano.GetComponent(MeshFilter).sharedMesh = mesh;
     plano.GetComponent(MeshCollider).sharedMesh = mesh;
     plano.renderer.sharedMaterial = new Material (Shader.Find("Transparent/Diffuse"));
     plano.renderer.sharedMaterial.SetColor ("_Color", color);
     
 }

No hay comentarios:

Publicar un comentario