【Unity】制作一个简单的菜单栏页面并实现其功能

这是一个简单的菜单页面制作,接下来我们将制作一个完整的菜单页面,并且通过一定的代码去实现它对应的效果。这个主要的功能就是我们在游戏中如果想暂停一下或者重新开始,那么就要用到我们这个功能。接下来我们将实现在游戏中按ESC退出键可以调用菜单栏,然后游戏进行暂停。只有当我们再一次进行菜单栏选择系统会做出对应的反应。

1.创建UGUI组件

(1)接下来我们制作一下整个菜单页面的UGUI,其大致制作效果如下图,有一下细节我们需要注意就是设置好Canvas的分辨率并且在创建UI组件的过程每一个物体我们对需要设置好对应的锚点让它固定在这个位置,不会随分辨率大小而改变。造成后面比较麻烦,所以我们需早期设置好他。如:字体的大小、颜色、背景图片等...

(2).我们创建好的菜单页面基本大致就是下面图,我们在图中已经标明每一个组件对应每一个物体,为了让我们看起来更容易清晰明了。

 2.实现菜单显示和隐藏

(1).创建一个菜单管理类脚本,我们编写代码实现在游戏中我们隐藏菜单,按ESC退出键可以调用出菜单。菜单中所创建的button组件我们也需要让他呈现出对应的效果,接下来我们创建脚本。

 GameManager游戏管理类脚本:

代码实现:

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

public class GameManager : MonoBehaviour
{
    // Start is called before the first frame update

    //单例模式
    public static GameManager instance;

    //是否暂停
    public bool isPasue;
    //菜单面板
    public GameObject MenuPanel;
    void Start()
    {
        instance = this;
        //禁用
        MenuPanel.SetActive(false);
        isPasue = false;
    }
    void Update()
    {
        //如果按下ESC键游戏暂停,显示出菜单页面
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            //调用暂停游戏状态方法
            Pasue();
        }

    }
    //暂停游戏状态
    public void Pasue()
    {
        //暂停
        isPasue = true;
        //显示菜单页面
        MenuPanel.SetActive(true);
        Time.timeScale = 0;
    }

    //非暂停游戏状态
    public void UnPasue()
    {
        //非暂停
        isPasue = false;
        //隐藏菜单页面
        MenuPanel.SetActive(false);
        Time.timeScale = 1;
    }

    //重新开始游戏
    public void RestartGame()
    {
        //隐藏菜单面板
        MenuPanel.SetActive(false);
        //非暂停
        UnPasue();
        //分数清0
        ScoreManager.instance.score=0;

    }
    //继续游戏   从暂停状态切换到非暂停状态
    public void ContinueGame()
    {
        //调用非暂停游戏状态方法
        UnPasue();
    }
    //退出游戏
    public void QuitGame()
    {
        //退出游戏
        Application.Quit();
    }
}

(3).我们返回unity挂载对应的组件和对象。

  

3.效果图

(1)运行时。

(2)按ESC键。

(3)点击重新开始运行。

这里效果不太明显,下面我们等下接着测试。

4.实现分数效果

(1).我们创建一个ScoreManager分数管理类来编译分数变化情况。

 ScoreManager分数管理类脚本:

代码实现:

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

public class ScoreManager : MonoBehaviour
{
    // Start is called before the first frame update

    //单例模式
    public static ScoreManager instance;
    //文本
    public Text scoreText;

    public int score = 0;
    void Start()
    {
        instance = this;

    }

    // Update is called once per frame
    void Update()
    {
        //更新文本
        scoreText.text="分数:" + score.ToString();
    }

    //加分方法
    public void AddScore()
    {
        score += 1;
    }
}

(2).我们挂载对应的组件和对象。

 5.创建3D物体Cube

(1).我们创建一个cube,为了就是我们到时候鼠标点击它的时候可以加分,更好地看清楚它的效果。

调整一下它的大小。

(2).创建一个脚本挂载到cube组件上去,然后编写代码。

