美文网首页
unity同一个版本中将地形树的数据传递给新的地形上

unity同一个版本中将地形树的数据传递给新的地形上

作者: Rayson | 来源:发表于2023-07-31 10:47 被阅读0次
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TerrianTest : MonoBehaviour {
    public Terrain m_terrainFrom;

    public Terrain m_terrainTo;
    // Use this for initialization
    void Start () {
        //m_terrainTo.terrainData.treePrototypes = null;
        m_terrainTo.terrainData.detailPrototypes = new DetailPrototype[0];
        m_terrainTo.terrainData.treeInstances = new TreeInstance[0];
        Debug.Log(m_terrainFrom.terrainData.treeInstanceCount);
        TreePrototype[] bufFrom = m_terrainFrom.terrainData.treePrototypes;
        TreeInstance[] bufIns = m_terrainFrom.terrainData.treeInstances;
        m_terrainTo.terrainData.treePrototypes = bufFrom;
        m_terrainTo.terrainData.detailPrototypes = m_terrainFrom.terrainData.detailPrototypes;
        DetailMapCopy (m_terrainFrom, m_terrainTo);
        for (int i = 0; i < bufIns.Length; i++)
        {
            m_terrainTo.AddTreeInstance (bufIns [i]);
        }
    }


    void DetailMapCopy(Terrain t,Terrain to)
    {

        var map = t.terrainData.GetDetailLayer(0, 0, t.terrainData.detailWidth, t.terrainData.detailHeight, 0);

        to.terrainData.SetDetailLayer(0, 0, 0, map);
    }
        
}


方法2:
Unity Terrain数据复制
脚本挂在空物体上,添加原地形和指定地形并运行,可以看到地形的树木和植被数据被传递到了,新的地形上面


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class TerrainDataTransfer : EditorWindow {

    TerrainData terrainDataFrom;
    TerrainData terrainDataTo;
    bool isJustCopy;

    [MenuItem("Custom/TerrainDataTransfer")]
    private static void ShowWindow() {
        var window = GetWindow<TerrainDataTransfer>();
        window.titleContent = new GUIContent("TerrainDataTransfer");
        window.Show();
    }

    private void OnGUI() {
        GUILayout.Label("原始地形数据");
        terrainDataFrom = (TerrainData)EditorGUILayout.ObjectField(terrainDataFrom,typeof(TerrainData),true);
        
        GUILayout.Label("目标地形数据");
        terrainDataTo = (TerrainData)EditorGUILayout.ObjectField(terrainDataTo,typeof(TerrainData),true);
        
        isJustCopy = GUILayout.Toggle(isJustCopy,"仅复制");

        if(GUILayout.Button("复制terrain")){
            TransferData(terrainDataFrom,terrainDataTo);
        }
    }

    private void TransferData(TerrainData dataFrom, TerrainData dataTo){
        //dataTo = new TerrainData();  会导致重定向,从而找不到本尊
        ///复制参数
        dataTo.heightmapResolution = dataFrom.heightmapResolution;
        dataTo.size = dataFrom.size;
        dataTo.wavingGrassAmount = dataFrom.wavingGrassAmount;
        dataTo.wavingGrassSpeed = dataFrom.wavingGrassSpeed;
        dataTo.wavingGrassStrength = dataFrom.wavingGrassStrength;
        dataTo.wavingGrassTint = dataFrom.wavingGrassTint;
        dataTo.detailPrototypes = dataFrom.detailPrototypes;
        dataTo.treeInstances = dataFrom.treeInstances;
        dataTo.treePrototypes = dataFrom.treePrototypes;
        dataTo.alphamapResolution = dataFrom.alphamapResolution;
        dataTo.baseMapResolution = dataFrom.baseMapResolution;
        dataTo.splatPrototypes = dataFrom.splatPrototypes;

        float[,] heights = dataFrom.GetHeights(0,0, dataFrom.heightmapResolution,dataFrom.heightmapResolution);
        dataTo.SetHeights(0,0,heights);

        float[,,] alphaMap = dataFrom.GetAlphamaps(0,0, dataFrom.alphamapWidth, dataFrom.alphamapHeight);
        dataTo.SetAlphamaps(0,0, alphaMap);

        ///是否只是拷贝数据
        if(isJustCopy)
            return;

        //在场景中创建地表
        GameObject obj = Terrain.CreateTerrainGameObject(dataTo);
        obj.name = "TerrainNew";
    }
}

相关文章

  • 在Unity地形(Terrain)中使用图集(Atlas)

    Unity地形集成了许多功能:高度图、树、草等。本文仅专注于其中一部分:地形贴图。主要介绍了Unity地形贴图的三...

  • Unity3D中的地形转成模型

    Unity3D中的地形转成模型 起因 为什么要把地形转成模型呢?在Unity3D中创建地形很方便,用它自带的地形编...

  • Use A Custom Unity Terrain

    Use A Custom Unity Terrain 静态/背景自定义Unity地形 您可以将自定义Unity地形...

  • Unity地形基础

    1.地形绘制2.地形贴图3.植物的种植4.其他细节的实现 ![Uploading 2016-05-02_20-09...

  • UnityTerrainTools初体验

    最近下载了官方地形工具和地形资源,发现Unity在一点点提升地形编辑的功能,能看出些许借鉴其他软件的影子,总体来说...

  • SuperMap iClient3D for WebGL教程(地

    在介绍WebGL地形前,我们先来介绍下地形数据的处理,我们这知道WebGL加载的地形数据都是.terrain或者是...

  • Cesium本地影像与地形服务发布

    参考资料 CesiumLab地形处理成果在Tomcat和IIS上发布 Cesium中地形数据的加载 Cesium官...

  • Cesium的地形加载及dem数据处理

    cesium可以支持多种地形数据,推荐采用流式地形切片方式加载海量地形数据先来看helloworld 一行代码就可...

  • Unity Terrain地形设置

    BaseTerrain Draw:此选项如果不勾选,就不可以去修改地形的高低变化PixelError:像素误差,较...

  • unity地形Splat替换

    1.将地形的splat导出 因为我实际话的地形是2048注意导出的时候要输入2047 可以看到splat贴图被导出...

网友评论

      本文标题:unity同一个版本中将地形树的数据传递给新的地形上

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