Kub*_*322 0 c# unity-game-engine
在我的游戏中,玩家必须收集硬币。问题是当玩家死亡并开始新游戏时,硬币数量不会重置。例如:
开始新游戏并收集 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();
}
Run Code Online (Sandbox Code Playgroud)
用于添加硬币得分的脚本:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我还需要说,我在与那个分数的 PlayerPrefs 混在一起来制作一些高分概念,但我删除了我所做的每个 PlayerPrefs。非常感谢。
这是有问题的行:
public static int score = 0;
Run Code Online (Sandbox Code Playgroud)
声明为“静态”的变量将在运行时持续存在,即使它所绑定的对象被销毁(它是所有硬币对象共享的值)。
理想情况下,您可以将其设为非静态(这是 Unity 所期望的)。
public int score = 0;
Run Code Online (Sandbox Code Playgroud)
如果您在玩家死亡时重新创建 Coin 对象,unity 将为您处理清理工作。
或者,您可以向 Coin 类添加“重置”方法...
public int GetScore()
{
return score;
}
public void Reset()
{
score = 0;
}
Run Code Online (Sandbox Code Playgroud)
我回答了一个更详细地涉及静力学并且可能会引起兴趣的问题。
通常,当一个类有变量时,每次创建该类的新实例时,它都会获得每个变量的副本。
(你可以创建两个
Animal类并给每个类一个不同的Name)甲
static变量是不同的。不是每个实例都有自己的变量副本,而是共享相同的副本。所以如果你设置了
animal1.StaticName,你也会改变animal2.StaticName。更重要的是,你甚至不需要制作动物,你可以直接设置Animal.StaticName。所以......即使您没有创建类的实例,也可以读取/设置静态变量(并且可以执行静态方法)。
哦,...如果你做决定比分保持静态,你不需要找特定对象,以获得分数...
void Update()
{
GetComponent<Text>().text = Coin.score.ToString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |