仿《公主连结》首页场景的制作(附资源包)

先看效果(主要实现点击按钮切换图片,未解锁按钮弹出提示,点击过后播放动画)

预备知识(单例模式,携程, Resources.Load加载资源的方式)

资源准备(底部按钮7个图标,1920*1080的图片7个) 

1.场景搭建(创建4个空对象并修改名字,创建Resources文件夹并在其中创建4个子文件夹并把准备的资源放到里面去)

2.创建一个画布并将这两个空对象(LayerRoot,Bottom)拖到画布中,并设置位置

3.设置画布的缩放模式(设置缩放模式并调整分辨率为1920*1080)

4.制作界面(在LayerRoot中创建一个图片(Image)并修改名字为“界面1”,将准备的图片拖到图片的原图像中,然后设置图片的原生大小)

最后得到这样一张效果图

5.用同样的方法制作界面2-7,并将它们拖到Layers文件夹中做成预制体

6.给Bottom和LayerRoot添加RectTransform组件

7.删除多余的界面然后设置Bottom的锚点为底部(这样是为了适应不同分辨率的屏幕)

8.界面搭建

9.制作提示预制体并拖到Tips文件夹中

10.创建脚本文件夹并编写3个脚本(ClickText,TipsMage,UIManage)(控制点击的脚本,提示管理器,界面管理器)

TipsMage

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class TipsMage : MonoBehaviour
{//单例模式public static TipsMage Instance;void Start(){if (Instance == null){Instance = this;}else{Destroy(gameObject);}}public  void ShowTips(string titel , string content){ //利用Resources.Load加载预制体GameObject tips = Resources.Load("Tips/Tips") as GameObject;//实例化预制体GameObject tipobj = Instantiate(tips);//设置tips的标题和内容tipobj.transform.Find("Tips_box/titel").GetComponent<Text>().text = titel;tipobj.transform.Find("Tips_box/content").GetComponent<Text>().text = content;//找到装提示的容器GameObject UiLayer= GameObject.Find("LayerRoot");//将提示添加到容器中tipobj.transform.SetParent(UiLayer.transform);tipobj.transform.position= UiLayer.transform.position;//一段时间后销毁提示Destroy(tipobj, 2f);}
}

UIManage

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class UIManage : MonoBehaviour
{//单例模式public static UIManage Instance;//放置所有UI的根节点private Transform _uiLayerRoot;//存放已经打开过的UIprivate List<GameObject> _openedUI = new List<GameObject>();//上一个打开的UIprivate  string _lastOpenUIname;private void Awake(){if (Instance == null){Instance = this;}else{Destroy(gameObject);}_uiLayerRoot=GameObject.Find("LayerRoot").transform;_lastOpenUIname = "Layers/icom1";_openedUI.Add(GameObject.Find("Layers/icom1"));}//打开单个public  void Openlayer(string layerName){//查找之前是否打开过GameObject openedLayer = _openedUI.Find(item => item.name == layerName);if (openedLayer == null && layerName!=""){Closelayer(_lastOpenUIname);GameObject newLayer = Resources.Load(layerName) as GameObject;GameObject layerInstance = Instantiate(newLayer, _uiLayerRoot.position, Quaternion.identity);_openedUI.Add(layerInstance);layerInstance.name = layerName;layerInstance.transform.SetParent(_uiLayerRoot);_lastOpenUIname=layerName;}else if (openedLayer.activeSelf == false){GameObject layer = _openedUI.Find(item => item.name == layerName);if (layer != null){layer.SetActive( true);}Closelayer(_lastOpenUIname);_lastOpenUIname = layerName;}}//关闭单个public void Closelayer(string layerName){GameObject layer = _openedUI.Find(item => item.name == layerName);if (layer!= null){layer.SetActive(false);}}//关闭所有public void CloseAll(){foreach (GameObject ui in _openedUI){ui.SetActive(false);}}
}

ClickText

