美文网首页
unity地形旋转脚本,亲测可用

unity地形旋转脚本,亲测可用

作者: Rayson | 来源:发表于2023-05-11 10:18 被阅读0次
    using System.Collections;
    using System.Collections.Generic;
    using UnityEditor;
    using UnityEngine;
    
    
    public class terraintest : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
    
        }
    
        [MenuItem("Game Tools/Rotate 90 Deg")]
        static void rotate()
        {
            int i, j;
            var ter = Terrain.activeTerrain;
            var td = ter.terrainData;
    
            //rotate heightmap
            var hgts = td.GetHeights(0, 0, td.heightmapResolution, td.heightmapResolution);
            var newhgts = new float[hgts.GetLength(0), hgts.GetLength(1)];
            for (j = 0; j < td.heightmapResolution; j++)
            {
                for (i = 0; i < td.heightmapResolution; i++)
                {
                    newhgts[td.heightmapResolution - 1 - j, i] = hgts[i, j];
                }
            }
            td.SetHeights(0, 0, newhgts);
            ter.Flush();
    
            //rotate splatmap
            var alpha = td.GetAlphamaps(0, 0, td.alphamapWidth, td.alphamapHeight);
            var newalpha = new float[alpha.GetLength(0), alpha.GetLength(1), alpha.GetLength(2)];
            for (j = 0; j < td.alphamapHeight; j++)
            {
                for (i = 0; i < td.alphamapWidth; i++)
                {
                    for (int k = 0; k < td.splatPrototypes.Length; k++)
                    {
                        newalpha[td.alphamapHeight - 1 - j, i, k] = alpha[i, j, k];
                    }
                }
            }
            td.SetAlphamaps(0, 0, newalpha);
    
            //rotate trees
            var size = td.size;
            var trees = td.treeInstances;
            for (i = 0; i < trees.Length; i++)
            {
                trees[i].position = new Vector3(1 - trees[i].position.z, 0, trees[i].position.x);
                trees[i].position.y = td.GetInterpolatedHeight(trees[i].position.x, trees[i].position.z) / size.y;
            }
            td.treeInstances = trees;
    
            //rotate detail layers
            var num = td.detailPrototypes.Length;
            for (int k = 0; k < num; k++)
            {
                var map = td.GetDetailLayer(0, 0, td.detailWidth, td.detailHeight, k);
                var newmap = new int[map.GetLength(0), map.GetLength(1)];
                for (j = 0; j < td.detailHeight; j++)
                {
                    for (i = 0; i < td.detailWidth; i++)
                    {
                        newmap[td.detailHeight - 1 - j, i] = map[i, j];
                    }
                }
                td.SetDetailLayer(0, 0, k, newmap);
            }
        }
    
    
    }
    
    
    

    按一次转90度

    相关文章

      网友评论

          本文标题:unity地形旋转脚本,亲测可用

          本文链接:https://www.haomeiwen.com/subject/znlssdtx.html