首页 > 其他分享 >【Unity】(UI)抽屉式折叠面板

【Unity】(UI)抽屉式折叠面板

时间:2024-09-29 08:52:10浏览次数:7  
标签:contentTransform List optionTransformList Unity UI private 抽屉式 optionTransform o

UI中实现一个抽屉式折叠面板

成果展示

Scene部分

主要包括两个部分:Option和Content。

option对应的是选项按钮;Content对应的是展开的内容;

这里由于此篇写法的问题。需要将option中Button从0开始依次编号。

物体请按照固定的距离进行摆放。

如Option中每个子物体的位置分别为(0,0,0)(0,-140,0)(0,-180,0)(0,-220,0);

Content中每个子物体的位置分别为(0,0,0)(0,-40,0)(0,-80,0)(0,-120,0);

可以看到未展开的两个选项按钮距离间隔为40;

中间有展开内容的两个选项按钮距离间隔为140;

脚本绑定在Collapse物体上

脚本部分

新建一个类,定义一些与业务无关的基本方法

public class BaseCollapse
{
    private List<RectTransform> optionTransformList;
    private List<Transform> contentTransformList;
    private float optionStep;
    private float contentStep;

    /// <summary>
    /// 通用的折叠面板操作
    /// </summary>
    /// <param name="optionTransformList">所有选项</param>
    /// <param name="contentTransformList">所有内容</param>
    /// <param name="optionStep">选项中间间隔</param>
    /// <param name="contentStep">展开内容后,选项之间间隔</param>
    public BaseCollapse(List<RectTransform> optionTransformList, List<Transform> contentTransformList, float optionStep, float contentStep)
    {
        this.contentTransformList = contentTransformList;
        this.optionTransformList = optionTransformList;
        this.optionStep = optionStep;
        this.contentStep = contentStep-optionStep;
    }
    /// <summary>
    /// 展开折叠面板的指定项
    /// </summary>
    /// <param name="id">指定项ID</param>
    public void CollapseVisble(int id)
    {
        RectTransform optionTransform = optionTransformList[id];
        Transform contentTransform = contentTransformList[id];
        Vector2 optionPosition = optionTransform.anchoredPosition;
        if (!contentTransform.gameObject.activeSelf)
        {
            foreach (var item in contentTransformList)
            {
                item.gameObject.SetActive(false);
            }
            contentTransform.gameObject.SetActive(true);

            for (int i = id + 1; i < optionTransformList.Count; i++)
            {
                optionTransformList[i].anchoredPosition = new Vector2(optionPosition.x, optionTransformList[0].anchoredPosition.y - contentStep - optionStep * i);
            }
            for (int i = 1; i < id + 1; i++)
            {
                optionTransformList[i].anchoredPosition = new Vector2(optionPosition.x, optionTransformList[0].anchoredPosition.y - optionStep * i);
            }
        }
    }
}

脚本绑定到物体,实例化BaseCollapse,传入相关的信息。

public class Collapse : MonoBehaviour
{
    private List<RectTransform> optionTransform;
    private List<Transform> contentTransform;
    BaseCollapse baseCollapse;
    private void Awake()
    {
        optionTransform = new List<RectTransform>();
        Transform options = transform.Find("option");
        for (int i = 0; i < options.childCount; i++)
        {
            optionTransform.Add(options.GetChild(i).GetComponent<RectTransform>());
        }

        contentTransform = new List<Transform>();
        Transform content = transform.Find("content");
        for (int i = 0; i < content.childCount; i++)
        {
            contentTransform.Add(content.GetChild(i));
        }


        for (int i = 0; i < optionTransform.Count; i++)
        {
            Button button = optionTransform[i].GetComponent<Button>();
            button.onClick.AddListener(() =>
            {
                baseCollapse.CollapseVisble(int.Parse(button.name));
            });
        }

        baseCollapse = new BaseCollapse(optionTransform, contentTransform, 40, 140);

    }
}

