我的脚本只更新一次文本

时间:2015-03-03 18:38:12

标签: c# unity3d

我想在Unity制作突围游戏。我做了很多功能,除了" count"功能。我希望" count"函数告诉用户剩下多少砖。每当一个brick(gameObject)被破坏时,int变量" brick"将减少一个。我遇到的问题是它只更新一次(从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 gameObjects(其中104个)中,以便它们在碰撞时中断。

3 个答案:

答案 0 :(得分:3)

我认为你的场景中有一个spawner实例。调用DestroyBrick时,您可以通过调用Destroy (gameObject);来终止此实例。所以你坚持 103

可能的解决方案:

  • 删除对Destroy的调用,如果它是104块砖的生成器
  • 如果它是一个附加到每个衍生的Brick实例的砖组件,也是
    • 委托计数到另一个对象让我们说BrickCounter
    • make member variable bricks static

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

答案 1 :(得分:1)

由于砖游戏对象的每个实例都有此行为的唯一实例,所以你得到了这个:

  1. Brick 1以count 104开头
  2. Brick 2以count 104开始
  3. 砖1被破坏,其数量达到103
  4. 文本由Brick 1
  5. 设置为103
  6. 砖块2被破坏,计数变为103
  7. 文本由Brick 2
  8. 设置为103

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

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

答案 2 :(得分:1)

如果这个代码块出现在你的104个游戏对象中,那么每次发生这种情况时,都会有一个名为“砖块”的整数。使用值104创建。

将此变量声明在所有这些对象之外可公开访问的位置,并且只减少和更新brick对象上的文本。