版本:Unity 6(6000.0)
语言英语
  • C#

Mathf.PerlinNoise

建议更改

成功!

感谢帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读来自用户的所有建议更改并在适用的情况下进行更新。

关闭

提交失败

出于某些原因,无法提交您建议的更改。请在几分钟后重试。感谢您抽出时间帮助我们提升 Unity 文档的质量。

关闭

取消

切换到手册

声明

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

参数

x 采样点的 X 坐标。
y 采样点的 Y 坐标。

返回

浮点数 0.0 到 1.0 之间的值。(返回值可能略低于 0.0 或高于 1.0。)

说明

生成二维 Perlin 噪声。

Perlin 噪声是一种在二维平面上生成的浮点值伪随机图案(尽管该技术推广到三个或更多维度,但未在 Unity 中实现)。噪声在每一点不包含完全随机的值,而是由其值在图案中逐渐增加和减小的“波”组成。该噪声可用作纹理效果的基础,也可用于动画、生成地形高程图和许多其他内容。


在 0..10 范围内采样的 Perlin 噪声(灰度值表示 0..1 之间的值)

可以通过传递适当的 X 和 Y 坐标来采样平面中的任何点。相同的坐标将始终返回相同的采样值,但该平面本质上是无限的,因此很容易通过选择随机区域进行采样来避免重复。

using UnityEngine;
using System.Collections;

// Create a texture and fill it with Perlin noise. // Try varying the xOrg, yOrg and scale values in the inspector // while in Play mode to see the effect they have on the noise.

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... for (float y = 0.0F; y < noiseTex.height; y++) { for (float x = 0.0F; x < noiseTex.width; x++) { 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); } }

// Copy the pixel data to the texture and load it into the GPU. noiseTex.SetPixels(pix); noiseTex.Apply(); }

void Update() { CalcNoise(); } }

注意:返回值可能略低于 0.0f 或略高于 1.0f。如果您需要返回值范围在 0.0 到 1.0 之间,请将返回值进行范围限制。