【问题标题】:Unity - C# : how can I use a value in different scenes?Unity - C#:如何在不同场景中使用值?
【发布时间】:2019-11-03 16:08:27
【问题描述】:

我制作了我的第一个 Unity3D 游戏。这是一款具有无限道路的赛车游戏。我也做了一些捡硬币。 问题是当我拿起硬币然后我去商店菜单看看它是否添加到总硬币中,直到我玩下一轮才会添加,然后我之前收集的硬币将被添加。 这就像延迟什么的。

是不是因为不知道如何在不同的场景中使用一个值?或者它,是别的东西。 有人告诉我使用 PlayerPrefs,我在我的脚本中使用了它,但为此,我的意思是硬币的数量,我不知道如何使用它。

下面的脚本是我的玩家脚本,我在其中计算拾取硬币和其他一些与玩家相关的东西。我只带了Ontrigger和count相关的代码。

void Start () {
    CameraAnimation = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Animator>();
    _GameManager = GameObject.FindGameObjectWithTag("GameManager").GetComponent<GameManager>();
    _AudioSource = GetComponent<AudioSource>();
    count = 0;
    SetCountText ();
}

void OnTriggerEnter(Collider other){
       if(other.gameObject.tag == "Coins") {
             count = count + 1;
             SetCountText ();
        }
}

public void SetCountText(){
    CountText.text = count.ToString ();
}

下面的代码是我的calculateCoin,其中我将收集到的硬币计数添加到以前的值中,并在商店场景文本框中显示总数:

public class CalculateCoin : MonoBehaviour{

    // Use this for initialization
    public static int Coin = 10000;
    public Text ShowCoin;
    void Start () {
        ShowCoin.text = PlayerPrefs.GetInt("Coin").ToString();
        Coin =PlayerPrefs.GetInt("Coin")+Player.count;
        PlayerPrefs.SetInt ("Coin", Coin);
  }
}

【问题讨论】:

  • 我猜这个问题取决于你在计算硬币的数量时,现在你是在Start 方法中进行的,该方法在脚本附加到它的对象被实例化时调用,所以它只在关卡开始时调用,将方法名称更改为其他名称并根据需要调用它。

标签: c# unity3d


【解决方案1】:

第一个选项, 您可以为包含数据作为容器的特定游戏对象添加“DontDestroyOnLoad”。所以它可以用作场景之间的共享数据。

或制作“Singleton”类并将其用作数据容器,这可能是一种选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多