Unity切换场景保存上一个场景的数据,Unity切换场景的案例,Unity切换场景再返回数据丢失的解决方案

【Unity】一个场景跳转到多个场景的解决方案 在某些情况下,比如我们需要设计一个探索类游戏,那么一个场景可以根据选择的不同,跳转至多个场景,甚至能够回跳场景,那么在这种情况下,我们该如何进行多场景的精确跳转呢。 阅读详情
AI摘要

该博客介绍了在Unity中如何在场景切换后保存并恢复数据。通过创建一个可序列化的StudentEnity类来存储数据,利用Singleton模式的GameManger来持久化管理这些数据。在场景切换时,通过GameManger实例保存和加载StudentEnity对象,确保数据在场景间不丢失。提供的代码示例展示了具体实现步骤。

问题:

Unity在切换场景之后在再次返回上不会保存上一个场景的数据的。
但是大多数时候我们是需要这些数据的,这应该如何解决呢?

解决方案:

  1. 文件链接:我将解决方案打包了,点我下载,免费,或者私信我发你
  2. 首先将需要存储到一个class中,这里以学生为例子
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

namespace ScenceChange
{
    [Serializable]
    public class StudentEnity
    {
        public string Name;
        public string Description;
        public float _Time;
    }
}


  1. 然后我们再创建一个脚本,并这个脚本挂到Unity场景中的游戏物体上.
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace ScenceChange
{
    public class tudentGaemObject : MonoBehaviour
    {
        public StudentEnity StudentEnity;
        public int No;

        private void Start()
        {
            var stu = GameManger._Instance.students.FirstOrDefault(p => p.Name == StudentEnity.Name);
            if (stu != null)
            {
                StudentEnity = stu;
            }
            else
            {
                GameManger._Instance.AddStudent(StudentEnity);
            }
            // UI 显示对应的student属性内容
        }

        private void Update()
        {
            StudentEnity._Time = StudentEnity._Time + Time.deltaTime;
        }
    }
}

GameManager中的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace ScenceChange
{
    public class GameManger : SingletonBase<GameManger>
    {
        public List<StudentEnity> students;
        private void Awake()
        {
            DontDestroyOnLoad(this);
            students = new List<StudentEnity>();
        }

        public void AddStudent(StudentEnity student)
        {
            if (!students.Contains(student))
            {
                students.Add(student);
            }
        }
    }
}

SingletonBase中的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace ScenceChange
{
    public class GameManger : SingletonBase<GameManger>
    {
        public List<StudentEnity> students;
        private void Awake()
        {
            DontDestroyOnLoad(this);
            students = new List<StudentEnity>();
        }

        public void AddStudent(StudentEnity student)
        {
            if (!students.Contains(student))
            {
                students.Add(student);
            }
        }
    }
}
  1. 在上面我们完成了数据载体的创建(StudentEnity,tudentGaemObject ),以及场景切换的时候用于保存数据的载体(GameManger ,StudentEnity)。
  2. 接下来我们做一些场景切换的工作,创建两个场景,一个名字为"ScenceA",另外一个为“ScenceB“,分别在场景中创建一个Button,场景A的按钮挂在这个脚本
 private void Awake()
        {
            Button but=gameObject.GetComponent<Button>();
            but.onClick.AddListener(delegate
            {
                SceneManager.LoadScene("ScenceB");
            });
        }

场景B挂载这个脚本

        private void Awake()
        {
            Button but = gameObject.GetComponent<Button>();
            but.onClick.AddListener(delegate
            {
                SceneManager.LoadScene("ScenceA");
            });
        }

然后点击按钮就会跳转场景。

  1. 然后测试一下就会发现场景跳转 StudentEnity中的_Time还是会按照跳转之前的继续增加。

Enjoy ,不懂私信,我会看。

Unity编辑器扩展开发:快速场景切换工具的实现与优化 在Unity3D开发中,编辑器扩展是提升工作效率的关键技术。通过自定义EditorWindow,开发者可以创建专属工具来优化工作流程。其原理是利用Unity的编辑器API(如AssetDatabase、EditorGUILayout)构建可视化界面,实现对项目资产的快速访问与操作。这种技术的核心价值在于将高频操作路径化繁为简,显著减少开发中的重复性劳动,保护开发者的“心流”状态。典型的应用场景包括资源管理、批量处理、快速测试等。本文以【快速场景切换】工具为例,深入讲解如何从需求分析、技术选型到完整实现一个高 阅读详情

