RectMask2D剪裁3d物体

需要将RectMask2D的区域传给3d物品显示的Shader,然后控制3d物体的透明度,不在范围内的设置为0


首先修改使用到的Shader,添加(使用到的参数声明忽略):

//Properties
_MinX ("Min X", Float) = -10
_MaxX ("Max X", Float) = 10
_MinY ("Min Y", Float) = -10
_MaxY ("Max Y", Float) = 10

//顶点函数
o.wpos = mul(unity_ObjectToWorld, v.vertex).xyz;

//片元函数
c.a *= (i.wpos.x >= _MinX );
c.a *= (i.wpos.x <= _MaxX);
c.a *= (i.wpos.y >= _MinY);
c.a *= (i.wpos.y <= _MaxY);
c.rgb *= c.a;



  获取RectMask2D的区域,传递需要裁剪的3D物体

Vector3[] corners = new Vector3[4];
RectTransform rectTransform = GetComponent<RectTransform>("UIGirdlView/Viewport");
rectTransform.GetWorldCorners(corners);
m_GridCorners[0] = corners[0].x;
m_GridCorners[1] = corners[0].y;
m_GridCorners[2] = corners[2].x;
m_GridCorners[3] = corners[2].y;


var items = transform.GetComponentsInChildren<Renderer>();
foreach (var item in items)
{
    var m = item.material;
    m.SetFloat("_MinX", m_GridCorners[0]);
    m.SetFloat("_MinY", m_GridCorners[1]);
    m.SetFloat("_MaxX", m_GridCorners[2]);
    m.SetFloat("_MaxY", m_GridCorners[3]);
}



首页 我的博客
粤ICP备17103704号