将数据从1个场景传输到2个场景

时间:2020-02-23 15:10:54

标签: c# unity3d

(我想统一制作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();
}

2 个答案:

答案 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是最好的。