相关推荐

Unity Timeline跨场景绑定丢失的工程化解决方案:3步实现稳定对象引用

在Unity游戏开发中,对象引用管理是动画系统与场景协作的核心基础。序列化机制依赖于实例ID,当场景切换或对象动态加载时,直接引用容易断裂,导致Timeline动画轨道出现Missing Reference错误。通过引入间接寻址原理,建立全局注册服务与唯一标识符映射,可将易变的实例绑定转化为稳定的键值查询,从而解耦时间轴资产与具体场景的依赖。这一技术方案在工程实践中显著提升了动画资源的可复用性与团队协作效率,尤其适用于需要跨场景播放过场动画的叙事游戏或复杂UI流程。本文基于Unity 2022 LTS版本,

weixin_29008055的博客 234

unity切换场景_深入了解Unity的光照贴图(一)

前言在开发手机游戏时,为了兼顾画面表现力和游戏运行效率,很多时候我们会选择使用光照贴图来作为场景的照明方案。Unity引擎为我们提供了功能强大的光照贴图功能,让美术人员可以在Unity编辑器里方便的烘焙光照贴图。但是即便如此,在实际使用的过程中,还是会因为对Unity引擎的了解不足,导致遇到一些问题。常见的比如,希望在自己写的Shader里使用Unity烘焙的光照贴图,或者是希望用Prefab来保...

weixin_39887546的博客 1257

Unity VR多场景UI管理:解决PICO 4开发中Canvas切换失效问题

在Unity引擎的VR应用开发中,多场景管理与UI渲染是构建沉浸式体验的核心技术环节。其原理涉及场景生命周期、摄像机渲染管线与UI系统绑定的协同工作。当应用需要在不同场景间切换时,传统的UI附着方式容易导致Canvas元素丢失或错位,这直接破坏了交互的连续性与用户体验的完整性。尤其在PICO 4等VR设备开发中,SDK对多摄像机与渲染的特殊处理加剧了这一问题的复杂性。通过构建一个全局的、独立于场景生命周期的UI管理系统,开发者可以确保核心UI元素在场景切换时保持稳定。这种方案不仅解决了Canvas‘掉队’的

weixin_34014555的博客 424

【Unity】场景切换保留数据的解决方案

Unity切换场景保留数据的简单实现,具体请访问我的博客园:https://www.cnblogs.com/br0sy/p/16204182.html

BrosyveryOK的博客 8492

Unity Android广告回调丢失解决方案:后台切换与生命周期管理

在Android应用开发中,Activity生命周期管理是核心技术概念之一,它决定了应用组件在不同状态下的行为。当应用切换到后台时,系统可能回收Activity以释放资源,这会导致依赖于Activity实例的对象引用失效。这一原理在集成第三方SDK时尤为关键,特别是广告SDK,其展示和回调机制通常紧密绑定到Activity上下文。技术价值在于构建健壮的跨平台通信架构,确保关键业务逻辑的稳定性。应用场景广泛存在于使用Unity引擎开发的移动游戏中,常涉及激励视频、插屏广告等变现模块。本文聚焦于解决Unity与

weixin_29001419的博客 242

Unity编辑器扩展实战:场景自动保存提醒工具开发指南

在Unity开发中,编辑器扩展(Editor Scripting)是提升工作效率的关键技术,它允许开发者定制化编辑器功能以适应特定工作流。其核心原理是通过C#脚本调用Unity Editor API,监听编辑器事件并创建自定义界面。这项技术的价值在于能够将重复性操作自动化,减少人为失误,并深度集成到开发环境中。典型的应用场景包括自定义Inspector面板、批量处理工具、以及工作流辅助插件。本文聚焦于一个实用案例:基于EditorWindow的场景自动保存提醒系统。该系统通过监听场景脏状态(Scene.is

weixin_30856725的博客 421

【Unity跳转场景后保持原场景位置】

原场景中人物移动后进入答题,返回原场景时人物保持之前的位置

crush_oo的博客 2907

Unity3D之游戏场景的切换与持久化简单数据的储存

Unity3D之游戏场景的切换与持久化简单数据的储存,Unity最新的场景切换形式,以及实现PlayerPrefs数据的保存与读取。

Unity(13)-场景切换,保留资源

场景切换,保留资源

害怕也得前进 1万+

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战

本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。

q6r7s8t9的博客 1138

