uGUIで自由なメッシュを表示するのUnity5. 2対応(※5.3追記)

以前uGUIでメッシュ描画する記事書きましたが。

uGUIで自由なメッシュを表示する
UnityのuGUIはImageやRawImage等単一スプライトの表示機能はちゃんと用意されていますが、これは1ゲームオブジェクトに付き1スプライトしか表示できません。 例えばマップチップを使いたいとき…なんかにはちょっと無駄感があ...

Unity5.2頃から仕様変更されました。

というわけで、どのような手順で変更に対応するかをざっくり書いておきます。

 

コチラに以前の記事と合わせて統合しました。

uGUIで自由なメッシュを表示する(5.3統合版)
この記事は uGUIで自由なメッシュを表示する(5.0)とuGUIで自由なメッシュを表示する(5.3) この2つの記事を統合したものです。 UnityのuGUIはImageやRawImage等単一スプライト...

変更内容

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を呼び出す等する必要があります。

タイトルとURLをコピーしました