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

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其实也没有本质上的区别!

相关文章:

  • MySQL 多表操作
  • Tomcat 学习之 Servlet
  • 12 Autosar_SWS_MemoryMapping.pdf解读
  • Android全新UI框架之常用ComposeUI组件
  • Mysql表字符集更换
  • unity学习(32)——跳转到角色选择界面(父子类问题)
  • Pytorch 复习总结 3
  • Sora:开启视频内容创作新纪元的AI革命
  • 喝点小酒-胡诌“编程语言学习”
  • 算法:有效的括号
  • 压缩感知(Compressed Sensing)的MATLAB仿真实现
  • 即时通讯技术文集(第33期):IM开发综合技术合集(Part6) [共12篇]
  • Opencv3.2 ubuntu20.04安装过程
  • 新媒体运营-职业属性篇
  • node 环境问题
  • 时间复杂度分析经典问题——最大子序列和
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [译] React v16.8: 含有Hooks的版本
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 内存分配及垃圾回收机制初探
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • magento 货币换算
  • mysql 数据库四种事务隔离级别
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • session共享问题解决方案
  • 面试总结JavaScript篇
  • 使用API自动生成工具优化前端工作流
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 异常机制详解
  • 7行Python代码的人脸识别
  • Spring第一个helloWorld
  • ​决定德拉瓦州地区版图的关键历史事件
  • #if 1...#endif
  • #Z0458. 树的中心2
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (转)JAVA中的堆栈
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .Net 6.0 处理跨域的方式
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .Net组件程序设计之线程、并发管理(一)
  • .pyc文件是什么?
  • /etc/shadow字段详解
  • @Valid和@NotNull字段校验使用
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [20161101]rman备份与数据文件变化7.txt
  • [20190416]完善shared latch测试脚本2.txt