安装 Claude Code 并接入阿里云百炼(Bailian)

这些工具通常提供可视化界面,只需在设置中填入阿里云百炼的 API Key 和 Base URL 即可,无需配置环境变量。注意:如果你使用的是阿里云百炼的 Coding Plan 套餐,请使用该套餐专属的 API Key 和 Base URL。你可以使用文本编辑器打开该文件,或者在终端使用命令(如 macOS/Linux 下使用 nano ~/.claude/settings.json)。你可以直接用自然语言下达指令,例如:“帮我在这个目录下写一个 Python 脚本,实现两数之和的功能”。

hopsky的博客 1845

揭秘Unity场景切换时对象丢失问题:如何用DontDestroyOnLoad实现真正的全局单例

解决Unity场景切换对象丢失难题,掌握C#单例与DontDestroyOnLoad结合的正确用法。适用于全局管理器、音频控制等需跨场景持久化的对象,确保实例不被销毁。实现真正稳定的全局单例模式,提升项目架构稳定性,值得收藏。

CodeVibe的博客 516

基于51单片机的多功能计算器全套设计

当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且人脑比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器设计开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。 本设计是以STC89C52单片机为核心的计算器模拟系统设计,输入采用5×8矩阵键盘,可以进行加、减、乘、除等十几种数字运算,同时支持括号

runweipa的博客 1743

Unity编辑器随机生成物体,更换场景之后物体丢失问题解决

我在编辑器开发的时候实例化预制体到场景中之后,在跳转场景之后,然后在返回实例化过物体的场景会导致之前我们创建的物体会丢失,这种情况!很坑,因为也不会提示未保存场景之类的,在这里记录下问题解决办法 详情请看APIUnity - Scripting API: PrefabUtility.UnpackPrefabInstance...

qq_40558087的博客 2269

SAP 深入理解库存

当 某个期间发生货物移动的时候,系统在更新mard数据的之前(这个表是实时更新的),会检查此笔业务过账期间和mard里对应记录的期间是否一致,也就是 看这是不是本期间第一笔移动。其二,我们不能保证这定期的作业的确定性,硬件维护、系统性能都可能使这预定的“时刻”出现偏差,如果某一次没能抓取该时刻的库存,对整个报表来说,是数据的缺失;中,当某一期间(Period)的第一项操作更新了物料数量或价值,则SAP系统会向表MBEWH写入一条记录,以第一项操作之前的余额、价格控制为标准。这对于业务数据量大的。

matinal 當冬夜漸暖 。公众号:matinal 3624

V90伺服 EPOS模式下回原(详细配置+SCL源代码)

/ 输出上限 100.0%rSetPoint : Real;// 设置目标值工程量。// 通道转换参考值。Td : Real;

RXXW_Dor的博客 2666

Unity跨场景数据持久化解决方案与实践

数据持久化是游戏开发中的基础需求,指在程序运行期间保持关键数据不丢失的技术方案。其核心原理是通过内存管理、序列化等技术手段,确保数据在场景切换、程序重启等情况下依然可用。在Unity引擎中,实现良好的持久化系统能显著提升游戏稳定性与用户体验。常见的应用场景包括玩家进度保存、全局配置管理、资源状态维护等。针对Unity特性,开发者可采用DontDestroyOnLoad方法、ScriptableObject数据容器或单例模式等方案,其中ScriptableObject因其可视化编辑和天然跨场景特性成为推荐选择

weixin_32479897的博客 273

实战交易策略 篇二十二:情绪流龙头交易策略

在股票市场中,机构主导趋势,游资驱动热点,散户易被情绪裹挟,形成“金字塔”式生态链,并存在情绪传递、强者恒强、物极必反的规律特点。股市是资金驱动的情绪博弈场,价格波动由群体心理、资金博弈和预期差共同驱动,核心是资本逐利性与人性贪婪恐惧的交织,兼具资源配置、财富再分配与风险定价功能。涨停加速与逃逸缺口(主升强化)凹字板/平台突破(趋势延续)天量弱转强(分歧买点)不参与首波(二波策略)情绪周期(道术合一)主线思维(聚焦核心)开盘抢筹(竞价博弈)一字助攻(情绪强化)分批进出(滚动操作)

生活在别处 1501

unity运行自动保存

在Unity窗口中找到Asset目录,并在该目录下创建一个Editer目录,在Editer目录下创建一个名为autosave的C#脚本文件,将以下代码替换掉autosave脚本文件里原本的代码,运行后即可自动保存unity场景编辑内容,测试有效。

