unity学习(34)——角色选取界面(跨场景坑多)

2024-02-22 12:20

本文主要是介绍unity学习(34)——角色选取界面(跨场景坑多),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先把SelectMenu中的camera的audio listener去掉。

现在还是平面,直接在camera下面添加两个panel即可,应该是用不到canvas了,都是2D的UI

加完以后问题来了,角色选择界面的按钮跑到主界面上边了,而且现在账号密码都输不进去

而且现在是有两个相机的。 而且增加panel时,会自动创建一个上层的canvas。

秉着不到最后不学习的原则,用之前的知识是可以解决这个问题的

1.先给角色选择界面的canvas添加一个标签。

2.类比挂在上注册panel(object)的RegPanelScript.cs中在Start中使用SetActive (false)的技巧,在Scripts文件夹中新建脚本SelectMenu.cs,并将其挂在canvas上边。在unity中新建,vs那边会自动更新过去的。

只添加一行代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SelectMenu : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){gameObject.SetActive(false);}// Update is called once per framevoid Update(){}
}

3.再把脚本挂到对应canvas上,play游戏,达到预期效果。

4.跳转场景后,我们要让之前隐藏的panel显示出来。在MessageManager.cs的LoginHandler中,当登陆成功BroadcastMessage("Loading", 1);之后

TMP_Text d = GameObject.FindWithTag("logText").GetComponent<TMP_Text>(); ;//得到两个Text对象
d.text = "登录成功";
Debug.Log("成功登录,要进行场景跳转了");
GameInfo.ACC_ID = dto.value;//静态类起到全局效果
GameInfo.GAME_STATE = GameState.LOADING;
BroadcastMessage("Loading", 1);//进入ResceneScript.cs调用loading,只要继承mono的都可以调
//GameInfo.GAME_STATE = GameState.LOADING;//加载状态其实我也用不到
//StartCoroutine("load",1);//调用一个写作函数--作用其实就是把登录代码卡住。
Debug.Log("等待下一次挑战");
GameObject m = GameObject.FindWithTag("selectMenuCanvas");
m.SetActive(true);

5.成功完成场景跳转,但没有显示button,原因时FindWithTag不能跨场景借助标签寻找对象,需要用find,修改角色选取界面canvas的名字为CanvasM,名字和tag是两回事。

但是物体需要处于active()处于true状态才能被find,实测也不行

6.只能在角色SelectMenu的生命周期函数中想办法了,这么写确实降低了效率,但是只能这么写。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SelectMenu : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){gameObject.SetActive(false);}// Update is called once per framevoid Update(){Debug.Log(GameInfo.GAME_STATE);Debug.Log(GameState.RUN);if (GameInfo.GAME_STATE == GameState.RUN){gameObject.SetActive(true);//这么写确实降低了效率,但是只能这么写}}
}

实测,Update在object处于非激活状态下,也是不干活的

7.LoadLevelAsync已经是强弩之末了!东西过时是有道理的

 即使换成LoadSceneAsync其实也没有本质上的区别!

这篇关于unity学习(34)——角色选取界面(跨场景坑多)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735241

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链