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

Posted 先生沉默先

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity切换场景保存上一个场景的数据,Unity切换场景的案例,Unity切换场景再返回数据丢失的解决方案相关的知识,希望对你有一定的参考价值。

问题:

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(13)-场景切换,保留资源

前言

在切换场景的时候会删除上一个场景的所有资源,所以需要给需要的游戏对象上挂载脚本,从而保留游戏对象。

在这里插入图片描述

其他介绍

微软官方C#函数文档

Unity官方API文档(英文)

Unity官方API文档(中文)

Unity官方用户手册(中文)

Unity游戏蛮牛API文档(中文)

Unity教程-C语言中文网

Unity用户手册-unity圣典

Unity组件手册-unity圣典

Unity脚本手册-unity圣典

上一篇笔记

Unity(12)-场景切换

一、项目结构

场景1

在这里插入图片描述

场景2

在这里插入图片描述

项目

在这里插入图片描述

二、脚本

[1]. 场景切换

添加场景到设置中

在这里插入图片描述

场景切换的脚本如下

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

public class Change : MonoBehaviour
{
    /// <summary>
    /// 切换到场景2
    /// </summary>
    public void scene2()
    {
        SceneManager.LoadScene("Menu2");
    }
}

然后在按钮上绑定场景切换的脚本

在这里插入图片描述

在这里插入图片描述

[2]. 资源保留

创建了一个空的资源Player作为需要保留的资源

在这里插入图片描述

Start中使用函数DontDestroyOnLoad(),传入当前挂载对象

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

public class Keep : MonoBehaviour
{
    private void Start()
    {
        DontDestroyOnLoad(gameObject);//在加载新场景时不销毁脚本挂载的对象
        //方式二 DontDestroyOnLoad(this.gameObject);
    }
}

把脚本挂载到需要保留的资源上

在这里插入图片描述

最终效果如下,被脚本挂载的Player对象被放置到了DontDestroyOnLoad
在场景2中也会存在DontDestroyOnLoad
如果DontDestroyOnLoad没有被删除,那么再切换到其他的场景时里面的资源仍然可以存在。

在这里插入图片描述

以上是关于Unity切换场景保存上一个场景的数据,Unity切换场景的案例,Unity切换场景再返回数据丢失的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Unity 保存场景物体修改到Prefab

unity——通过点击按钮进行场景切换

unity导出的安卓apk运行第一个场景没问题,第二个场景闪

unity在切换场景时,场景灯光变暗的问题

unity3d 新人求助 按钮控制同场景多个相机切换的问题

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