Unity切换场景保存上一个场景的数据,Unity切换场景的案例,Unity切换场景再返回数据丢失的解决方案
Posted 先生沉默先
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity切换场景保存上一个场景的数据,Unity切换场景的案例,Unity切换场景再返回数据丢失的解决方案相关的知识,希望对你有一定的参考价值。
问题:
Unity在切换场景之后在再次返回上不会保存上一个场景的数据的。
但是大多数时候我们是需要这些数据的,这应该如何解决呢?
解决方案:
- 文件链接:我将解决方案打包了,点我下载,免费,或者私信我发你
- 首先将需要存储到一个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;
- 然后我们再创建一个脚本,并这个脚本挂到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);
- 在上面我们完成了数据载体的创建(StudentEnity,tudentGaemObject ),以及场景切换的时候用于保存数据的载体(GameManger ,StudentEnity)。
- 接下来我们做一些场景切换的工作,创建两个场景,一个名字为"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");
);
然后点击按钮就会跳转场景。
- 然后测试一下就会发现场景跳转
StudentEnity
中的_Time
还是会按照跳转之前的继续增加。
Enjoy ,不懂私信,我会看。
Unity(13)-场景切换,保留资源
前言
在切换场景的时候会删除上一个场景的所有资源,所以需要给需要的游戏对象上挂载脚本,从而保留游戏对象。
其他介绍
上一篇笔记
一、项目结构
场景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切换场景再返回数据丢失的解决方案的主要内容,如果未能解决你的问题,请参考以下文章