unity学习23:场景scene相关,场景信息,场景跳转

目录

1 默认场景和Assets里的场景

1.1 scene的作用

1.2 scene作为project的入口

1.3 默认场景 

2 场景scene相关

2.1 创建scene

2.2 切换场景

2.3  build中的场景,在构建中包含的场景

(否则会认为是失效的Scene)

2.4 Scenes in Build 的 场景索引

3 场景相关信息

3.1 场景名称 scene.name

3.2 场景索引 scene.buildIndex

3.3 场景路径 scene.path

3.4  scene.GetRootGameObjects();

4 场景相关测试

4.1 获取当前场景 SceneManager.GetActiveScene()

4.2 跳转场景 SceneManager.LoadScene();

4.2.1 具体参数

4.3 场景是否已经加载 scene.isLoaded

5 测试代码

5.1 因为用到场景管理SceneManagement

需要额外导入UnityEngine 和 UnityEngine.SceneManagement;

5.2 第1次测试代码和结果(有错误)

5.2.1 其他都OK,但是地图生效了,但是读到的信息还是上一张地图的

5.2.2 原因1 

5.2.3 原因2

5.3 正确代码


1 默认场景和Assets里的场景

1.1 scene的作用

  • 游戏里的资源组织
  • unity里的资源组织 / 或者说 层级关系
  • scene1  →  gameobjects   → componenets
  • scene2  →  gameobjects   → componenets

1.2 scene作为project的入口

  • unity的游戏工程,一般需要通过scene才能进入
  • Hierarchy(层级窗口)  里一般看到的是当前场景
  • project  (工程窗口)里可以看到,project下的Assets里,有一个Scenes文件夹,里面存放着project下的所有场景。

1.3 默认场景 

  • 游戏里的默认场景是 SampleScene
  • 一般新建工程都会默认进入这个场景SampleScene
  • 同时,你也可以在 Assets\ Scenes 里找到SampleScene这个场景

2 场景scene相关

2.1 创建scene

  • 在project 里创建,选择地图即可。

2.2 切换场景

  • 双击场景,即可在场景之间切换

2.3  build中的场景,在构建中包含的场景

(否则会认为是失效的Scene)

  • 选择 File / build Settings / Scenes in Build
  • 把新建的场景拖入到 Scenes in Build来

2.4 Scenes in Build 的 场景索引

  • Scenes in Build 的场景索引
  • 后面显示的,0,1,2 就是索引

3 场景相关信息

3.1 场景名称 scene.name

  • //场景名称 
  • scene.name

3.2 场景索引 scene.buildIndex

  • //场景索引 
  • scene.buildIndex

3.3 场景路径 scene.path

  • //场景路径 
  • scene.path  

   

3.4  scene.GetRootGameObjects();

  • scene.GetRootGameObjects()
  • 获得场景 scene下面的所有gb
  • scene.GetRootGameObjects().Length 
  • 获得场景 scene下面的所有gb的数量,就是长度

4 场景相关测试

4.1 获取当前场景 SceneManager.GetActiveScene()

  • //获取当前场景
  • SceneManager.GetActiveScene()
  • SceneManager.GetActiveScene()   返回值:会返回一个场景
  • Scene scene=SceneManager.GetActiveScene();

4.2 跳转场景 SceneManager.LoadScene();

  • //跳转场景,可以使用 场景名,或者场景索引
  • SceneManager.LoadScene(2);
  • SceneManager.LoadScene("Scene2");

4.2.1 具体参数

只加载1个,替换之前的Scene

  • SceneManager.LoadScene("Scene2")  默认方式是 LoadSceneMode.Single
  • SceneManager.LoadScene("Scene2",LoadSceneMode.Single)  

