This page may not work correctly inside the Unity editor. Open in browser

地形ディテールをランタイムで編集

※Nature Renderer 1.1.8 以降のバージョンが必要です。

地形に恒久的変更を加えたい場合は、ランタイムでの地形ディテールの編集が可能です。

地形の編集方法

  1. Unityの地形データを、TerrainData.SetDetailLayerを用いて編集します。
  2. 「TerrainChangedFlags.RemoveDirtyDetailsImmediately」パラメータを用いて、Nature RendererコンポーネントにRebuild buffersを呼び出します。
  3. Nature Rendererが自動的に地形の修正箇所を発見し、その範囲のインターナルバッファを再構築します。再構築は別のワーカースレッド上で行われ、完成するまでいくつかのフレームを使用します。その間は、古い地形データが表示された状態となります。

注: 地形のハイトマップを変更する、または既存でない新しいディテールを追加する場合、Nature Rendererは修正された範囲だけでなく、地形全体を再構築しなければなりません。大型の地形では、この作業に1~2秒を要します。

Unityのドキュメンテーションから引用した修正例

using UnityEngine;
using VisualDesignCafe.Rendering.Nature;

public class ExampleClass : MonoBehaviour { // Set all pixels in a detail map below a certain
// threshold to zero. void DetailMapCutoff(Terrain t, float threshold) { // Get all of layer zero. var map =
t.terrainData.GetDetailLayer(
0,
0,
t.terrainData.detailWidth,
t.terrainData.detailHeight,
0);

// For each pixel in the detail map... for (int y = 0; y < t.terrainData.detailHeight; y++) { for (int x = 0; x < t.terrainData.detailWidth; x++) { // If the pixel value is below the threshold then // set it to zero. if (map[x, y] < threshold) { map[x, y] = 0; } } }

// Assign the modified map back. t.terrainData.SetDetailLayer(0, 0, 0, map);

// Update Nature Renderer's buffers.
t.GetComponent<NatureRenderer>().RebuildBuffers(
TerrainChangedFlags.RemoveDirtyDetailsImmediately ); } }

 

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています