(我想统一制作2D游戏)
我想将硬币值从第一个场景传递到第二个场景。
我想从第一个场景中取出硬币,并将它们设置为第二个场景的起点,
有人可以解释一下它如何通过序列化工作吗?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class CoinFinal : MonoBehaviour
{
// Für die Coinanzeige
public float coins = 1;
public Text CoinsAnzeige;
public GameObject house;
void Start()
{
CoinsAnzeige.text = coins.ToString();
house.SetActive(false);
}
public void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("coinblock"))
coins++;
}
void Update()
{
CoinsAnzeige.text = " " + coins.ToString();
if (coins > 9)
{
house.SetActive(true);
}
}
}
找到了方法:
void Start()
{
CoinTest = PlayerPrefs.GetInt("myScore");
}
void Update()
{
CoinUebergabe.text = PlayerPrefs.GetInt("myScore").ToString();
}
答案 0 :(得分:2)
这个概念通常可以很容易地作为“ GameManager”来处理。 Singleton
这是我通常使用的代码:
在层次结构窗口中创建空的游戏对象,并附加以下脚本:
public class GameManager : MonoBehaviour
{
public float coins;
private static GameManager _instance;
public static GameManager Instance
{
get
{
return _instance;
}
}
private void Awake()
{
if (_instance != null)
{
Destroy(gameObject);
}
else
{
_instance = this;
DontDestroyOnLoad(gameObject);
}
}
}
现在您可以随时访问自己的公共财产,例如:
GameManager.Instance.coins = 3;
答案 1 :(得分:1)
如上所述,您可以使用静态变量。另一种方法是将信息保存在PlayerPrefs
中,然后再次从中加载信息。可能更不肮脏的方法是DontDestroyOnLoad
。即使我提到了这两种方式,我也认为具有静态属性的Class是最好的。