Cube代码:

代码实现:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SocialPlatforms.Impl;

public class Cube : MonoBehaviour
{
    // Start is called before the first frame update


    //是否在范围内
    bool isRange;
    //点击冷却
    public float ClickTime = 1f;
    //计时器
    public float timer;

    // Update is called once per frame
    void Update()
    {
        //只有当处于非暂停状态才能点击
        if (GameManager.instance.isPasue == false)
        {
            //开始计时
            timer += Time.deltaTime;
            //如果计时时间大于冷却时间并且在范围内
            if (timer > ClickTime && isRange)
            {
                //检测鼠标左键点击(按下瞬间)
                if (Input.GetMouseButtonDown(0))
                {
                    
                    ScoreManager.instance.AddScore();
                    //重置计时器
                    timer = 0f;
                   
                }
            }
        }
    }
    //鼠标点击触发检测
    private void OnMouseDown()
    {
        print("点击到了");
        isRange = true;
    }
    //鼠标离开对象时触发
    private void OnMouseExit()
    {
        isRange = false;
    }
}

 6.回到Unity引擎

(1).禁用菜单组件。

(2).检测有没有漏挂对象和脚本。

7.运行效果

(1).开始运行

(2).点击cube 

(3).按ESC退出键测试继续运行。

ContinueGame

 (4).按ESC退出键测试重新开始运行。

RestartGame

(5).总体效果。

Menu

 这是一个简单的menu页面制作,制作一个menu的UGUI效果会使我们的项目更加精美使整个项目效果更加完美。 你学会了吗?我已经学会了....


最后

以上步骤就是制作一个简单完整的菜单栏页面系统的整个流程。希望能对你们提供帮助!!!

看到的小伙伴一键三连一下吧,你们的支持让我更有动力去创作和分享,希望能一直为你带来惊喜和收获。

2413988ad82470fe49997fa97ee1adf8.png
一键三连吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聚观早报 | 青瓷游戏上半年营收3.34亿元;如祺出行冲击IPO

【聚观365】8月26日消息 青瓷游戏上半年营收3.34亿元 如祺出行冲击IPO 索尼互动娱乐将收购Audeze 昆仑万维上半年净利润3.6亿元 T-Mobile计划在未来五周内裁员5000人 青瓷游戏上半年营收3.34亿元 青瓷游戏发布截至2023年6月30日止的中期业绩,财报显示&#xf…

vue3范围选择组件封装

个人项目地址: SubTopH前端开发个人站 (自己开发的前端功能和UI组件,一些有趣的小功能,感兴趣的伙伴可以访问,欢迎提出更好的想法,私信沟通,网站属于静态页面) SubTopH前端开发个人站…

K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换

前言 在之前的章节中,我们已经成功地将Dubbo项目迁移到了云环境。在这个过程中,我们选择了单机ZooKeeper作为注册中心。接下来,我们将探讨如何将单机ZooKeeper部署到云端,以及在上云过程中可能遇到的问题及解决方案。 ZooKeeper…

免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件

免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具&am…

【C++】初步认识模板

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、泛型编程二、函数模板2.1 函…

【Java】基础练习(十)

