Graphics.DrawMeshInstanced
は GPU Instancing を利用してメッシュを不要なゲームオブジェクトを作成するオーバーヘッドなしで メッシュを描画することができます
座標と Mesh、Material を指定するだけなのでかなりシンプルに利用することができます
using UnityEngine; public class GrassRenderer : MonoBehaviour { [SerializeField] private Material _material; [SerializeField] private Mesh _mesh; private Matrix4x4[] _transforms = new Matrix4x4[10]; private void Start() { _transforms = new Matrix4x4[10]; for (var i = 0; i < _transforms.Length; i++) { var position = new Vector3(i, 0f, 0f); var rotate = Quaternion.Euler(new Vector3(0f, Random.Range(0f, 360f), 0f)); _transforms[i] = Matrix4x4.TRS(position, rotate, Vector3.one); } } private void Update() { Graphics.DrawMeshInstanced(_mesh, 0, _material, _transforms); } }
実際に DrawCall を見てみるとちゃんと 1Drawで全インスタンス生成できています