本記事ではGPU Instancerを用いてテレインの草を動的に刈る方法を紹介します。
GPU Instancerとは
GPU InstancerとはUnity Aseet Storeで販売されている、大量のゲームオブジェクトを高いFPSを保ちながら描写することができるアセットです。
以下の記事では5万個のゲームオブジェクトを、GPU Instancerあり/なしでのFPSを比較しています。ぜひ参考にしてください。
このアセットにはゲームオブジェクトを大量に描写するだけでなくほかの機能もかなり充実しています。
準備
GPU Instancerにはテレインのオブジェクト(木や草など)を管理する機能があります。
このアセットを通すことで、動的に草を削ることができます。
TerrainとGPUI Detail Managerを作成
Toolsタブ>GPU Instancer>Add Detail Manager For Terrains
でGPUI Detail Managerを生成します。

Terrainに草を生成
Terrainに草を追加します。
そしていつも通り、Terrainの表面に草や花を塗っていきます。

草刈り機を生成
適当にCubeゲームオブジェクトを作成します。そして新たにC#スクリプトを作成して「Controller」と命名します。それをゲームオブジェクトに取り付けます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GPUInstancer;
public class Controller : MonoBehaviour
{
public List<Collider> selectedColliders;
private void Update()
{
foreach (GPUInstancerManager manager in GPUInstancerManager.activeManagerList)
{
foreach (Collider collider in selectedColliders)
{
GPUInstancerAPI.RemoveInstancesInsideBounds(manager, collider.bounds, 0);
}
}
}
}
そして、インスペクターからselectedCollidersの0番目にCubeについているBox Colliderを代入します。
これで準備は完了しました!
結果
あとはゲームを実行してゲームオブジェクトをSceneウィンドウ等から移動させます。
するとCubeが通った部分の草が消えていることが確認できると思います。

これでまた表現の幅が広がりました!あとはこの単純なキューブオブジェクトを草刈り機などのモデルに変えて、草を刈るシステムをゲームに取り込むと面白くなりそうです。

コメント