weixin_42327333的博客 1803

1.1 了解Spring框架 -《SSM深入解析与项目实战》

文章目录第1篇 基础概念第1章 谈谈SSM框架和Redis1.1 了解Spring框架1.1.1 如何学习Spring1.1.2 IoC(Inversion of Control 控制反转)1.1.3 AOP(Aspect Oriented Programing面向切面编程) 项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm 本章非常形象的介绍了Springn中最核心的两个概念,IoC和AOP,使用了现实中的例子

谙忆-陈浩翔 2136

【大模型工程局】告别单打独斗:手把手带你构建多智能体系统(MetaGPT 启示录)

想象一下,不再是只有一个全知全能的 AI,而是有一群各有所长、能够独立思考和行动的“智能体”(Agent)。它们生活在一个共同的环境中,可以相互交流、协作完成共同目标,也可能为了有限资源而相互竞争。这就是多智能体系统(MAS)的核心图景。MAS 的关键特征:自治性 (Autonomy):每个智能体都能独立感知环境、做出决策并执行动作,无需外部直接控制。交互性 (Interaction):智能体之间可以通过某种通信机制(显式或隐式)交换信息、协调行为。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1186

Unity全局单例模式:DontDestroyOnLoad与场景切换对象持久化解决方案

在Unity游戏开发中,场景(Scene)是独立的世界容器,其生命周期管理机制默认会在切换时销毁所有对象。这一设计虽保证了场景的独立性,却导致需要全局持久化的核心对象(如游戏管理器、音频管理器)在场景切换时丢失。为解决这一问题,开发者需理解对象持久化与实例唯一性控制两大核心概念。通过结合Unity引擎提供的DontDestroyOnLoad API与单例模式,可实现对象的跨场景存活与全局唯一访问。DontDestroyOnLoad将对象移至特殊场景使其持久化,而单例模式通过静态实例引用与初始化控制确保唯一性

weixin_33670713的博客 397

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Unity 切换场景导致的MissingReferenceException

在制作过场效果时发现的问题。 场景为当使用DontDestroyOnLoad保存渐变效果的Canvas时,转换场景会导致CanvasGroup的丢失,这是系统产生了类似于null.some_property的空值错误。 解决办法就是在丢失的变量前加上this. this.canvasGroup = GetComponent<CanvasGroup>(); 解决办法参考自c# - 'MissingComponentException' with 'CanvasGroup.int..

qq_38782818的博客 5498

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Unity数据存储终极指南:告别游戏进度丢失的烦恼

你是否曾经遇到过这样的场景:精心设计的游戏关卡,玩家好不容易打到一半,突然闪退重启,所有进度化为乌有?或者在不同设备间切换时,发现游戏数据无法同步?这些问题正是Unity游戏开发中最让人头疼的数据存储挑战。 ## 为什么数据存储成为游戏开发的痛点? 在Unity游戏开发过程中,数据存储看似简单,实则暗藏诸多陷阱。传统的PlayerPrefs虽然方便,但存在数据易被篡改、跨平台兼容性差、不支持复

gitblog_00454的博客 672

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Unity3D RPG实现 1 —— 初始环境、战斗系统、场景切换与存储档

本系列实现了战斗系统、背包系统、敌人的简易AI,任务对话系统等。

weixin_43757333的博客 7322

Unity异步加载场景时DontDestroyOnLoad对象管理的终极解决方案

在Unity游戏开发中,场景管理与对象生命周期是核心基础概念。DontDestroyOnLoad API允许游戏对象在场景切换时不被销毁,常用于实现全局管理器。然而,其原理是将对象移至独立场景,而非赋予其完全免疫的生命周期。当引入异步场景加载(SceneManager.LoadSceneAsync)时,新旧场景生命周期重叠,会引发单例模式破坏、协程中断、资源引用丢失等一系列技术挑战。这些问题的本质是持久化对象与异步加载流程间的协调失控。本文针对这一高频痛点,提出了一套基于中心化管理的工程实践方案,通过设计P

clijovtbq401783153的博客 597
上一篇: C#的list的常用的方法,List的粗略记录,将一个list的元素给另外一个list的元素赋值
下一篇: Unity在编辑器下清空控制台中的Debug.Log()信息
先生沉默先
博客等级 码龄6年 920粉丝 146原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值