新的场景加载,老的也在,相当于同时都加载生效

  • SceneManager.LoadScene("Scene2",LoadSceneMode.Additive) 

    4.3 场景是否已经加载 scene.isLoaded

    • //场景是否已经加载
    • Debug.Log(scene.isLoaded);    
    • 返回 T/ F

    5 测试代码

    5.1 因为用到场景管理SceneManagement

    需要额外导入UnityEngine 和 UnityEngine.SceneManagement;

    using UnityEngine;

    using UnityEngine.SceneManagement;

    5.2 第1次测试代码和结果(有错误)

    5.2.1 其他都OK,但是地图生效了,但是读到的信息还是上一张地图的

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;public class SceneTest : MonoBehaviour
    {// Start is called before the first frame updatevoid Start(){///先查看当前Scene//获取当前场景Scene scene1=SceneManager.GetActiveScene();//场景名称Debug.Log(scene1.name);//场景路径Debug.Log(scene1.path);      //场景索引Debug.Log(scene1.buildIndex);   GameObject[] gb1=scene1.GetRootGameObjects();Debug.Log(gb1.Length);//跳转场景//SceneManager.LoadScene(2);SceneManager.LoadScene("Scene2");//获取当前场景//新定义1个scene2  Scene scene2=Scene scene2=SceneManager.GetActiveScene();//场景是否已经加载Debug.Log(scene2.isLoaded); ///再次查看当前Scene//场景名称Debug.Log(scene2.name);//场景路径Debug.Log(scene2.path);      //场景索引Debug.Log(scene2.buildIndex);   GameObject[] gb2=scene2.GetRootGameObjects();Debug.Log(gb2.Length);}// Update is called once per framevoid Update(){}
    }
    

    5.2.2 原因1 

    • 场景已经从 Scene1 切换到Scene2 了
    • 但是日志里取到的还是 Scene1的内容,这是为什么?
    • 因为SceneManager.LoadScene方法默认是异步的,新加载的地图可能还没有加载好,而马上去读取信息读取的就还是上一张地图的信息
    • 需要等待新地图加载完成后,就可以了

    在Unity中,SceneManager.LoadScene方法默认是异步的,这意味着场景的加载和激活是分开的两个步骤。

    当你调用SceneManager.LoadScene("Scene2")时,场景开始加载,但并不会立即激活。

    如果代码继续执行,可能会在场景完全加载之前就获取场景信息,这时获取的仍然是上一个场景的信息。

    5.2.3 原因2

    有可能是场景加载模式问题

    • 在 Unity 里,SceneManager.LoadScene 有两种加载模式:LoadSceneMode.Single(默认)和 LoadSceneMode.Additive。
    • 若采用 LoadSceneMode.Additive 模式加载场景,新场景会叠加到当前场景之上,上一个场景的对象不会被卸载,这就可能致使获取到上一个场景的信息。
    • LoadSceneMode.Additive
    • SceneManager.LoadScene(2, LoadSceneMode.Additive);  这样会导致2个场景都加载,读取时会读到上一个场景的信息
    • 确保使用默认的 LoadSceneMode.Single 模式加载场景,此模式会卸载当前场景并加载新场景。
    • 比如 SceneManager.LoadScene(2);

    5.3 正确代码

    • 等待新地图加载后,再读取新地图信息就OK了
    • 如果读取太早,新Scene还没加载进来,读的还是老的Scene的信息
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;public class SceneTest : MonoBehaviour
    {// Start is called before the first frame updatevoid Start(){///先查看当前Scene//获取当前场景Scene scene1=SceneManager.GetActiveScene();//场景名称Debug.Log(scene1.name);//场景路径Debug.Log(scene1.path);      //场景索引Debug.Log(scene1.buildIndex);   GameObject[] gb1=scene1.GetRootGameObjects();Debug.Log(gb1.Length);//跳转场景//SceneManager.LoadScene(2);//SceneManager.LoadScene("Scene2");//调用异步的Start1Start1();}async void Start1(){AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(2);// 等待场景加载完成while (!asyncLoad.isDone){await System.Threading.Tasks.Task.Yield();}// 场景加载完成后获取信息Debug.Log(SceneManager.GetActiveScene().name);//获取当前场景//新定义1个scene2  Scene scene2=Scene scene2=SceneManager.GetActiveScene();//场景是否已经加载, 但是可能还没有激活新的SceneDebug.Log(scene2.isLoaded); ///再次查看当前Scene//场景名称Debug.Log(scene2.name);//场景路径Debug.Log(scene2.path);      //场景索引Debug.Log(scene2.buildIndex);   GameObject[] gb2=scene2.GetRootGameObjects();Debug.Log(gb2.Length);}// Update is called once per framevoid Update(){}
    }
    

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

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

    相关文章

    18.Word:数据库培训课程❗【34】

    目录 题目 NO1.2.3.4 NO5设置文档内容的格式与样式 NO6 NO7 NO8.9 NO10.11标签邮件合并 题目 NO1.2.3.4 FnF12:打开"Word素材.docx”文件,将其另存为"Word.docx”在考生文件夹下之后到任务9的所有操作均基于此文件:"Word.docx”…

    tiktok 国际版抖抖♬♬ X-Bogus参数算法逆向分析

    加密请求参数得到乱码,最终得到X-Bogus

    OpenCV:图像轮廓

    目录 简述 1. 什么是图像轮廓? 2. 查找图像轮廓 2.1 接口定义 2.2 参数说明 2.3 代码示例 2.4 运行结果 3. 绘制图像轮廓 3.1 接口定义 3.2 参数说明 3.3 代码示例 3.4 运行结果 4. 计算轮廓周长 5. 计算轮廓面积 6. 示例:计算图像轮廓的面…

    GMSL 明星产品之 MAX96724

    上一篇文章中,我们介绍了摄像头侧 GMSL 加串器 MAX96717. 今天我们来介绍下 GMSL 解串器明星产品 MAX96724: 可将四路 GMSL™2/1 输入转换为 1 路、2 路或 4 路 MIPI D-PHY 或 C-PHY 输出。该器件支持通过符合 GMSL 通道规范的 50Ω 同轴电缆或 100Ω 屏…

    城市道路车辆自行车摩托车公交车检测数据集VOC+YOLO格式5236张5类别

    数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5236 标注数量(xml文件个数):5236 标注数量(txt文件个数):5236 …

    VSCode插件Live Server

    简介:插件Live Server能够实现当我们在VSCode编辑器里修改 HTML、CSS 或者 JavaScript 文件时,它都能自动实时地刷新浏览器页面,让我们实时看到代码变化的效果。再也不用手动刷新浏览器了,节省了大量的开发过程耗时! 1…

    论文阅读(十):用可分解图模型模拟连锁不平衡

    1.论文链接:Modeling Linkage Disequilibrium with Decomposable Graphical Models 摘要: 本章介绍了使用可分解的图形模型(DGMs)表示遗传数据,或连锁不平衡(LD),各种下游应用程序之…

    穷举vs暴搜vs深搜vs回溯vs剪枝系列一>单词搜索

    题解如下 题目:解析决策树:代码设计: 代码: 题目: 解析 决策树: 代码设计: 代码: class Solution {private boolean[][] visit;//标记使用过的数据int m,n;//行,列char…

    智能小区物业管理系统打造高效智能社区服务新生态

    内容概要 随着城市化进程的不断加快,智能小区物业管理系统的出现,正逐步改变传统物业管理的模式,为社区带来了崭新的管理理念和服务方式。该系统不仅提升了物业管理效率,还加强了业主与物业之间的互动,为每位居民提供…

    高清种子资源获取指南 | ✈️@seedlinkbot

    在如今的数字时代,高清影视、音乐、游戏等资源的获取方式不断丰富。对于追求高质量资源的用户而言,一个高效的资源分享平台至关重要。而 ✈️seedlinkbot 正是这样一个便捷的资源获取工具,为用户提供高质量的种子资源索引和下载信息。 1. ✈️…

    3 [通用GITHUB投毒免杀工具安装木马攻击活动的详细分析]

    前言概述 通过github投毒的攻击事件之前发生过不少,笔者此前也分析过好几例,有些网友也给笔者发过一些相关的攻击样本,大家从网上下载的安全工具或免杀工具一定不要随便在自己机器上运行,很有可能这些工具就自带后门木马&#xf…

    沙皮狗为什么禁养?

    各位铲屎官们,今天咱们来聊聊一个比较敏感的话题:沙皮狗为什么会被禁养?很多人对沙皮狗情有独钟,但有些地方却明确禁止饲养这种犬种,这背后到底是什么原因呢?别急,今天就来给大家好好揭秘&#…

    LeetCode 404.左叶子之和

    题目描述 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 示例 2: 输入: root [1] 输…

    一种非接触式智能垃圾桶设计(论文+源码+实物)

    1系统方案设计 通过对需求展开分析,本设计非接触式智能垃圾桶采用STM32F103单片机作为控制器,通过红外传感器实现垃圾桶的满溢检测,通过三个SG90舵机分别控制可回收、不可回收、其他垃圾桶盖的开关,并通过WiFi通信模块将数据信息传…

    vue入门到实战 三

    目录 3.1 v-bind 3.1.1 v-bind指令用法 ​编辑3.1.2 使用v-bind绑定class 3.1.3 使用v-bind绑定style 3.2.1 v-if指令 3.2.1 v-if指令 3.2.2 v-show指令 ​3.3 列表渲染指令v-for 3.3.1 基本用法 3.3.2 数组更新 3.3.3 过滤与排序 3.4 事件处理 3.4.1 使用v-on指令…

    Maven全解析:从基础到精通的实战指南

    概念: Maven 是跨平台的项目管理工具。主要服务基于 Java 平台的构建,依赖管理和项目信息管理项目构建:高度自动化,跨平台,可重用的组件,标准化的流程 依赖管理: 对第三方依赖包的管理&#xf…

    【背包问题】二维费用的背包问题

    目录 二维费用的背包问题详解 总结: 空间优化: 1. 状态定义 2. 状态转移方程 3. 初始化 4. 遍历顺序 5. 时间复杂度 例题 1,一和零 2,盈利计划 二维费用的背包问题详解 前面讲到的01背包中,对物品的限定条件…

    数据库 - Sqlserver - SQLEXPRESS、由Windows认证改为SQL Server Express认证进行连接 (sa登录)

    本文讲SqlServer Express版本在登录的时候, 如何由Windows认证,修改为Sql Server Express认证。 目录 1,SqlServer Express的Windows认证 2,修改为混合认证 3,启用sa 用户 4,用sa 用户登录 下面是详细…

    GWO优化LSBooST回归预测matlab

    灰狼优化算法(Grey Wolf Optimizer,简称 GWO),是一种群智能优化算法,由澳大利亚格里菲斯大学的 Mirjalii 等人于 2014 年提出。该算法的设计灵感源自灰狼群体的捕食行为,核心思想是模仿灰狼社会的结构与行为…

    C++模板编程——可变参函数模板

    目录 1. 可变参函数模板基本介绍 2. 参数包展开——通过递归函数 3. 参数包展开——通过编译期间if语句(constexpr if) 4. 重载 5. 后记 进来看的小伙伴们应该对C中的模板有了一定了解,下面给大家介绍一下可变参函数模板。过于基础的概念将不仔细介绍。 1. 可变…