Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Объявление

public static float PerlinNoise(float x, float y);

Параметры

x X-координата точки выборки.
y Y-координата точки выборки.

Возвращает

float Значение от 0,0 до 1,0. (Возвращаемое значение может быть немного ниже 0,0 или выше 1,0.)

Описание

Создать 2D-шум Перлина.

Шум Перлина — это псевдослучайный шаблон значений с плавающей запятой, генерируемый в двухмерной плоскости (хотя этот метод обобщает до трех и более измерений, в Unity это не реализовано). Шум не содержит полностью случайное значение в каждой точке, а скорее состоит из «волн», значения которых постепенно увеличиваются и уменьшаются по шаблону. Шум можно использовать как основу для текстурных эффектов, а также для анимации, создания карт высот ландшафта и многого другого.

Шум Перлина, выбранный в диапазоне 0..10 (значения в оттенках серого представляют значения от 0..1)

Выбрать любую точку на плоскости можно, передав соответствующие координаты X и Y. Одни и те же координаты всегда будут возвращать одно и то же значение выборки, но плоскость практически бесконечна, поэтому легко избежать повторения, выбрав случайную область для выборки.

using UnityEngine; using System.Collections; // Создадим текстуру и заполним ее шумом Перлина. // Попробуйте изменить значения xOrg, yOrg и масштаба в инспекторе // в режиме воспроизведения, чтобы увидеть, как они влияют на шум. public class ExampleScript : MonoBehaviour { // Width and height of the texture in pixels. public int pixWidth; public int pixHeight; // The origin of the sampled area in the plane. public float xOrg; public float yOrg; // The number of cycles of the basic noise pattern that are repeated // over the width and height of the texture. public float scale = 1.0F; private Texture2D noiseTex; private Color[] pix; private Renderer rend; void Start() { rend = GetComponent<Renderer>(); // Set up the texture and a Color array to hold pixels during processing. noiseTex = new Texture2D(pixWidth, pixHeight); pix = new Color[noiseTex.width * noiseTex.height]; rend.material.mainTexture = noiseTex; } void CalcNoise() { // For each pixel in the texture... float y = 0.0F; while (y < noiseTex.height) { float x = 0.0F; while (x < noiseTex.width) { float xCoord = xOrg + x / noiseTex.width * scale; float yCoord = yOrg + y / noiseTex.height * scale; float sample = Mathf.PerlinNoise(xCoord, yCoord); pix[(int)y * noiseTex.width + (int)x] = new Color(sample, sample, sample); x++; } y++; } // Copy the pixel data to the texture and load it into the GPU. noiseTex.SetPixels(pix); noiseTex.Apply(); } void Update() { CalcNoise(); } }

Несмотря на то, что шумовая плоскость является двухмерной, можно легко использовать только одну одномерную линию через узор, например, для анимационных эффектов.

using UnityEngine; public class Example : MonoBehaviour { // "Bobbing" animation from 1D Perlin noise. // Range over which height varies. float heightScale = 1.0f; // Distance covered per second along X axis of Perlin plane. float xScale = 1.0f; void Update() { float height = heightScale * Mathf.PerlinNoise(Time.time * xScale, 0.0f); Vector3 pos = transform.position; pos.y = height; transform.position = pos; } }

Примечание. Возвращаемое значение может быть немного меньше 0,0f или немного превышать 1,0f. Возможно, вам придется ограничить возвращаемое значение, если для вас важен диапазон от 0,0 до 1,0.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3