Version: 5.4 (switch to 5.5b)
言語English
  • C#
  • JS

Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

Mathf.PerlinNoise

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

マニュアルに切り替える
public static function PerlinNoise(x: float, y: float): float;
public static float PerlinNoise(float x, float y);

Parameters

x サンプル点の X 座標
y サンプル点の Y 座標

Returns

float 0.0 と 1.0 の間の値

Description

2D のパーリンノイズを生成します

パーリンノイズは 2D 平面で生成される浮動小数点値の擬似ランダムパターンです ( 3D 以上では一般的なテクニックですが Unity には実装されていません)。 ノイズは各点で完全にランダムな値を含んでいませんが、 むしろ値が徐々に増加し、パターンの間で減少する "波"で構成されています。ノイズは テクスチャエフェクトのための基礎として使用できますが、アニメーションやテラインハイトマップや その他多くのものを生成するためのものでもあります。


" 0 から 10 の範囲でサンプリングされるパーリンノイズ (グレースケールの値は 0 から 1 の値で表されます) ”

平面上に任意の点をサンプリングするために適切な X と Y 座標を渡します。 同じ座標には常に同じサンプリング値を返しますが、平面は 本質的に無限ですので、サンプルのエリアをランダムに選択することによって、簡単に繰り返しを避けられます。

// 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.

// Width and height of the texture in pixels. var pixWidth: int; var pixHeight: int;

// The origin of the sampled area in the plane. var xOrg: float; var yOrg: float;

// The number of cycles of the basic noise pattern that are repeated // over the width and height of the texture. var scale = 1.0;

private var noiseTex: Texture2D; private var pix: Color[]; private var rend: Renderer;

function 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; }

function CalcNoise() { // For each pixel in the texture... for (var y = 0.0; y < noiseTex.height; y++) { for (var x = 0.0; x < noiseTex.width; x++) { // Get a sample from the corresponding position in the noise plane // and create a greyscale pixel from it. var xCoord = xOrg + x / noiseTex.width * scale; var yCoord = yOrg + y / noiseTex.height * scale; var sample = Mathf.PerlinNoise(xCoord, yCoord); pix[y * noiseTex.width + x] = new Color(sample, sample, sample); } } // Copy the pixel data to the texture and load it into the GPU. noiseTex.SetPixels(pix); noiseTex.Apply(); }

function Update () { CalcNoise(); }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public int pixWidth; public int pixHeight; public float xOrg; public float yOrg; public float scale = 1.0F; private Texture2D noiseTex; private Color[] pix; private Renderer rend; void Start() { rend = GetComponent<Renderer>(); noiseTex = new Texture2D(pixWidth, pixHeight); pix = new Color[noiseTex.width * noiseTex.height]; rend.material.mainTexture = noiseTex; } void CalcNoise() { 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[y * noiseTex.width + x] = new Color(sample, sample, sample); x++; } y++; } noiseTex.SetPixels(pix); noiseTex.Apply(); } void Update() { CalcNoise(); } }

ノイズ面は 2D ですが、アニメーション効果のパターンを通してひとつの 1 次元の線を使うことは簡単です。

// "Bobbing" animation from 1D Perlin noise.
    
// Range over which height varies.
var heightScale = 1.0;

// Distance covered per second along X axis of Perlin plane. var xScale = 1.0;

function Update () { var height = heightScale * Mathf.PerlinNoise(Time.time * xScale, 0.0); var pos = transform.position; pos.y = height; transform.position = pos; }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public float heightScale = 1.0F; public 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; } }

注意: 戻り値が少しだけ 1.0f を超えることもできます。 0.0 から 1.0 の範囲が重要な場合、戻り値を固定する必要があります。