Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }