問題:
Unity在切換場(chǎng)景之后在再次返回上不會(huì)保存上一個(gè)場(chǎng)景的數(shù)據(jù)的。
但是大多數(shù)時(shí)候我們是需要這些數(shù)據(jù)的,這應(yīng)該如何解決呢?
解決方案:
- 文件鏈接:我將解決方案打包了,點(diǎn)我下載,免費(fèi),或者私信我發(fā)你
- 首先將需要存儲(chǔ)到一個(gè)class中,這里以學(xué)生為例子
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;
}
}
- 然后我們?cè)賱?chuàng)建一個(gè)腳本,并這個(gè)腳本掛到Unity場(chǎng)景中的游戲物體上.
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 顯示對(duì)應(yīng)的student屬性內(nèi)容
}
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);
}
}
}
}
- 在上面我們完成了數(shù)據(jù)載體的創(chuàng)建(StudentEnity,tudentGaemObject ),以及場(chǎng)景切換的時(shí)候用于保存數(shù)據(jù)的載體(GameManger ,StudentEnity)。
- 接下來我們做一些場(chǎng)景切換的工作,創(chuàng)建兩個(gè)場(chǎng)景,一個(gè)名字為"ScenceA",另外一個(gè)為“ScenceB“,分別在場(chǎng)景中創(chuàng)建一個(gè)Button,場(chǎng)景A的按鈕掛在這個(gè)腳本
private void Awake()
{
Button but=gameObject.GetComponent<Button>();
but.onClick.AddListener(delegate
{
SceneManager.LoadScene("ScenceB");
});
}
場(chǎng)景B掛載這個(gè)腳本文章來源:http://www.zghlxwxcb.cn/news/detail-433586.html
private void Awake()
{
Button but = gameObject.GetComponent<Button>();
but.onClick.AddListener(delegate
{
SceneManager.LoadScene("ScenceA");
});
}
然后點(diǎn)擊按鈕就會(huì)跳轉(zhuǎn)場(chǎng)景。文章來源地址http://www.zghlxwxcb.cn/news/detail-433586.html
- 然后測(cè)試一下就會(huì)發(fā)現(xiàn)場(chǎng)景跳轉(zhuǎn)
StudentEnity
中的_Time
還是會(huì)按照跳轉(zhuǎn)之前的繼續(xù)增加。
Enjoy ,不懂私信,我會(huì)看。
到了這里,關(guān)于Unity切換場(chǎng)景保存上一個(gè)場(chǎng)景的數(shù)據(jù),Unity切換場(chǎng)景的案例,Unity切換場(chǎng)景再返回?cái)?shù)據(jù)丟失的解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!