以前uGUIでメッシュ描画する記事書きましたが。
Unity5.2頃から仕様変更されました。
というわけで、どのような手順で変更に対応するかをざっくり書いておきます。
変更内容
OnFillVBOではなくOnPopulateMeshを実装してください。とのこと。
頂点情報の配列からメッシュに変わったので自由度は増えてそうです。
試してないですが、サブメッシュなんかも可能かもしれません。
OnFillVBOからの置き換え
OnFillVBOから単純に置き換える場合は結構簡単です。
以前の
protected override void OnFillVBO( List<UIVertex> vbo ) { UIVertex v = UIVertex.simpleVert; // 左下 v.position = new Vector3( -100, 0, 0 ); v.color = Color.white; vbo.Add( v ); // 右下 v.position = new Vector3( 100, 0, 0 ); v.color = Color.yellow; vbo.Add( v ); // 右上 v.position = new Vector3( 50, 100, 0 ); v.color = Color.red; vbo.Add( v ); // 左上 v.position = new Vector3( -50, 100, 0 ); v.color = Color.green; vbo.Add( v ); }
新しいの
protected override void OnPopulateMesh( Mesh mesh ) { // 左下 UIVertex lb = UIVertex.simpleVert; lb.position = new Vector3( -100, 0, 0 ); lb.color = Color.white; // 右下 UIVertex rb = UIVertex.simpleVert; rb.position = new Vector3( 100, 0, 0 ); rb.color = Color.yellow; // 右上 UIVertex rt = UIVertex.simpleVert; rt.position = new Vector3( 50, 100, 0 ); rt.color = Color.red; // 左上 UIVertex lt = UIVertex.simpleVert; lt.position = new Vector3( -50, 100, 0 ); lt.color = Color.green; using ( var vbo = new VertexHelper() ) { vbo.AddUIVertexQuad( new UIVertex[] { lb, rb, rt, lt } ); vbo.FillMesh( mesh ); } }
変更点としてはまず、overrideするメソッドが変わります。
次に頂点の設定にVertexHelperのAddUIVertexQuadを利用します。
引数は頂点の配列です。
これで以前のものと同じ結果になります。
以前と違ってAddで順番に入れることは出来なくなりましたが、そこまで変更点はなく書き換えできそうです。
※ちなみにVertexHelper#AddVertは頂点が追加されるだけで、インデックスが追加されないので表示されません。
5.3での変更点
5.2 → 5.3でも若干変更されました。
protected override void OnPopulateMesh( Mesh mesh )
から
protected override void OnPopulateMesh( VertexHelper vh )
を実装するように変わりました。
引数がMeshからVertexHelperに変更されました。
ただ実装方法は上記と基本的に変わりません。
自分でnew VertexHelperしていたのが引数で与えられるというだけのようです。
※注意点としてこの引数のVertexHelperに追加された頂点情報は自動で削除されません。
そのため毎回AddUIVertexQuadしているとポリゴンがどんどん増えていくことになりますので、適宜Clearを呼び出す等する必要があります。
コメント
[…] 詳しい記事:https://cfm-art.sakura.ne.jp/sys/archives/214 […]