unity 一级二级菜单控制脚本,一级菜单按钮为toggle 有多个,控制对应二级菜单父物体显隐,二级菜单无操作并挂载到unity场景,使用MVC框架
时间: 2023-08-07 09:05:16 浏览: 49
以下是一个简单的实现方案,使用MVC框架实现一级菜单toggle控制对应二级菜单父物体显隐。
首先,我们需要定义一个菜单项的数据模型,包含菜单项的名称、是否选中等信息。可以在Models文件夹下创建一个MenuModel类,代码如下:
```csharp
using System;
namespace MVC.Models
{
[Serializable]
public class MenuModel
{
public string Name { get; set; }
public bool IsSelected { get; set; }
}
}
```
接下来,我们需要创建一个菜单项的视图,用来显示菜单项的名称和选中状态,并响应用户的点击事件。可以在Views文件夹下创建一个MenuView类,代码如下:
```csharp
using System;
using UnityEngine;
using UnityEngine.UI;
using MVC.Controllers;
namespace MVC.Views
{
public class MenuView : MonoBehaviour
{
public Text NameText;
public Toggle ToggleButton;
public int Index;
private MenuController _controller;
public void Init(MenuController controller, string name, bool isSelected, int index)
{
_controller = controller;
NameText.text = name;
ToggleButton.isOn = isSelected;
Index = index;
}
public void OnClick()
{
_controller.ToggleMenu(Index);
}
}
}
```
这里我们使用了Unity自带的Toggle组件来实现菜单项的选中状态,点击菜单项时会调用MenuController的ToggleMenu方法来切换选中状态。
最后,我们需要创建一个菜单的控制器,用来管理菜单项的数据和视图。可以在Controllers文件夹下创建一个MenuController类,代码如下:
```csharp
using System.Collections.Generic;
using UnityEngine;
using MVC.Models;
using MVC.Views;
namespace MVC.Controllers
{
public class MenuController : MonoBehaviour
{
public GameObject[] SubMenus;
public MenuModel[] MenuItems;
public MenuView MenuPrefab;
public Transform MenuParent;
private List<MenuView> _menuViews = new List<MenuView>();
void Start()
{
// 初始化菜单项数据
MenuItems = new MenuModel[]
{
new MenuModel { Name = "Item A", IsSelected = true },
new MenuModel { Name = "Item B", IsSelected = false },
new MenuModel { Name = "Item C", IsSelected = false }
};
// 创建菜单项视图
for (int i = 0; i < MenuItems.Length; i++)
{
var menuItem = MenuItems[i];
var menuView = Instantiate(MenuPrefab, MenuParent);
menuView.Init(this, menuItem.Name, menuItem.IsSelected, i);
_menuViews.Add(menuView);
}
// 显示初始的子菜单
for (int i = 0; i < SubMenus.Length; i++)
{
SubMenus[i].SetActive(MenuItems[i].IsSelected);
}
}
public void ToggleMenu(int index)
{
// 切换菜单项的选中状态
MenuItems[index].IsSelected = !MenuItems[index].IsSelected;
// 显示或隐藏对应的子菜单
SubMenus[index].SetActive(MenuItems[index].IsSelected);
// 更新菜单项视图的选中状态
_menuViews[index].ToggleButton.isOn = MenuItems[index].IsSelected;
}
}
}
```
在Start方法中,我们初始化了菜单项数据,并创建了菜单项视图。菜单项视图会调用MenuController的ToggleMenu方法来切换菜单项的选中状态,并根据选中状态显示或隐藏对应的子菜单。同时,我们还将菜单项视图的选中状态与菜单项数据同步。
至此,我们就完成了一个简单的一级二级菜单控制脚本,使用MVC框架实现了菜单项的数据和视图分离,方便维护和扩展。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)