using System.Collections;
using UnityEngine;
using UnityEngine.UI;public class ClickText : MonoBehaviour
{// 显示的界面名字public string OpenLayerName;// 控制动画的携程Coroutine JumpControllercont;// 静态变量来跟踪当前正在播放动画的协程private static ClickText currentAnimatedButton;void Start(){gameObject.GetComponent<Button>().onClick.AddListener(() =>{if (OpenLayerName == ""){TipsMage.Instance.ShowTips("友好提示", "你还没有设置显示的界面");}else{// 如果有其他按钮正在播放动画,停止它的协程if (currentAnimatedButton != null && currentAnimatedButton != this){currentAnimatedButton.StopCoroutine(currentAnimatedButton.JumpControllercont);currentAnimatedButton.gameObject.transform.Find("icom").GetComponent<RectTransform>().localPosition = new Vector3(0, 0, 0);}UIManage.Instance.Openlayer(OpenLayerName);if (JumpControllercont == null || currentAnimatedButton != this){JumpControllercont = StartCoroutine(JumpController());// 设置当前播放动画的按钮为这个按钮currentAnimatedButton = this;}}});//设置默认点击按钮if (gameObject.name == "Option1"){gameObject.GetComponent<Button>().onClick.Invoke();}}IEnumerator JumpController(){while (true){gameObject.transform.Find("icom").GetComponent<RectTransform>().localPosition = new Vector3(0, 100, 0);yield return new WaitForSeconds(0.5f);gameObject.transform.Find("icom").GetComponent<RectTransform>().localPosition = new Vector3(0, 0, 0);yield return new WaitForSeconds(0.5f);}}
}

11.先将提示管理器和界面管理器拖到对应的空对象上

12.给所有的白色方块先添加按钮组件再添加 刚刚编写的脚本

13.在这里设置你点击按钮后想要打开的界面(Layers(文件夹的名字)/界面的名字)

如果不设置点击名字那么就是弹出刚刚设置的提示框

基本信息代码里面都写了注释,资源包链接 GitHub - laozhupeiqia/Princess-Connect-

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

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

相关文章

Redis - 集合 Set 及代码实战

Set 类型 定义&#xff1a;类似 Java 中的 HashSet 类&#xff0c;key 是 set 的名字&#xff0c;value 是集合中的值特点 无序元素唯一查找速度快支持交集、并集、补集功能 常见命令 命令功能SADD key member …添加元素SREM key member …删除元素SCARD key获取元素个数SI…

基于Llamaindex的网页内容爬取实战

目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术&#xff0c;仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者&#xff0c;使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…

《九重紫》逐集分析鉴赏第一集(下)

主标题&#xff1a;《九重紫》一起追剧吧 副标题&#xff1a;《九重紫》逐集分析鉴赏第一集&#xff08;下&#xff09;/《九重紫》逐集分析鉴赏1 接上回分解&#xff0c;窦昭和宋墨都安置城外万佛寺 交谈没一会儿&#xff0c;天还未亮&#xff0c;兵临寺下 记住这个人&…

Introduction to NoSQL Systems

What is NoSQL NoSQL database are no-tabular非數據表格 database that store data differently than relational tables 其數據的存儲方式與關係型表格不同 Database that provide a mechanism機制 for data storage retrieval 檢索 that is modelled in means other than …

图论【Lecode_HOT100】

文章目录 1.岛屿数量No.2002.腐烂的橘子No.9943.课程表No.2074.实现Trie&#xff08;前缀树&#xff09;No.208 1.岛屿数量No.200 class Solution {public int numIslands(char[][] grid) {if (grid null || grid.length 0) {return 0;}int numIslands 0;int rows grid.len…

【深度学习量化交易9】miniQMT快速上手教程案例集——使用xtQuant获取基本面数据篇

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~目前我正在开发基于miniQMT的量化交易系统。 在前几篇的文章中讲到&#xff0c;我正在开发的看海量化交易系统&#xf…

网络层IP协议(TCP)

IP协议&#xff1a; 在了解IP协议之前&#xff0c;我们市面上看到的"路由器"其实就是工作在网络层。如下图&#xff1a; 那么网络层中的IP协议究竟是如何发送数据包的呢&#xff1f; IP报头&#xff1a; IP协议的报头是比较复杂的&#xff0c;作为程序猿只需要我们重…

Xcode

info.plist Appearance Light 关闭黑暗模式 Bundle display name 设置app名称&#xff0c;默认为工程名 Location When In Use Usage Description 定位权限一共有3个key 1.Privacy - Location When In Use Usage Description 2.Privacy - Location Always and When In U…

【CSS in Depth 2 精译_079】第 13 章:渐变、阴影与混合模式概述 + 13.1:CSS 渐变效果(一)——使用多个颜色节点

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;一&#xff09; ✔️13.1.2 颜色插值13.1.3 径向渐变13.1.4 锥形渐变 文…