标签:contentTransform,List,optionTransformList,Unity,UI,private,抽屉式,optionTransform,o
From: https://www.cnblogs.com/sitarblogs/p/18438801

相关文章

  • GZY.Quartz.MUI
    GZY.Quartz.MUI(基于Quartz的UI可视化操作组件)2.7.0发布新增各项优化与BUG修复  前言时隔大半年,终于抽出空来可以更新这个组件了(边缘化了,大概要被裁员了)2.7.0终于发布了~更新内容:1.添加API类任务的超时时间,可以通过全局配置也可以单个任务设置2.设置定时任务......
  • 【GUI设计】基于Matlab的图像特征提取GUI系统(9),matlab实现
             博主简介:如需获取设计的完整源代码或者有matlab图像代码项目需求,可联系主页简介提供的方式或者文末的扫码。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        本次案例是基于Matlab的图像特征提取GUI系统(9),用m......
  • DAAE2008 Innovative Building Structures
    DAAE2008 Innovative BuildingStructuresSemester2,20241.   IntroductionTheaimoftheunit istoengagestudents instudying innovative and advanced building structures, addressingtopology,materials,andconstruction. Topics include :......
  • 【已解决】arduino一直在进入界面无法打开问题
    问题概述:            启动Arduino时一直卡在启动界面已尝试方法:删除arduino所有文件,重新安装关闭防火墙以管理员身份打开解决方法:打开设置进入更新和安全,选择windows安全中心进入病毒和威胁防护,选择“病毒和威胁防护”设置下拉选择 添加或删除排除项......
  • llama-factory挂载pm2出现问题:node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9'
    使用ssh连接服务器上运行llama-factory进行微调,但是一旦关闭ssh,程序也会随之关闭,而使用nohup命令会出现nohup:ignoringinput尝试采用pm2:(base)[hongjiayin@localhostLLaMA-Factory]$pm2startstart.shnode:/lib64/libstdc++.so.6:version`CXXABI_1.3.9'notfound......
  • [使用目前最新版]HybridCLR6.9.0+YooAsset2.2.4实现纯C# Unity热更新方案 (一)
    1.前言什么是热更新游戏或者软件更新时,无需重新下载客户端进行安装,而是在应用程序启动的情况下,在内部进行资源或者代码更新Unity目前常用热更新解决方案HybridCLR,Xlua,ILRuntime等Unity目前常用资源管理解决方案AssetBundles,Addressable,YooAsset等在这里我们采用HybridCLR......
  • WPF FlowDocument List ListItem Paragraph BlockUIContainer Table TableRowGr
    <Windowx:Class="WpfApp419.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 树莓派5上部署文本转语音TTS(使用Coqui TTS模型)
    前言本文主要针对2023年发布的树莓派新产品树莓派5的开发使用,为了实现离线的文本(中文)转语音功能,本文使用了TTS技术,本文模型使用的是Coqui的中文模型。一、环境需要树莓派5(最好8GB内存)RspberryPI系统Conda环境(可自行搜索,也可以查看我专栏下的其他文章)在本文下使用的......
  • 【AI绘画】再谈大模型工作流技术之——ComfyUI框架
    “工作流,一种根据配置执行固定操作的流程”而最近在做一款AIGC产品的过程中,主要负责的就是Comfyui工作流这块;本着要知其然,也要知其所以然的心态,因此向公司的炼丹师请教了一下ComfyUI工作流的工作原理以及工作流程。ComfyUI的工作原理以及流程首先要声明一个误区,ComfyUI......
  • PyQt5 使用 QFrame 实现页面类抽屉式的进入与退出的动画
    PyQt5使用QFrame实现页面类抽屉式的进入与退出的动画当多个页面切换,但是又不想每个页面里的内容只是简单的出现与消失,则可以使用这个QPropertyAnimation动画代码结构本文中全部代码全在test_QFrame_Animation.py这一个文件中编码,步骤中有变动的地方会注释标注,无改动的不会重......