うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】BaseMeshEffect で UIVertex の color, position, uv0 以外を利用する方法

BaseMeshEffect を利用して Shader側にパラメータを渡すために
下記コードのように uv1 を利用しようとしたがパラメータが渡されない

public override void ModifyMesh(VertexHelper vh)
{
    var vertexList = new List<UIVertex>();
    vh.GetUIVertexStream(vertexList);
 
    var rect = transform as RectTransform;
 
    for (int i = 0; i < vertexList.Count; i++)
    {
        var vertex = vertexList[i];
        vertex.uv1 = new Vector2(0, 0);
        vertex.uv2 = new Vector2(rect.rect.width, rect.rect.height);
        vertexList[i] = vertex;
    }
 
    vh.Clear();
    vh.AddUIVertexTriangleStream(vertexList);
}

調べてみると Canvas は デフォルトでは color, position, uv0 のみ渡すようにしてあるらしい

f:id:hacchi_man:20200425061303p:plain

そのため、必要なパラメータがあれば、 Additional Shader Channels をいじってやる必要がありました