unity UGUI:特效在Scroll View中的裁剪

问题:在滑动列表中选中Item的效果是一个特效,但是当滑动出了Mask的裁剪范围内时特效并未被裁剪掉。

解决办法有两个:

1、在滑动列表的节点下添加一个空节点(和挂载Mask的节点平级),挂载上SpriteMask组件,此时需要设置RectTransform上的裁剪范围,这个的范围确定是由Scale调整的,修改宽高并没有效果。可以代码中动态根据列表的大小设置Scale的值,缩放值和UI元素之间的大小比率为100倍。

 public void SetSpriteMaskScale() {
        // 获取裁剪区域的宽高
        RectTransform scrollRectTran = scrollRect.GetComponent<RectTransform>();
        float rectWidth = scrollRectTran.rect.width;
        float rectHeight = scrollRectTran.rect.height;
        // 获取裁剪精灵的宽高
        SpriteMask spriteMask = gameObject.GetComponentInChildren<SpriteMask>();
        float spriteWidth = spriteMask.sprite.rect.width;
        float spriteHeight = spriteMask.sprite.rect.height;
        // 计算宽高比获取缩放值的大小
        float scaleX = ( rectWidth / spriteWidth ) * 100;
        float scaleY = ( rectHeight / spriteHeight ) * 100;
        // 设置裁剪范围
        spriteMask.gameObject.transform.localScale = new Vector2( scaleX, scaleY );

        Debug.LogError( $"rectWidth:{rectWidth}   " +
            $"rectHeight:{rectHeight}    " +
            $"spriteWidth:{spriteWidth}   " +
            $"spriteHeight:{spriteHeight}   " +
            $"scaleX:{scaleX}   " +
            $"scaleY:{scaleY}" );
    }

此时还需要设置特效的Renderer属性为VisibleInsideMask

ps:设置初始裁剪范围,不动态调整裁剪范围。

若不调整SpriteMask的裁剪范围会造成UI的Mask裁剪范围错误,此时可以调整特效的渲染层级,使其只裁剪特效,给特效添加SoringGroup

然后在SpriteMask中调整设置自定义范围,此时并没有动态修改裁剪范围,但是裁剪的层级限定了范围

2、修改shader,每一个需要裁剪的特效都需要设置相关属性,此方法未实现,可以搜一下网上有相关案例。

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值