【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();//分数清0ScoreManager.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 framevoid 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 framevoid 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
一键三连吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Kernel的local_irq_enable()和local_irq_disable()函数

代码如下图所示,最终操作的是msr daifset, #3 和 msr daifclr, #3 寄存器。 (include/linux/irqflags.h) #define local_irq_enable() do { raw_local_irq_enable(); } while (0) #define local_irq_disable() do { raw_local_irq_disable(); } while (0)#define ra…

解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题

如果使用SES调试NRF52840的时候发现,官方例程只能显示CPU寄存器,但是无法显示外设寄存器时,解决办法如下: 1.在解决方案右键→Options→Debug→Debugger,然后Target Device选择正确的型号。 2.Register Definition Fil…

10个最好的云GPU服务

随着深度学习、人工智能和机器学习等新技术的出现,云 GPU 的需求量很大。 GPU(图形处理单元)是专用处理器,用于处理计算机图形和游戏等活动所需的大量数据集和复杂计算。不过,它们现在对人工智能(A.I.&…

【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

文章目录 一、命名空间 namespace1、命名空间基本概念2、名称概念4、C 语言的命名空间3、命名空间避免标识符冲突 二、命名空间定义1、命名空间基本概念2、命名空间定义语法3、代码示例 - 命名空间定义使用 三、命名空间使用1、命名空间默认访问方式2、使用命名空间3、使用默认…

实战项目ssm权限系统 3-总结篇,权限模块保护业务模块

一 工程模块介绍 1.1 工程模块关系 在业务微服务模块中引入安全认证模块,起到对业务模块的认证授权保护

在线设计APP ui的网站,分享这7款

在数字时代,用户界面(UI)设计变得非常重要,因为良好的UI设计可以改善用户体验,增强产品吸引力。随着科学技术的发展,越来越多的应用在线设计网站出现,为设计师和团队提供了一种新的创作方式。本…

postgresql基于postgis常用空间函数

1、ST_AsGeoJSON 图元转geojson格式 select ST_AsGeoJSON(l.geom) from g_zd l limit 10 2、 ST_Transform 坐标转换 select st_transform(l.shape, 3857) from sde_wf_cyyq l limit 10select st_astext(st_transform(l.shape, 3857)) from sde_wf_cyyq l limit 103、st_aste…

使用动态IP是否会影响网络

今天我们要谈论的话题是关于动态IP和网络的关系。也许有些小伙伴对这个概念还比较陌生,但别担心,我会简单明了的给你理清楚。让我们一起看看动态IP到底能否影响到网络。 首先,我们先来搞明白什么是动态IP。在互联网世界中,每一个连…

【NLP】1、BERT | 双向 transformer 预训练语言模型

文章目录 一、背景二、方法 论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 出处:Google 一、背景 在 BERT 之前的语言模型如 GPT 都是单向的模型,但 BERT 认为虽然单向(从左到右预测…

WPF中手写地图控件(3)——动态加载地图图片

瓦片增加一个Loading动画 可以查看我的另一个博客WPF中自定义Loading图 从中心扩散 进行从里到外的扩散,方向是上左下右。如下图所示 于是我们可以定义一个拥有坐标X跟Y的集合,他允许这个集合,内部使用枚举器的MoveNext自动排序&#xf…

stm32之5.长按按键(使用时钟源)调整跑马灯速度

------------------------------ 源码 #include <stm32f4xx.h> #include "led.h" #include "delay.h" #include "my_str.h" #include "beep.h" #include "key.h" int main(void) { key_init(); Led_init();…

Ubuntu-Server 22.04安装详细过程-图文版

一.下载Ubuntu Server镜像&#xff0c;官方地址下载即可 https://ubuntu.com/download/server 乌班图镜像网址&#xff0c;点击下载即可 二.安装乌班图镜像&#xff0c;最好自己准备u盘在ISO软件内制作完成 1.选择 Install Ubuntu Server 2.选择安装语言为英语 3.安装程序更新选…

数据库第十五课-------------非关系型数据库----------Redis

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

港联证券|指数或进入磨底阶段 短期关注环保、煤炭等板块

磨底历来都不是一天能达到的&#xff0c;比方2018年的政策底到商场底&#xff0c;半途也阅历两个多月时间。当下政策底出现之后至今也有近一个月时间&#xff0c;并且下跌量能不断缩短&#xff0c;心情面也降至冰点&#xff0c;种种迹象阐明离真正商场底的构成已经不远了。此时…

ElasticSearch常用方法

ElasticSearch:是一个储存、检索、数据分析引擎。 在互联网项目中我们经常会按一定的条件去索引我们指定的数据&#xff0c;但是在大量的数据中我们如果直接查询数据库效率是非常低的&#xff0c;ElasticSearch就可以很好的帮我们完成检索。 es封装了api提供给我我们直接操作…

测试框架pytest教程(3)夹具-@pytest.fixture

内置fixture Fixture使用pytest.fixture装饰&#xff0c;pytest有一些内置的fixture 命令可以查看内置fixture pytest --fixtures fixture范围 在pytest中&#xff0c;夹具&#xff08;fixtures&#xff09;具有不同的作用范围&#xff08;scope&#xff09;&#xff0c;用于…

【MySQL】JSON 格式字段处理

MySQL 5.7 版本后已支持 JSON 格式&#xff0c;这虽是 MySQL 的一小步&#xff0c;但可以说是程序开发的一大步&#xff0c;再也不用将 JSON 内容塞到 VARCHAR 类型字段了&#xff0c;程序设计也会变得更加灵活。网上大多只针对JSONObject 对象类型&#xff0c;本文也将详解 JS…

RabbitMQ 消费者

RabbitMQ的消费模式分两种&#xff1a;推模式和拉模式&#xff0c;推模式采用Basic.Consume进行消费&#xff0c;拉模式则是调用Basic.Get进行消费。   消费者通过订阅队列从RabbitMQ中获取消息进行消费&#xff0c;为避免消息丢失可采用消费确认机制 消费者 拉模式拉模式的实…

企业数字化转型中,VR数字展厅能有哪些体验?

在数字化转型的浪潮下&#xff0c;企业纷纷开始注重数字展厅的开展&#xff0c;VR虚拟展厅结合VR全景技术&#xff0c;可以创造出许多有趣的玩法和体验&#xff0c;无论是虚拟参观、互动体验还是VR云会议对接&#xff0c;都为企业客户带来了全新的感知方式。 同传统展厅相比&am…