У меня есть проект класса, в котором мы должны использовать 3D-объекты Unities Terrain и создать плавно сгенерированный ландшафт 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;
}
Этот код позволяет мне сгенерировать гладкую местность в первом объекте Terrain, но когда я пытаюсь ввести значения смещения, чтобы края могли выровняться, они не имеют одинаковых значений.
Я был бы признателен за любую помощь в этом вопросе, поскольку я пробовал много разных решений, ни одно из которых не работает.
Обновление: мне удалось решить проблему с помощью довольно простого решения того факта, что мне нужно было использовать свое разрешение в качестве смещения, а не расстояния между ландшафтами.
1 ответ
Мне нужно было установить OffsetX и OffsetZ равными их соответствующим позициям разрешения, а не их позициям единства.
Например, мой ландшафт имеет размер 100x100, поэтому я установил смещение на 100 или -100 в зависимости от его местоположения, но вместо этого мне нужно было использовать 128 или -128, чтобы оно соответствовало разрешению.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.