unity 一级二级菜单控制脚本,一级菜单点击控制对应二级菜单父物体显隐,二级菜单对应单独方法,使用MVC框架
时间: 2023-08-03 17:03:57 浏览: 91
Unity(UGUI)做一个三级下拉菜单列表(树形下拉菜单)。
5星 · 资源好评率100%
以下是一个基本的Unity菜单控制脚本,其中使用了MVC框架:
```csharp
using UnityEngine;
using UnityEngine.UI;
public class MenuController : MonoBehaviour
{
// Model
public GameObject menuParent;
public GameObject[] subMenus;
// View
public Button[] menuButtons;
public Button[] subMenuButtons;
// Controller
private int currentMenuIndex = -1;
void Start()
{
// 隐藏所有子菜单
foreach (var subMenu in subMenus)
{
subMenu.SetActive(false);
}
// 绑定一级菜单点击事件
for (int i = 0; i < menuButtons.Length; i++)
{
int index = i;
menuButtons[i].onClick.AddListener(() => OnMenuButtonClick(index));
}
// 绑定二级菜单点击事件
for (int i = 0; i < subMenuButtons.Length; i++)
{
int index = i;
subMenuButtons[i].onClick.AddListener(() => OnSubMenuButtonClick(index));
}
}
// 一级菜单点击事件
private void OnMenuButtonClick(int index)
{
if (currentMenuIndex == index)
{
// 如果当前已经选中了这个一级菜单,再次点击应该关闭所有子菜单
CloseAllSubMenus();
}
else
{
// 关闭上一个选中的一级菜单的子菜单
if (currentMenuIndex >= 0)
{
CloseAllSubMenus();
}
// 显示当前选中的一级菜单的子菜单
currentMenuIndex = index;
subMenus[index].SetActive(true);
}
}
// 二级菜单点击事件
private void OnSubMenuButtonClick(int index)
{
// 处理对应的二级菜单逻辑
// ...
// 关闭当前选中的一级菜单的所有子菜单
CloseAllSubMenus();
}
// 关闭所有子菜单
private void CloseAllSubMenus()
{
if (currentMenuIndex >= 0)
{
subMenus[currentMenuIndex].SetActive(false);
currentMenuIndex = -1;
}
}
}
```
在这个脚本中,我们使用了MVC框架来分离模型、视图和控制器。其中,一级菜单和二级菜单的父物体是模型,菜单按钮和子菜单按钮是视图,而控制器则处理点击事件并控制模型和视图的交互。
在Start()方法中,我们首先隐藏了所有的子菜单,并为所有的一级菜单按钮和二级菜单按钮绑定了点击事件。在OnMenuButtonClick()方法中,我们根据当前选中的一级菜单的索引来决定是否显示或隐藏其对应的子菜单。如果当前已经选中了这个一级菜单,再次点击应该关闭所有子菜单;否则,我们先关闭上一个选中的一级菜单对应的子菜单,再显示当前选中的一级菜单对应的子菜单。在OnSubMenuButtonClick()方法中,我们可以处理对应的二级菜单的逻辑,例如打开一个新场景或弹出一个UI面板等。最后,在CloseAllSubMenus()方法中,我们关闭当前选中的一级菜单对应的所有子菜单。
阅读全文