当前位置: 首页 > news >正文

Unity3D仿星露谷物语开发52之菜单页面

1、目标

创建菜单页面,可通过Esc键开启或关闭。

当把鼠标悬停在上面时它会高亮,然后当点击按钮时标签页会被选择。

2、 创建PauseMenuCanvas

(1)创建Canvas

在Hierarchy -> PersistentScene -> UI下创建新的Cavans命名为PauseMenuCanvas(右击 -> UI -> Canvas)。

配置组件的参数如下:

(2)创建BlackBackground

接下来创建黑色背景:

在PauseMenuCanvas下创建Image对象,重命名为BlackBackground:

Anchor Presets设置为:按住Shift + Alt,选择如下:

其他设置如下:

(3)创建PauseMenuPanel

接下来创建菜单的面板。

在PauseMenuCanvas下创建Image命名为PauseMenuPanel,其组件设置如下:

其中Anchor Presents还是Shift + Alt选择stretch + stretch。

(4)创建功能标签对象

接下来创建功能标签对象,这些对象当我们在不同类型之间切换时它们会被激活,我们会创建7种功能标签。

在PauseMenuPanel下创建新物体命名为Tab0InventoryManagement,仅设置Anchor Presents为Shift + Alt的Stretch + stretch。

复制Tab0InventoryManagement,分别创建Tab1 ~ Tab6。

然后再设置Tab1 ~ Tab6为非激活状态。

(5)创建SelectionTabImagesPanel

接下来创建标签选项按钮。

在PauseMenuPanel下创建新的Panel命名为SelectionTabImagesPanel,删除已有的组件(只保留Transform组件),其他配置如下:

在SelectionTabImagesPanel下创建Image命名为SelectionTabImage,组件配置如下:

然后复制6份如下:

(6)创建SelectionTabButtonsPanel

在PauseMenuPanel下创建新的Panel命名为SelectionTabButtonsPanel,删除已有的组件(只保留Transform组件),其他配置如下:

在SelectionTabButtonsPanel下创建Image命名为SelectionButton,组件配置如下:

给SelectionButton添加UI -> Text(Text Mesh Pro),其组件设置如下:

SelectionButton复制6份如下:

除了保留第一个的文本内容,删除其他button的文本内容:

3、创建UIManager.cs脚本 

在Assets/Scripts/UI下创建新脚本命名为UIManager.cs。

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;public class UIManager : SingletonMonobehaviour<UIManager>
{private bool _pauseMenuOn = false;[SerializeField] private GameObject pauseMenu = null;[SerializeField] private GameObject[] menuTabs = null;[SerializeField] private Button[] menuButtons = null;public bool PauseMenuOn { get => _pauseMenuOn; set => _pauseMenuOn = value; }private void Awake(){base.Awake();pauseMenu.SetActive(false);}// Update is called once per frameprivate void Update(){PauseMenu();}private void PauseMenu(){// Toggle pause menu if escape is pressedif(Input.GetKeyDown(KeyCode.Escape)){if (PauseMenuOn){DisablePauseMenu();}else{EnablePauseMenu();}}}private void EnablePauseMenu(){PauseMenuOn = true;Player.Instance.PlayerInputIsDisabled = true;Time.timeScale = 0;pauseMenu.SetActive(true);// Trigger garbage collector// 当暂停游戏时,抓住机会触发系统垃圾收集System.GC.Collect();// Highlight selected buttonHighlightButtonForSelectedTab();}private void DisablePauseMenu(){PauseMenuOn = false;Player.Instance.PlayerInputIsDisabled = false;Time.timeScale = 1;pauseMenu.SetActive(false);}private void HighlightButtonForSelectedTab(){for(int i = 0; i < menuTabs.Length; i++){if (menuTabs[i].activeSelf){SetButtonColorToActive(menuButtons[i]);}else{SetButtonColorToInactive(menuButtons[i]);}}}private void SetButtonColorToActive(Button button){ColorBlock colors = button.colors;colors.normalColor = colors.pressedColor;button.colors = colors;}private void SetButtonColorToInactive(Button button){ColorBlock colors = button.colors;colors.normalColor = colors.disabledColor;button.colors = colors;}// 该函数放在SelectionButton的onClick事件中private void SwitchPauseMenuTab(int tabNum){for(int i = 0; i < menuTabs.Length; i++){if(i != tabNum){menuTabs[i].SetActive(false);}else{menuTabs[i].SetActive(true);}}HighlightButtonForSelectedTab();}}

4、配置UI对象

给UI对象添加UIManger组件,其他配置如下:

配置SelectionButton对象:

第1个SelectionButton的入参刚好是0,对于第2个SelectionButton(1),其配置如下:

依次配置其他SelectionButton

5、运行游戏

游戏过程中,按Esc键可以进入菜单界面。

http://www.xdnf.cn/news/663841.html

相关文章:

  • RK3568DAYU开发板-平台驱动开发:GPIO驱动
  • 冒险岛 职业名及代码
  • 为什么需要清除浮动?清除浮动的方式有哪些?
  • day28:零基础学嵌入式之进程2
  • MQTT通信协议
  • [面试精选] 0076. 最小覆盖子串
  • Linux多线程(二)之进程vs线程
  • Cell Metab.|复旦大学储以微、骆菲菲团队:Foxp3改造CAR-T,从「能量危机」到「代谢续航」的实体瘤治疗新路径
  • Android GPU Inspector深度解析:从零掌握驱动级性能数据抓取与优化
  • FastAPI 中间件
  • 电子标签倒计时应用
  • 从自发到赋能:产品经理的成长与 AI 时代的自我重塑
  • 测试W5500的第7步_使用ioLibrary库创建HTTP客户端
  • Linux中SHELL脚本常用命令
  • 安卓实用复制功能增强工具
  • 【杂谈】STM32使用快速傅里叶变换库函数后如何比较准确地找到n次谐波幅值
  • Python不要使用可变对象作为函数的默认参数
  • 记忆术-拼音字母形象法【针对“音形义“里谐音法的补充记忆法】
  • 布局泰国遇网络难题?中泰跨境网络组网专线成破局关键
  • Unity中的文件读写TXT 与XML
  • java中的线程安全的集合
  • 如何用DeepSeek修改论文,防止AI幻觉?
  • 题目 3331: 蓝桥杯2025年第十六届省赛真题-LQ 图形
  • 【Axure结合Echarts绘制图表】
  • 华为OD机试_2025 B卷_返回矩阵中非1的元素个数(Python,100分)(附详细解题思路)
  • Python应用“面向对象”小练习
  • 【深度学习】4. 参数初始化详解与数学推导: Xavier, He
  • 敦普水性双组份聚氨酯面漆检验报告(SGS、重金属含量、低voc)
  • 电路中常见器件及作用(电阻 电容 电感)
  • 如何通过PHPMyadmin对MYSQL数据库进行管理?