// Start is called before the first frame update void Start() { world = new WorldBuilder(new Vector2(5, 5)); mapper = new TextureAtlasMapper(); currentGame = this; setUpDebug(); setUpCamera(); world.startPosition = new Vector3(10, 0, 10); world.Generate(); world.startPosition.y += 20; Camera.main.transform.position = world.startPosition; Camera.main.gameObject.AddComponent <FirstPersonCamera>(); }
public override void CreateQuad(Cubeside side) { string textureName; switch (side) { case Cubeside.TOP: { textureName = textureNames[0]; break; } case Cubeside.BOTTOM: { textureName = textureNames[1]; break; } default: { textureName = textureNames[2]; break; } } QuadMesh quadMesh = new QuadMesh(side); TextureAtlasMapper mapper = Game.currentGame.mapper; Vector2[] uvs = mapper.GetMappedUVs(textureName); GameObject quad = new GameObject("Quad"); quad.transform.position = globalPosition; quad.transform.parent = chunk.GameObject.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); Mesh myMesh = quadMesh.mesh; myMesh.uv = uvs; myMesh.RecalculateBounds(); myMesh.name = "my mesh"; meshFilter.mesh = myMesh; MeshRenderer renderer = quad.AddComponent(typeof(MeshRenderer)) as MeshRenderer; }
public void Optimize() { if (!rendered) { //1. Combine all children meshes MeshFilter[] meshFilters = GameObject.GetComponentsInChildren <MeshFilter>(); CombineInstance[] combine = new CombineInstance[meshFilters.Length]; int i = 0; while (i < meshFilters.Length) { combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = meshFilters[i].transform.localToWorldMatrix; i++; } //2. Create a new mesh on the parent object MeshFilter mf = (MeshFilter)GameObject.AddComponent(typeof(MeshFilter)); mf.mesh = new Mesh(); //3. Add combined meshes on children as the parent's mesh mf.mesh.CombineMeshes(combine); TextureAtlasMapper mapper = Game.currentGame.mapper; //4. Create a renderer for the parent MeshRenderer renderer = GameObject.AddComponent(typeof(MeshRenderer)) as MeshRenderer; renderer.material = (Material)Resources.Load("mymaterial", typeof(Material)); renderer.material.mainTexture = mapper.atlas; //5. Delete all uncombined children foreach (Transform quad in GameObject.transform) { GameObject.Destroy(quad.gameObject); } // 6. Add collision MeshCollider collider = GameObject.AddComponent(typeof(MeshCollider)) as MeshCollider; collider.sharedMesh = GameObject.transform.GetComponent <MeshFilter>().mesh; rendered = true; } }
public virtual void CreateQuad(Cubeside side) { string[] textures = new String[6]; if (textureNames.Length == 1) { for (int j = 0; j < 6; j++) { textures[j] = textureNames[0]; } } else { textures = textureNames; } for (int i = 0; i < textures.Length; i++) { QuadMesh quadMesh = new QuadMesh(side); TextureAtlasMapper mapper = Game.currentGame.mapper; Vector2[] uvs = mapper.GetMappedUVs(textures[i]); GameObject quad = new GameObject("Quad"); quad.transform.position = globalPosition; quad.transform.parent = chunk.GameObject.transform; MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); Mesh myMesh = quadMesh.mesh; myMesh.uv = uvs; myMesh.RecalculateBounds(); myMesh.name = "my mesh"; meshFilter.mesh = myMesh; hasCubeSideMesh[side] = true; } }