(我想做一场团结的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();
}发布于 2020-02-23 23:50:10
如前所述,您可以使用静态变量。另一种方法是将信息保存在PlayerPrefs中并再次从它们中加载。一种可能不那么肮脏的方式是DontDestroyOnLoad。尽管我提到了这两种方法,但我认为具有静态属性的类是最好的。
发布于 2020-02-23 15:28:50
这个概念可以很容易地作为"GameManager“来处理。辛格尔顿
下面是我通常使用的代码:
在层次结构窗口中创建空的游戏对象,并附加以下脚本:
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;https://stackoverflow.com/questions/60363608
复制相似问题