Jump to content
Unity Insider Forum
Sign in to follow this  
Kerugal

TerrainData.SetHeights Fehler

Recommended Posts

Hallo zusammen,

ich habe ein Problem mit meinem Gelände und hoffe ihr könnt mir helfen. Wenn ich die Höhen einstellen möchte, funktioniert dies, aber das Gelände wird immer größer angezeigt als das 2D-Array, das ich für die Höhe verwende. In diesem Beispiel sind mein Array und mein Terrain 200x157. Warum habe ich dann diesen Überstand in meiner Darstellung? (Siehe Anhang Bild)

Ich hoffe sehr, dass mir jemand weiterhelfen kann...bin ein wenig am verzweifeln...

    using MoonSharp.Interpreter;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using System;
using System.Text;
using System.IO;

[MoonSharpUserData]
public class PrefabCreator : MonoBehaviour
{

    /// <summary>
    /// Classmembers for PrefabCreator
    /// </summary>
    private int terrainDepth;
    private int terrainWidth;
    private int terrainHeight;
    private float terrainScale;
    private float maxHeight;


    public void CreateTerrain(int[][] mapData)
    {
        MapScale(mapData);
        Terrain terrain = Resources.Load<Terrain>("TerrainObject") as Terrain;
        Terrain prefabTerrain = Instantiate(terrain, new Vector3(0, 0, 0), Quaternion.identity);
        prefabTerrain.terrainData = GenerateTerrain(prefabTerrain.terrainData, mapData);

    }

    private void MapScale(int[][] mapData)
    {
        terrainWidth = 0;
        terrainHeight = 0;
        terrainDepth = 10;

        maxHeight = 0;

        bool firstRun = true;

        for (int i = 0; i < mapData.GetLength(0); i++)
        {
            terrainHeight++;
            for (int j = 0; j < mapData[i].Length; j++)
            {
                if(mapData[i][j] > maxHeight)
                {
                    maxHeight = mapData[i][j];
                }

                if (firstRun)
                {
                    terrainWidth++;
                }
            }
            firstRun = false;
        }
        Debug.Log("MAXHEIGHT: " + maxHeight);
    }

    private TerrainData GenerateTerrain(TerrainData terrainData, int[][] mapData)
    {

        if(terrainWidth >= terrainHeight)
        {

            terrainData.heightmapResolution = terrainWidth + 1;
        }
        else
        {
            terrainData.heightmapResolution = terrainHeight + 1;
        }
        terrainData.size = new Vector3(terrainWidth, terrainDepth, terrainHeight);

        Debug.Log("Test" + terrainData.heightmapHeight);
        Debug.Log("Test" + terrainData.heightmapWidth);
        Debug.Log("Test" + terrainData.heightmapScale);
        terrainData.SetHeights(0, 0, GenerateHeights(mapData));

        return terrainData;
    }

    private float[,] GenerateHeights(int[][] mapData)
    {
        Debug.Log("Breite " + terrainWidth);
        Debug.Log("Höhe " + terrainHeight);



        float[,] heights = new float[terrainHeight, terrainWidth];

        //Debug.Log("Test" + mapData[2][4]);
        for (int x = 0; x <= terrainHeight - 1; x++)
        {
            //Debug.Log("X = " + x);
            for (int y = 0; y <= terrainWidth - 1; y++)
            {
                //Debug.Log("Y = " + y);
                float value = 0.0f + mapData[x][y];
                heights[x, y] = (value / maxHeight);
                //heights[x, y] = (float)value ;
                Debug.Log(heights[x, y]);
            }
        }

        return heights;
    }





}

 

ArrayTerrain.PNG

Share this post


Link to post
Share on other sites
Zitat

In diesem Beispiel sind mein Array und mein Terrain 200x157.

Wird sicher nicht daran liegen, aber bei Texturen sollte man di Masse folgend sein. Also nehme eine von diesen Massen : 64, 128, 256, 512, 1024, 2048 . Z.B. 256 * 128  LgRicky-W

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...