unity 一级二级菜单控制脚本,一级菜单点击控制对应二级菜单父物体显隐,二级菜单对应单独方法,使用MVC框架
时间: 2023-08-03 17:06:30 浏览: 92
以下是一个简单的 MVC 框架实现一级二级菜单控制脚本的示例代码:
View 层代码:
```csharp
using UnityEngine;
using UnityEngine.UI;
public class MenuView : MonoBehaviour
{
public Button[] firstLevelButtons; // 一级菜单按钮数组
public GameObject[] secondLevelMenus; // 二级菜单父物体数组
public void Init(MenuController controller)
{
// 绑定一级菜单按钮的点击事件到控制器的方法
for (int i = 0; i < firstLevelButtons.Length; i++)
{
int index = i; // 注意闭包的问题
firstLevelButtons[i].onClick.AddListener(() => controller.OnFirstLevelButtonClick(index));
}
// 绑定二级菜单的方法到控制器的方法
for (int i = 0; i < secondLevelMenus.Length; i++)
{
controller.RegisterSecondLevelMenu(i, secondLevelMenus[i]);
}
}
// 控制二级菜单父物体的显隐
public void SetSecondLevelMenuActive(int index, bool active)
{
secondLevelMenus[index].SetActive(active);
}
}
```
Controller 层代码:
```csharp
using System.Collections.Generic;
using UnityEngine;
public class MenuController
{
private MenuView view;
private Dictionary<int, GameObject> secondLevelMenus = new Dictionary<int, GameObject>(); // 二级菜单父物体字典
public MenuController(MenuView view)
{
this.view = view;
this.view.Init(this);
}
// 一级菜单按钮点击事件
public void OnFirstLevelButtonClick(int index)
{
// 控制二级菜单的显隐
foreach (int key in secondLevelMenus.Keys)
{
view.SetSecondLevelMenuActive(key, key == index);
}
}
// 注册二级菜单父物体
public void RegisterSecondLevelMenu(int index, GameObject menu)
{
secondLevelMenus.Add(index, menu);
}
// 二级菜单对应方法
public void OnSecondLevelMenuClick(string menuName)
{
Debug.Log("Clicked: " + menuName);
}
}
```
这里只是一个简单的示例,具体可以根据实际需求进行扩展和改进。
阅读全文