以下のサイトで公開されているコードですが、
バージョン:Unity 2019.2.11f1 (64-bit)
だとGraphics.DrawProceduralの行で、旧形式でコンパイルエラーが出ます。
Unity:Geometry Shader を使って100万キューブ/立方体/Cubeを描画する!
上記サイトよりコピーしたコードが以下
using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; public class GeometryShaderCube : MonoBehaviour { public Shader shader; List<Vector3> points; Material material; ComputeBuffer buffer; /// <summary> /// 初期化 /// </summary> void OnEnable() { material = new Material(shader); // 100 x 100 x 100 = 1,000,000 cube int start = -50; int end = 100 + start; points = new List<Vector3>(); for (int x = start; x < end; x++) { for (int y = start; y < end; y++) { for (int z = start; z < end; z++) { points.Add(new Vector3(x, y, z)); } } } buffer = new ComputeBuffer(points.Count, Marshal.SizeOf(typeof(Vector3)), ComputeBufferType.Default); buffer.SetData(points); material.SetFloat("rotate_x", this.transform.rotation.x); material.SetFloat("rotate_y", this.transform.rotation.y); material.SetFloat("rotate_z", this.transform.rotation.z); material.SetBuffer("points", buffer); } void OnDisable() { points.Clear(); buffer.Release(); } /// <summary> /// レンダリング /// </summary> void OnRenderObject() { material.SetFloat("rotate_x", this.transform.rotation.x); material.SetFloat("rotate_y", this.transform.rotation.y); material.SetFloat("rotate_z", this.transform.rotation.z); // レンダリングを開始 material.SetPass(0); // 1万個のオブジェクトをレンダリング Graphics.DrawProcedural(MeshTopology.Points, points.Count); } }
以下のスクリプトリファレンスをみると
https://docs.unity3d.com/ja/current/ScriptReference/Graphics.DrawProcedural.html
public static void DrawProcedural (Material material, Bounds bounds, MeshTopology topology, int vertexCount, int instanceCount, Camera camera, MaterialPropertyBlock properties, Rendering.ShadowCastingMode castShadows, bool receiveShadows, int layer);
と項目が増えており、特に
Bounds bounds
が何をいれていいのかが上記のコードの場合わかりませんでした。
上記のコードを書き換える場合、どのように書き換えたら、動きますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。