うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】BaseMeshEffect の描画順を変える

Text の複数 Outline のコンポーネントを作成しようとしていると

Outline が Text よりあとに描画されてしまっており、想定していた順番で描画されなかった

f:id:hacchi_man:20200916003505p:plain

テスト

単純に考えると AddUIVertexTriangleStream で渡した List の順番で描画されるはずなので
もとの頂点を最初と最後でどう違うか見てみる

左が最後に入れたもので、右が最初に入れたもの

f:id:hacchi_man:20200916003735p:plain

これで List の順番で描画されることが確認できた

   /// <summary>
    /// 最後に入れる
    /// </summary>
    public override void ModifyMesh(VertexHelper vh)
    {
        _vertexList.Clear();
        vh.GetUIVertexStream(_vertexList);

        for (int i = 0; i < 6; i++)
        {
            var v = _vertexList[i];
            v.color = Color.black;
            _vertexList.Add(v);
        }

        vh.Clear();
        vh.AddUIVertexTriangleStream(_vertexList);
    }

    /// <summary>
    /// 最初に入れる
    /// </summary>
    public override void ModifyMesh(VertexHelper vh)
    {
        _vertexList.Clear();
        _vertexList2.Clear();
        vh.GetUIVertexStream(_vertexList);

        for (int i = 0; i < 6; i++)
        {
            var v = _vertexList[i];
            v.color = Color.black;
            _vertexList2.Add(v);
        }

        _vertexList2.AddRange(_vertexList);
        vh.Clear();
        vh.AddUIVertexTriangleStream(_vertexList2);
    }

解決方法

つまりBaseMeshEffect に渡す List の先頭から順に描画されるので、後に描画したいものを後ろに入れてやればいい