首页 > 其他分享 >Unity 三级目录

Unity 三级目录

时间:2024-10-29 14:09:04浏览次数:1  
标签:OBJ2 name int private menus Unity GetComponent 目录 三级

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MenuManage : MonoBehaviour
{
    // Start is called before the first frame update
    public Transform menus;
    private Transform slice1;
    private Transform slice2;
    private Transform slice3;
    private GameObject Clone2;
    private GameObject Clone3;
    private float startCloneHeight;
    private List<GameObject> cloneTwoList = new List<GameObject>();

    private int menesTotals;
    private List<Transform> menusTF = new List<Transform>();
    public GameObject content;
    public float contendHight;
    void Start()
    {
        menesTotals = menus.childCount;
        foreach (Transform tf in menus)
        {
            //  EventTriggerListener.Get(tf.gameObject).onClick = onMens;
            menusTF.Add(tf);
            tf.GetComponent<Button>().onClick.AddListener(() =>
            {
                onMens(tf.gameObject);
                // print(123);
            });
        }
        initi(MenuOne.sliceOneMenu);
    }
    void initi(int sliceOneMenu)
    {
        for (int i = 0; i < menesTotals; i++)
        {
            if (i == sliceOneMenu)
            {
                menus.GetChild(i).GetComponent<Image>().sprite = menus.GetChild(i).GetComponent<ChangleSP>().stopSP;
            }
            else
            {
                menus.GetChild(i).GetComponent<Image>().sprite = menus.GetChild(i).GetComponent<ChangleSP>().startSP;
            }
        }
        slice1 = menus.GetChild(sliceOneMenu);
        slice2 = slice1.GetComponent<MenuTwoThreeDate>().meneTwo;

        slice3 = slice1.GetComponent<MenuTwoThreeDate>().meneThree;
        ResetIndex(slice2, menus.gameObject, sliceOneMenu + 1);

    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="newTf">克隆出来所有的二级目录</param>
    /// <param name="parentOBJ">被克隆出来放在parentOBJ的下面</param>
    /// <param name="indexNum">按照顺序排列</param>
    private void ResetIndex(Transform newTf, GameObject parentOBJ, int indexNum)
    {
        for (int i = slice2.childCount - 1; i >= 0; i--)
        {
            GameObject newOBJ2 = Instantiate(newTf.GetChild(i).gameObject, menus);
            newOBJ2.transform.SetSiblingIndex(indexNum);

            if (!newOBJ2.GetComponent<Button>())
            {
                newOBJ2.AddComponent<Button>();
            }

            // EventTriggerListener.Get(newOBJ2).onClick = onMens2;
            newOBJ2.GetComponent<Button>().onClick.AddListener(() =>
           {
               onMens2(newOBJ2);
           });
            cloneTwoList.Add(newOBJ2);
        }
    }


    #region 点击一级目录
    void onMens(GameObject sender)
    {
        if (sender.GetComponent<Image>().sprite.name == sender.GetComponent<ChangleSP>().stopSP.name)
        {
            StartCoroutine(resetMenuOne(-1));
            sender.GetComponent<Image>().sprite = sender.GetComponent<ChangleSP>().startSP;
            return;
        }

        for (int i = 0; i < menesTotals; i++)
        {
            if (sender.name == menusTF[i].name)
            {
                StartCoroutine(resetMenuOne(i));
                menusTF[i].GetComponent<MenuTwoThreeDate>().arrow.SetActive(true);
            }
            else
            {
                menusTF[i].GetComponent<MenuTwoThreeDate>().arrow.SetActive(false);
            }
        }
    }

    IEnumerator resetMenuOne(int i)
    {

        while (cloneTwoList.Count > 0)
        {
            Destroy(cloneTwoList[0]);
            cloneTwoList.RemoveAt(0);
        }
        if (cloneThreeList.Count > 0)
        {
            Destroy(cloneThreeList[0]);
            cloneThreeList.RemoveAt(0);
        }
        yield return new WaitForSeconds(0.1f);
        if (i !=-1) initi(i);
        getMenusHight();
    }
    #endregion
    private int num;
    #region 点击二级目录
    void onMens2(GameObject OBJ2)
    {

        // print("二级名字" + OBJ2.name);

        if (OBJ2.GetComponent<Image>().sprite.name == OBJ2.GetComponent<ChangleSP>().stopSP.name)
        {
            Destroy(cloneThreeList[0]);
            cloneThreeList.RemoveAt(0);
            OBJ2.GetComponent<Image>().sprite = OBJ2.GetComponent<ChangleSP>().startSP;
            return;
        }

        for (int i = cloneTwoList.Count - 1; i >= 0; i--)
        {
            if (OBJ2.name == cloneTwoList[i].name)
            {
                OBJ2.GetComponent<Image>().sprite = OBJ2.GetComponent<ChangleSP>().stopSP;
                num = cloneTwoList.Count - i - 1;
            }
            else
            {
                cloneTwoList[i].GetComponent<Image>().sprite = OBJ2.GetComponent<ChangleSP>().startSP;
            }
        }
        if (cloneThreeList.Count > 0)
        {
            print("删除");
            Destroy(cloneThreeList[0]);
            cloneThreeList.RemoveAt(0);
        }
        StartCoroutine(CloneIE(OBJ2, num));

    }

    IEnumerator CloneIE(GameObject OBJ2, int i)
    {
        {
            yield return new WaitForSeconds(0.01f);

            for (int j = 0; j < menus.childCount; j++)
            {
                if (OBJ2.name == menus.GetChild(j).name)
                {
                    Clone3 = Instantiate(slice3.GetChild(i).gameObject, menus);
                    cloneThreeList.Add(Clone3);
                    if (Clone3.transform.childCount == 0) Clone3.SetActive(false);
                   // print(Clone3.transform.childCount);
                    Clone3.transform.SetSiblingIndex(j + 1);
                }
            }



            foreach (Transform tf in Clone3.transform)
            {
                EventTriggerListener.Get(tf.gameObject).onClick = onMens3;
            }
            getMenusHight();
        }
    }

    #endregion
    //点击二级的时候判断
    private List<GameObject> cloneThreeList = new List<GameObject>();


    #region//点击三级目录

    void onMens3(GameObject OBJ3)
    {

        for (int i = 0; i < Clone3.transform.childCount; i++)
        {
            if (OBJ3.name == Clone3.transform.GetChild(i).name)
            {
                OBJ3.GetComponent<Image>().sprite = OBJ3.GetComponent<ChangleSP>().stopSP;
                //  print("三级名字:" + OBJ3);
            }
            else
            {
                Clone3.transform.GetChild(i).GetComponent<Image>().sprite = OBJ3.GetComponent<ChangleSP>().startSP;
            }
        }
        getMenusHight();
    }
    #endregion

    //获取目录的高度
    void getMenusHight()
    {
        contendHight = 0;
        foreach (Transform child in menus)
        {
            RectTransform rectTransform = child.GetComponent<RectTransform>();
            if (rectTransform != null)
            {
                contendHight += rectTransform.rect.height;
            }
        }

        Vector2 date = content.GetComponent<RectTransform>().sizeDelta;
        date.y = contendHight + 50;
      //  print(date.y);
        content.GetComponent<RectTransform>().sizeDelta = date;
    }

}

 

标签:OBJ2,name,int,private,menus,Unity,GetComponent,目录,三级
From: https://www.cnblogs.com/zqiang0803/p/18513012

相关文章

  • Unity 滑动条 SlideView
    usingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;publicclassSlideView:MonoBehaviour{publicSliderslide;publicScrollbarsb;//UsethisforinitializationvoidStart(){if(transform.name=="Sc......
  • Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
    UnityV3初步使用——为我的.NET项目从简单三层架构转到IOC做准备 【前言】看过本博客的都知道(说得好像是热门博客似的,我真没法控制自己的臭美之情),本人喜欢在进入正题前总会喜欢搞点前奏,那么此文将不会再胡言乱语。马上开始。。。【Unity简介】在.NET中是一种非常流行......
  • 【Unity寻路插件】A* Pathfinding Project Pro 快速提升游戏中角色的移动和导航能力
    A*PathfindingProjectPro是一款强大的Unity插件,专为开发者提供高效的路径finding(寻路)解决方案。它广泛应用于各种类型的游戏,包括角色扮演游戏、策略游戏、实时战斗游戏等,能够显著提升游戏中角色的移动和导航能力。主要特点:1.高效的寻路算法A*算法实现:插件基于经典......
  • 探索Unity:从游戏引擎到元宇宙体验,聚焦内容创作
    unity是实时3D互动内容创作和运营平台,包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。......
  • Unity3D学习FPS游戏(6)武器发射子弹
    前言:上一篇中设置好了武器的瞄准,本篇将实现一个武器发射子弹的效果。子弹子弹发射位置在Weapon01下面新建一个GameObject用来设置发射子弹的位置,调整Position放在枪口位置。子弹模型子弹模型在下面路径找到子弹模型,然后拖入到项目中,并右键Prefab-unpack(为了避免影响......
  • 【Unity开发】如何使用 Assembly Definition 划分多个程序集,减少编译时间
    在Unity开发中,项目的复杂性和规模不断增加,这导致编译时间变得越来越长。为了提升编译效率,使用AssemblyDefinition文件(.asmdef)将代码划分成多个程序集是一种非常有效的解决方案。1.什么是AssemblyDefinition?AssemblyDefinition是一种Unity用于定义C#程序集的文件。通过将代......
  • git 中忽略目录及下面所有目录及文件夹
    在Git中,你可以使用.gitignore文件来指定哪些文件或目录应该被忽略,不加入版本控制。如果你想忽略Source/UI/fout/unpackage/目录下的所有文件夹和文件,你可以在.gitignore文件中添加以下规则:Source/UI/fout/unpackage/**这条规则的意思是忽略Source/UI/fout/unpackage/......
  • 安装xmind到指定目录 --未解决
    一、安装在Appdata下解决:管理员身份打开命令行切换到安装目录执行E:\xmind>.\Xmind-for-Windows-x64bit-24.10.01101-202410202317.exe/E="E:\xmind"无效1可能是没有写入文件夹的权限  解决:管理员身份打开命令行执行  C:\Windows\System32\attrib-rE:\xmind......
  • 在 PowerShell 中使用 dir | % { $_.CreationTime } 可以列出当前目录中所有文件和文
    在PowerShell中使用dir|%{$_.CreationTime}可以列出当前目录中所有文件和文件夹的创建时间。这里的%是ForEach-Object的简写,$_表示当前对象。如果你想要以更友好的格式输出这些创建时间,可以使用以下命令:powershellCopyCodedir|ForEach-Object{$_.CreationTi......
  • ESP-IDF搭建项目的目录结构
    ESP-IDF中组织项目,下面我将详细介绍ESP-IDF项目的目录结构,并指导您如何设计项目,以便整合之前提供的代码。目录ESP-IDF项目目录结构概述创建ESP-IDF项目项目目录结构详解3.1根目录3.2main目录3.3components目录(可选)配置文件详解4.1CMakeLists.txt文件4.2......