1.判断邮箱 输入一个电子邮箱,判断是否是正确电子邮箱地址。 正确的邮箱地址: 必须包含 字符,不能是开头或结尾必须以 .com结尾和.com之间必须有其他字符 (1) Email类: package swp.kaifamiao.codes.Java.d0823; /** 输入一个…

4-4 Representing text Exercise

本文所用资料下载 一. Representing text Let’s load Jane Austen’s Pride and Prejudice. We first split our text into a list of lines and pick an arbitrary line to focus on: with open(D:jane-austen/1342-0.txt, encodingutf8) as f:text f.read() lines text.…

简单了解文件上传漏洞(md版)

简单了解文件上传漏洞 一、什么是文件上传漏洞二、常见功能点三、成功的前提四、文件上传的校验方式五、Pass-1六、Pass-2七、蚁剑结合msf获取目标权限 一、什么是文件上传漏洞 在文件上传的功能处,如果服务端未对上传的文件进行严格的验证和过滤,导致攻…

登录校验-Filter-详解

目录 执行流程 拦截路径 过滤器链 小结 执行流程 过滤器Filter拦截到请求之后,首先执行方放行之前的逻辑,然后执行放行操作(doFilter),然后会访问对应的Web资源(对应的Controller类)&#…

【C++】C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )

文章目录 一、函数返回值不能是 " 局部变量 " 的引用或指针1、函数返回值常用用法2、分析函数 " 普通返回值 " 做左值的情况3、分析函数 " 引用返回值 " 做左值的情况 函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 " 链式编程 &quo…

Acrobat Pro DC软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Acrobat Pro DC是Adobe公司开发的一款PDF编辑软件,简称为DC,是Acrobat系列软件中的一款,是行业内的标准工具,被广泛应用于文档处理、电子合同、PDF表单等领域。 Acrobat Pro DC软…

【SpringBoot】第一篇:redis使用

背景&#xff1a; 本文是教初学者如何正确使用和接入redis。 一、引入依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><depen…

适配器模式实现stack和queue

适配器模式实现stack和queue 什么是适配器模式&#xff1f;STL标准库中stack和queue的底层结构stack的模拟实现queue的模拟实现 什么是适配器模式&#xff1f; 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff…

基于广义神经网络的网络入侵检测Matlab代码

1.案例背景 1.1 FCM 聚类算法 聚类方法是数据挖掘中经常使用的方法,它将物理的或抽象的对象分为几个种群,每个种群内部个体间具有较高的相似性,不同群体内部间个体相似性较低。模糊c均值聚类算法(Fuzzy C- Mean, FCM)是用隶属度确定每个元素属于某个类别程度的一种聚类算法&am…

Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

一、简介 Rspack CLI 官方文档。 rspack.config.js 官方文档。 二、创建 vue 项目 创建项目&#xff08;文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式&#xff0c;根据需求进行选择&#xff09; # npm 方式 $ npm create rspacklatest# yarn 方式 $ yarn create…

AI 绘画Stable Diffusion 研究(十四)SD 图生图+剪映制作人物说话视频

大家好&#xff0c;我是风雨无阻。 前一篇&#xff0c;我们详细介绍了使用 SadTlaker制作数字人视频案例&#xff0c;感兴趣的朋友请前往查看:AI 绘画Stable Diffusion 研究&#xff08;十三&#xff09;SD数字人制作工具SadTlaker使用教程。 对于没有安装 SadTlaker 插件的朋友…

Java—实现多线程程序 | 入门

目录 一、前言 二、基本概念 进程 线程 三、Java多线程实现 java.lang.Thread类 获取线程名字及对象 获取main进程名 Thread currentThread() 四、线程优先级 设置优先级 一、前言 前期入门学习的代码中&#xff0c;全部都是单线的程序&#xff0c;也就是从头到尾…

leetcode 767. Reorganize String(重组字符串)

重新排列字符串s中的字母&#xff0c;使得任意两个相邻的字母都不相同。 思路&#xff1a; 让相邻字母不同&#xff0c;能想到的办法是先把相同的字母排列&#xff0c; 然后在相同字母的缝隙中插入另一种字母。 比如"aab", 先把"a a"排出来&#xff0c;再…

界面组件DevExpress Reporting——增强的SQL和实体框架数据源引入

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 本文总结了v23.1中针对DevExpress报表和BI Das…

UI位置与布局

UI位置与布局 引言 发现UGUI的RectTransform定位还是很复杂的&#xff0c;感觉有必要详细了解一下 RectTransform 继承自Transform。他的local position由其他几个变量控制。建议不要直接设置position 目的是为了实现UI自动布局。这套方法将绝对定位&#xff0c;相对定位&a…