FairyGUI使用——列表居中放大动画

Unity:2021.1.14flc1
FairyGUI:4.2.0

效果图

在这里插入图片描述
这里的代码基于循环列表的基础上改进的,可以参考FairyGUI使用——循环列表

FairyGUI内部设置

请添加图片描述
list的大小要有余留,否则无法渲染出放大的部分
请添加图片描述
list与内部的button的装载器都要设置为关联容器,并调整为左右居中,上下居中

代码部分

DoSpecialEffect()为动画效果函数
函数设置好之后要在组件的Start()内调用,
另外给每一个按钮元素设置中心点在中间位置:

public class LoopList : MonoBehaviour
{
    private GComponent mainUI;
    private GList list;
    // Start is called before the first frame update
    void Start()
    {
        mainUI = GetComponent<UIPanel>().ui;
        list = mainUI.GetChild("n0").asList;
        list.SetVirtualAndLoop();
        list.itemRenderer = RenderListItem;
        list.numItems = 7;//设置列表内容数量
        list.scrollPane.onScroll.Add(DoSpecialEffect);//滚动时派发事件
        DoSpecialEffect();//初始化调用
    }

    /// <summary>
    /// 循环列表中间元素放大效果
    /// </summary>
    private void DoSpecialEffect()
    {
        float listCenter = list.scrollPane.posX + list.viewWidth / 2;
        //list组件的x值,加上list组件自身宽度的一半,设置为对标的中心x值
        for(int i = 1; i < list.numChildren; i++)
        {
            GObject item = list.GetChildAt(i);
            float itemCenter = item.x + item.width / 2;//循环列表内元素的中心x值
            float itemWidth = item.width;//列表元素的宽度
            float distance = Mathf.Abs(listCenter - itemCenter);
            if (distance<item.width)
            {
                float distanceRange = 1 + (1 - distance / itemWidth)*0.4f;//使放大动画有渐进效果
                item.SetScale(distanceRange, distanceRange);//设置放大比例
            }
            else
            {
                item.SetScale(1, 1);
            }
        }
    }

    private void RenderListItem(int index, GObject obj)
    {
        GButton button = obj.asButton;
        button.SetPivot(0.5f,0.5f);//设置中心点
        button.icon = UIPackage.GetItemURL("LoopList", "image0" + (index + 1));
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值