public GameObject Get() { GameObject go = new GameObject(this.name); foreach (ComponentSurrogate component in components) { System.Type type = component.GetType(); if (type == typeof(TransformSurrogate)) { TransformSurrogate transformSurrogate = component as TransformSurrogate; go.transform.position = transformSurrogate.position.Get(); go.transform.rotation = transformSurrogate.rotation.Get(); go.transform.localScale = transformSurrogate.scale.Get(); } else if (type == typeof(MeshFilterSurrogate)) { MeshFilterSurrogate mfSurrogate = component as MeshFilterSurrogate; MeshFilter mf = go.AddComponent <MeshFilter>(); if (mfSurrogate.hasMesh) { mf.sharedMesh = mfSurrogate.mesh.Get(); } } else if (type == typeof(MeshRendererSurrogate)) { MeshRendererSurrogate mrSurrogate = component as MeshRendererSurrogate; MeshRenderer mr = go.AddComponent <MeshRenderer>(); mr.sharedMaterials = mrSurrogate.GetMaterials(); } else if (type == typeof(TerrainSurrogate)) { Debug.Log("Deserialize Terrain"); TerrainSurrogate terrainSurrogate = component as TerrainSurrogate; Terrain terrain = go.AddComponent <Terrain>(); TerrainData terrainData = terrain.terrainData; if (terrainData == null) { terrainData = new TerrainData(); } float[,] heights = terrainSurrogate.GetHeights(); terrainData.heightmapResolution = heights.GetLength(0); terrainData.SetHeights(0, 0, heights); terrainData.size = terrainSurrogate.terrainSize.Get(); //terrainData.size = new Vector3((float)TileManager.TileWidth * (float)TileManager.Scaling, 10f, (float)TileManager.TileWidth * (float)TileManager.Scaling); terrain.terrainData = terrainData; } } foreach (GameObjectSurrogate childSurrogate in children) { GameObject child = childSurrogate.Get(); child.transform.parent = go.transform; } return(go); }