void Start() { var obj = AssetDatabase.LoadAssetAtPath <GameObject>(string.Format("Assets/Data_oe/world/terrains/{0}.prefab", "TerrainRoot")); root = Instantiate(obj).GetComponent <TerrainRoot>(); var config = AssetDatabase.LoadAssetAtPath <TerrainAssets>(string.Format("Assets/Data_oe/world/terrains/{0}.asset", "TerrainData")); root.Init(config, size); var pos = transform.position; root.MoveTo(pos.x, pos.z, dx, dz); }
static void CreateTerrainRoot(TerrainAssets terrainAssets) { GameObject root = GameObject.Find(EXPORT_ROOT_NAME); GameObject.DestroyImmediate(root); root = new GameObject(EXPORT_ROOT_NAME); TerrainRoot hierarchy = root.AddComponent <TerrainRoot>(); GameObject go = new GameObject("Terrain"); go.transform.SetParent(root.transform); go.transform.localPosition = Vector3.zero; go.transform.localRotation = Quaternion.identity; go.transform.localScale = Vector3.one; //MeshFilter MeshFilter filter = go.GetComponent <MeshFilter>(); if (filter == null) { filter = go.AddComponent <MeshFilter>(); } //MeshRenderer MeshRenderer renderer = go.GetComponent <MeshRenderer>(); if (renderer == null) { renderer = go.AddComponent <MeshRenderer>(); } renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; //Material Dictionary <int, Material> matDic = new Dictionary <int, Material>(); for (int i = 0; i < terrainAssets.terrainIndex.Length; i++) { string terrainName = terrainAssets.terrainIndex[i]; if (string.IsNullOrEmpty(terrainName)) { continue; } string pathMeshData = string.Format("{0}/{1}.asset", MeshDataExportFolder, terrainAssets.terrainIndex[i]); TerrainMeshData meshData = GetStriptableObject <TerrainMeshData>(pathMeshData); if (!matDic.ContainsKey(meshData.matIndex)) { matDic.Add(meshData.matIndex, meshData.material); } } Material[] mats = new Material[matDic.Count]; foreach (var kv in matDic) { mats[kv.Key] = kv.Value; } renderer.sharedMaterials = mats; //BoxCollider BoxCollider collider = go.GetComponent <BoxCollider>(); if (collider == null) { collider = go.AddComponent <BoxCollider>(); } hierarchy.RootTerrain = go; string path = string.Format("{0}/TerrainRoot.prefab", ExportFolder); if (File.Exists(path)) { GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject>(path); PrefabUtility.ReplacePrefab(root, prefab); } else { PrefabUtility.CreatePrefab(path, root); } GameObject.DestroyImmediate(root); }