C# 跨多个Unity地形对象使用柏林噪波

C# 跨多个Unity地形对象使用柏林噪波,c#,unity3d,C#,Unity3d,我有一个类项目,我们应该使用Unities Terrain 3D对象并创建一个3x3平滑生成的地形。为此,我们被告知创建一个中心地形,该地形在8个主要方向上具有相邻地形。通过这种方法,我得到了柏林噪声 using System.Collections; using System.Collections.Generic; using UnityEngine; public class TerrainNoiseGeneration : MonoBehaviour { private Terrai

我有一个类项目,我们应该使用Unities Terrain 3D对象并创建一个3x3平滑生成的地形。为此,我们被告知创建一个中心地形,该地形在8个主要方向上具有相邻地形。通过这种方法,我得到了柏林噪声

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

public class TerrainNoiseGeneration : MonoBehaviour
{

private TerrainData myTerrainData;
public Vector3 worldSize;
public int resolution = 129;
private float userInput = (float)4.2;
public float offsetX;
public float offsetZ;

// Start is called before the first frame update
void Start()
{
    myTerrainData = gameObject.GetComponent<TerrainCollider>().terrainData;
    worldSize = new Vector3(100, 50, 100);
    myTerrainData.size = worldSize;
    myTerrainData.heightmapResolution = resolution;
    float[,] heightArray = new float[resolution, resolution];
    heightArray = PerlinNoise(userInput, offsetX, offsetZ);
    myTerrainData.SetHeights(0, 0, heightArray);
}

// Update is called once per frame
void Update()
{
    float[,] heightArray = new float[resolution, resolution];
    heightArray = PerlinNoise(userInput, offsetX, offsetZ);
    myTerrainData.SetHeights(0, 0, heightArray);
}

float[,] PerlinNoise(float userInput, float offsetX, float offsetZ)
{
    float[,] heights = new float[resolution, resolution];

    for (int z = 0; z < resolution; z++)
    {
        for (int x = 0; x < resolution; x++)
        {
            float nx = (x + offsetX) / resolution * userInput;
            float ny = (z + offsetZ) / resolution * userInput;
            heights[z, x] = Mathf.PerlinNoise(nx, ny);
        }
    }

    return heights;
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类TerrainNoiseGeneration:单一行为
{
私人水母;
公共向量3世界大小;
公共int分辨率=129;
私有float用户输入=(float)4.2;
公开浮动抵销;
公开浮动抵销;
//在第一帧更新之前调用Start
void Start()
{
myTerrainData=gameObject.GetComponent().terrainData;
世界尺寸=新矢量3(100,50,100);
myTerrainData.size=世界尺寸;
myTerrainData.heightmapResolution=分辨率;
浮点[,]高度数组=新浮点[分辨率,分辨率];
heightArray=PerlinNoise(用户输入、偏移量x、偏移量z);
设置高度(0,0,高度数组);
}
//每帧调用一次更新
无效更新()
{
浮点[,]高度数组=新浮点[分辨率,分辨率];
heightArray=PerlinNoise(用户输入、偏移量x、偏移量z);
设置高度(0,0,高度数组);
}
浮点[,]PerlinNoise(浮点用户输入、浮点偏移量X、浮点偏移量Z)
{
浮动[,]高度=新浮动[分辨率,分辨率];
对于(intz=0;z
此代码允许我在第一个地形对象中生成平滑地形,但当我尝试输入偏移值以便边缘可以对齐时,它们的值不同

我希望在这个问题上能得到任何帮助,因为我已经尝试了很多不同的解决方案,但没有一个是有效的


更新:我可以用一个相当简单的解决方案来解决这个问题,我需要使用我的分辨率作为偏移量,而不是地形之间的距离。我需要将偏移量x和偏移量z设置为它们各自的分辨率位置,而不是它们的单位位置


例如,我的地形是100x100,所以我根据其位置将偏移量设置为100或-100,但我需要使用128或-128使其与分辨率保持一致

我已将Unityscript标记更改为C#1,因为这不是Unityscript(为Unity创建的Javascript派生)。