【问题标题】:My script only updates the text once我的脚本只更新一次文本
【发布时间】:2015-03-03 18:38:11
【问题描述】:

我想在 Unity 中制作一个 Breakout 游戏。除了“计数”功能外,我还做了很多功能。我希望“计数”功能告诉用户还剩下多少块砖。每次砖块(游戏对象)被破坏时,int 变量“砖块”将减一。我遇到的问题是它只更新一次(从 104 到 103)然后停止更新。这是我的脚本:

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

public class Spawner : MonoBehaviour {

public int bricks = 104;
public Text triggerText;

void Start(){
    triggerText.text = "Bricks: "+bricks;
    }

public void OnCollisionEnter(){

    DestroyBrick ();

}

public void DestroyBrick(){
    bricks--;
    Destroy (gameObject);
    triggerText.text = "Bricks: "+bricks;
    }

编辑:我忘了提到我将此脚本添加到我的 Brick 游戏对象(其中 104 个)中,以便它们在碰撞时中断。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我认为你的场景中有一个生成器实例。当DestroyBrick 被调用时,你通过调用Destroy (gameObject); 杀死这个实例。所以你坚持103

    可能的解决方案:

    • 如果 Destroy 是您的 104 块砖的一个生成器,请移除对 Destroy 的调用
    • 如果它是附加到每个生成的 Brick 实例的砖组件,则
      • 将计数委托给另一个对象,比如 BrickCounter
      • 使成员变量bricks静态

    编辑(灵感来自@BradleyDotNET 的评论):
    静态成员可以进行测试。但我总是更喜欢创建一个单独的类来负责保存砖数。

    【讨论】:

    • 非常感谢!我理解了这个问题并将变量设为静态解决了我的问题!如果你不介意,你能回答我这是如何解决问题的吗?生成器仍然会被摧毁。无论如何,非常感谢!
    • @tomSurge static 变量对于类的所有实例都存在一次。它们实际上是“全球性的”。使用它们是……相对不好的做法,除非你知道你在做什么。小心他们。
    • @BradleyDotNET 我完全同意你的看法,并在我的回答中添加了提示。
    【解决方案2】:

    由于积木游戏对象的每个实例都有此行为的唯一实例,因此您会得到:

    1. 砖 1 以计数 104 开始
    2. Brick 2 从计数 104 开始
    3. Brick 1 被破坏,其计数变为 103
    4. Brick 1 将文本设置为 103
    5. Brick 2 被破坏,计数变为 103
    6. Brick 2 将文本设置为 103

    给出计数仅递减一次的外观。要解决此问题,您需要一个管理计数的 global 脚本(分配给单个游戏对象)。当一个砖块被销毁时,它的行为应该找到(或被传递)这个行为实例并调用它的方法:

    public void BrickDestroyed()
    {
        bricks--;
        triggerText.text = "Bricks: "+bricks;
    }
    

    【讨论】:

      【解决方案3】:

      如果此代码块位于 104 个游戏对象中的每一个上,那么每次发生这种情况时,都会创建一个名为“砖块”的整数,其值为 104。

      在所有这些对象之外可公开访问的地方声明此变量,并且仅减少和更新砖对象上的文本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 2021-04-02
        • 2014-07-21
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多