Unity实现QQ列表折叠菜单

 更新时间:2020年04月18日 14:04:47   作者:梦丶初寒  
这篇文章主要为大家详细介绍了Unity实现QQ列表折叠菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Unity实现QQ列表折叠菜单的具体代码,供大家参考,具体内容如下

主要用到了GUI的自动布局功能,VerticalLayoutGroup,注意ChildControlsSize 和ChildForceExpand属性设置为 Width

效果:

实现代码:

/// <summary>
/// 折叠菜单
/// </summary>
public class FoldPanel : MonoBehaviour
{
  [SerializeField]
  private GameObject panelItem; // 折叠页
  [SerializeField]
  private TitleItem titleItem;
  [SerializeField]
  private DataItem dataItem;

  public List<FoldData> dataList = new List<FoldData>();

  private void Start()
  {
    Create();
  }

  public void Create()
  {
    for (int i = 0; i < dataList.Count; i++)
    {
      // 创建标题
      TitleItem title = Instantiate(titleItem).GetComponent<TitleItem>();
      title.SetTitle(dataList[i].titleName);
      title.transform.SetParent(this.transform);

      // 创建子折叠面板
      GameObject panel = Instantiate(panelItem);
      panel.transform.SetParent(this.transform);
      // 260是折叠页的宽度,30DataItem的高度
      panel.GetComponent<RectTransform>().sizeDelta = new Vector3(260,30 * dataList[i].data.Count);
      title.SetFoldPanel(panel);
      panel.SetActive(false);

      // 创建折叠页数据
      for (int j = 0; j < dataList[i].data.Count; j++)
      {
        DataItem item = Instantiate(dataItem).GetComponent<DataItem>();
        item.transform.SetParent(panel.transform);
        item.SetInfo(dataList[i].data[j]);
      }
    }
  }
}

[System.Serializable]
public class FoldData
{
  public string titleName;
  public List<ItemData> data;
}

[System.Serializable]
public class ItemData
{
  public string userName;
  //public string imageName;
  public Sprite imageName;
}

TitleItem.cs

public class TitleItem : MonoBehaviour,IPointerClickHandler
{
  [SerializeField]
  private Text title;
  [SerializeField]
  private Transform arrow;

  public bool isFold = true; // 是否是折叠状态
  public Transform foldPanel; 

  public void OnPointerClick(PointerEventData eventData)
  {
    if (isFold)
    {
      isFold = false;

      arrow.DORotate(Vector3.zero, 0.1f);

      if (foldPanel != null)
      {
        foldPanel.gameObject.SetActive(true);
        foldPanel.DOScaleY(1, 0.1f);
      }
    }
    else
    {
      isFold = true;
      arrow.DORotate(new Vector3(0, 0, 90), 0.1f);
      
      if (foldPanel != null)
      {
        foldPanel.DOScaleY(0, 0.1f).OnComplete(() => { foldPanel.gameObject.SetActive(false); });
      }
    }
  }

  public void SetTitle(string _titleName)
  {
    title.text = _titleName;
  }

  public void SetFoldPanel(GameObject panel)
  {
    foldPanel = panel.transform;
  }
}

列表的数据来源是在界面上手动配置的,当然如果想要读取本地或者服务器的数据也是可以的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#实现拼图游戏

    C#实现拼图游戏

    这篇文章主要为大家详细介绍了C#实现拼图游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#中File和FileStream的简单介绍和用法

    C#中File和FileStream的简单介绍和用法

    这篇文章主要给大家介绍了关于C#中File和FileStream用法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Visual Studio C#创建windows服务程序

    Visual Studio C#创建windows服务程序

    用Visual C#创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它,本文主要介绍了Visual Studio C#创建windows服务程序,感兴趣的可以了解一下
    2024-01-01
  • C#格式化数字字符串的方法

    C#格式化数字字符串的方法

    这篇文章主要为大家详细介绍了C#格式化数字字符串的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • C#中list用法实例

    C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • 一篇文章带你轻松了解C# Lock关键字

    一篇文章带你轻松了解C# Lock关键字

    这篇文章主要给大家介绍了如何通过一篇文章带你轻松了解C# Lock关键字的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • 详解C#如何使用重载方法实现不同类型数据的计算

    详解C#如何使用重载方法实现不同类型数据的计算

    这篇文章主要为大家详细介绍了C#如何使用重载方法实现不同类型数据的计算,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C# swagger ui增加访问限制方式

    C# swagger ui增加访问限制方式

    本文介绍了如何在C#中使用Swagger UI并增加访问限制,通过创建`SwaggerBasicAuthMiddleware`类和`MiddlewareExtension`类,并在`Startup.cs`的`Configure`方法中注入`app.UseSwaggerBasicAuth()`,从而实现对Swagger页面的访问控制
    2025-02-02
  • 用几行C#代码实现定时关机/重启(超详细!建议新手练习)

    用几行C#代码实现定时关机/重启(超详细!建议新手练习)

    有很多的软件都实现了自动关机这样的功能,下面这篇文章主要给大家介绍了关于利用几行C#代码实现定时关机/重启的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 详解C#中线程传参,返回值和多线程冲突问题的解决

    详解C#中线程传参,返回值和多线程冲突问题的解决

    这篇文章主要为大家详细介绍了C#中线程传参,返回值和多线程冲突问题的解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11

最新评论