地下管线三维建模,市面上有哪些软件

1. 地下管线&#xff1a;城市“生命线” 地下管线是城市的重要基础设施&#xff0c;包括供水、排水、燃气、热力、电力、通信等管线&#xff0c;它们如同城市的“生命线”&#xff0c;支撑着城市的正常运转。如果缺乏完整和准确的地下管线信息&#xff0c;施工破坏地下管线的事…

说说你对java lambda表达式的理解?

大家好&#xff0c;我是锋哥。今天分享关于【说说你对java lambda表达式的理解?】面试题。希望对大家有帮助&#xff1b; 说说你对java lambda表达式的理解? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java Lambda 表达式是 Java 8 引入的一项重要特性&#…

网易云信荣获“HarmonyOS NEXT SDK星河奖”

近日&#xff0c;鸿蒙生态伙伴 SDK 开发者论坛在北京举行。 网易云信凭借在融合通信领域的技术创新和鸿蒙生态贡献&#xff0c;荣获鸿蒙生态“HarmonyOS NEXT SDK星河奖”。 会上&#xff0c;华为鸿蒙正式推出 SDK 生态繁荣伙伴支持计划&#xff0c;旨在为 SDK 领域伙伴和开发…

电压调整电路汇总

目录&#xff1a; 一、LDO线性稳压器 1、LM1117 2、NCV33275 3、TLE42764 4、TPS7B67xx-Q1 5、总结 二、DCDC转换器 1、LM2576 2、MC34063A 3、总结 原文件下载移步&#xff1a;LDO-DCDC的仿真与Altium原理图 一、LDO线性稳压器 1、LM1117 LM1117 是一款在 800mA 负…

2024美亚杯资格赛复现

参考&#xff1a; 2024“美亚杯”第十届中国电子数据取证大赛资格赛参考WP 2024美亚杯个人资格赛WP 第十届美亚杯个人赛内存和优盘解答 2024年美亚杯个人赛 资格赛 wp_2024美亚杯个人赛-CSDN博客 历年赛题及解析 - 美亚杯 第一次打&#xff0c;感觉就是题量很大&#xff…

练12:双指针

欢迎大家订阅【蓝桥杯Python每日一练】 专栏&#xff0c;开启你的 Python数据结构与算法 学习之旅&#xff01; 文章目录 前言1 同向扫描2 反向扫描3 同向扫描与反向扫描的对比4 例题分析2.1 回文判定2.2 美丽的区间2.3 挑选子串 前言 双指针是一种常用于数组和链表类问题中&a…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展&#xff0c;有力推动了社会的数智化转型&#xff1b;与此同时&#xff0c;带来的相关安全风险也日益凸显。近日&#xff0c;在北京市举办的通明湖人工智能开发与应用大会上&#xff0c;360智脑总裁张向征以“大模型安全研究与实践”为主题&…

6.数据建模和数据检索及权限检查

总学习目录请点击下面连接 SAP ABAP开发从0到入职&#xff0c;冷冬备战-CSDN博客 目录 1.数据建模和ABAP字典的透明表 现实产品到数据库数据过程 飞行数据模型 做一个简单的引用。 从旅行社来看&#xff1a; 对于开发人员&#xff1a; 透明表 结构体和透明表 在系统中…

反复出现 idf.py: command not found 的解决办法

版本&#xff1a;ESP-IDF v4.4.8 1. 问题描述 当我们需要经常使用 ESP-IDF 时&#xff0c;总要反复安装编译链、设置环境&#xff0c;不然就会显示 idf.py: command not foundESP-IDF 是乐鑫官方的物联网开发框架&#xff0c;适用于ESP32、ESP32-S、ESP32-C 和ESP32-H 系列S…

IIC 通信协议

IIC 通信协议 参考&#xff1a;CSDN-Projectsauron、B站-江协科技 IIC Overview IIC协议&#xff08;Inter-Integrated Circuit&#xff0c;可简写为 I2C&#xff09;&#xff0c;是一种用于各种电子设备之间进行通信和数据交换的串行通信协议。它是由飞利浦&#xff08;Phil…

【图像处理】利用numpy、opencv、python实现车牌检测

| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像&#xff0c;仅保留V通道。V通道表示颜色的明暗&#xff0c;常用于图像对比度拉伸、直方图均衡化等流程。 原图像&#xff1a; V通…