繁体   English   中英

unity c# 游戏得分问题

[英]Issue with score in game with unity c#

在我的游戏中,玩家必须收集硬币。 问题是当玩家死亡并开始新游戏时,硬币的数量不会重置。 例如:

开始新游戏并收集 15 个硬币,然后死亡

开始新游戏和硬币数量我设置为 15,而不是 0

我该如何解决?

用于在屏幕上显示乐谱的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Score : MonoBehaviour
{
    Coin coin;
    void Update()
    {
        coin = FindObjectOfType<Coin>();
        GetComponent<Text>().text = coin.GetScore().ToString();
    }

用于添加硬币得分的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coin : MonoBehaviour
{
    float speed = 10f;
    public static int score = 0;
    void Update()
    {
        transform.position += Vector3.left * speed * Time.deltaTime;
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        score += 1;
    }
    public int GetScore()
    {
        return score;
    }
}

我还需要说,我在用那个分数来搞乱 PlayerPrefs 来制作一些高分概念,但是我删除了我所做的每个 PlayerPrefs。 非常感谢。

这是有问题的行:

public static int score = 0;

声明为“静态”的变量将持续与运行时一样长,即使它所绑定的 object 被破坏(它是所有硬币对象共享的值)。

理想情况下,您会使其成为非静态的(这是 Unity 所期望的)。

public int score = 0;

如果您随后在玩家死亡时重新创建硬币 object,Unity 将为您处理清理工作。

或者,您可以向硬币 class 添加“重置”方法...

public int GetScore()
{
    return score;
}

public void Reset()
{
    score = 0;
}

回答了一个更详细地涉及静态的问题,并且可能会引起人们的兴趣。

通常,当 class 有变量时,每次创建 class 的新实例时,它都会获得每个变量的自己的副本。

(您可以创建两个Animal类并为每个类赋予不同的Name

static变量不同。 它们不是每个实例都有自己的变量副本,而是共享同一个。

所以如果你设置animal1.StaticName ,你也会改变animal2.StaticName 更重要的是,你甚至不需要制作动物,你可以直接设置Animal.StaticName

所以...即使您尚未创建 class 的实例,也可以读取/设置 static 变量(并且可以执行 static 方法)。

哦,而且...如果决定保留分数 static,则无需查找特定的 object 即可获得分数...

void Update()
{
    GetComponent<Text>().text = Coin.score.ToString();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM