Skip to content

Instantly share code, notes, and snippets.

@todorok1
Created December 30, 2020 08:53
Show Gist options
  • Save todorok1/88c5451351281c6190a9f13dbfecc266 to your computer and use it in GitHub Desktop.
Save todorok1/88c5451351281c6190a9f13dbfecc266 to your computer and use it in GitHub Desktop.
パーリンノイズを使ってランタイムでフィールドを生成するサンプル
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <Summary>
/// パーリンノイズを使ってフィールドを生成するクラスです。
/// </Summary>
public class FieldGenerator : MonoBehaviour
{
// フィールド作成のためのパーツへの参照です。
public GameObject fieldParts;
// フィールドパーツの親オブジェクトのTransformです。
public Transform fieldParent;
// フィールドに関する情報です。
public int fieldSizeX = 50;
public int fieldSizeZ = 50;
public int fieldHeight = 50;
// パーリンノイズに関する情報です。
public float xOrigin;
public float yOrigin;
public float scale = 0.01f;
void Start()
{
}
void Update()
{
}
/// <Summary>
/// 生成ボタンが押された時のメソッドです。
/// </Summary>
public void OnPressedGenerateButton()
{
GenerateFieldParts();
}
/// <Summary>
/// フィールドを生成するメソッドです。
/// </Summary>
void GenerateFieldParts()
{
for (float z = 0f; z < fieldSizeZ; z++)
{
for (float x = 0f; x < fieldSizeX; x++)
{
// パーリンノイズの座標を指定して値を取得します。
float xValue = xOrigin + x * scale;
float yValue = yOrigin + z * scale;
float perlinValue = Mathf.PerlinNoise(xValue, yValue);
float height = fieldHeight * perlinValue;
// 位置のVector3を作成してオブジェクトをインスタンス化します。
Vector3 pos = new Vector3(x, height, z);
InstantiateFieldParts(pos);
}
}
}
/// <Summary>
/// オブジェクトをインスタンス化するメソッドです。
/// </Summary>
void InstantiateFieldParts(Vector3 pos)
{
// オブジェクトをインスタンス化します。
GameObject obj = Instantiate(fieldParts, Vector3.zero, Quaternion.identity);
// オブジェクトのTransformを設定します。
obj.transform.SetParent(fieldParent);
obj.transform.localPosition = pos;
}
/// <Summary>
/// 削除ボタンが押された時のメソッドです。
/// </Summary>
public void OnPressedRemoveButton()
{
RemoveFieldParts();
}
/// <Summary>
/// フィールドのパーツを削除するメソッドです。
/// </Summary>
void RemoveFieldParts()
{
foreach (Transform tran in fieldParent)
{
Destroy(tran.gameObject);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment