为什么分数在统一C#中无法正常工作

时间:2018-11-17 18:35:51

标签: c# unity3d

我建立了一个基于被破坏球的计分系统,所以一开始,得分是82,每个被破坏的球应将得分降低1。

我为球制作了脚本,但是比分无法正常工作,您能告诉我代码中有什么问题吗?

这是球形脚本:

public class Ball : MonoBehaviour {

    private int Count;
    public Text TextCount;

    // Update is called once per frame
    Rigidbody rb;
    public float destroyTimeOut = 2;
    bool hitBase = false;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        Count = 82;
        SetTextCount();
    }


    void Update () {
        if(rb.position.y < -3)
        {
            Destroy(gameObject);
            Count = Count - 1;
            SetTextCount();

        }
        if (hitBase)
        {
            timer += Time.deltaTime;
            if (timer > destroyTimeOut)
            {
                Destroy(gameObject);
                Count = Count - 1;
                SetTextCount();

            }
        }
    }
    float timer;
    private void OnCollisionEnter(Collision collision)
    {

        if (collision.gameObject.CompareTag("base"))
        {
            hitBase = true;
        }
    }

    void SetTextCount()
    {
        TextCount.text = Count.ToString();
    }

}

谢谢

2 个答案:

答案 0 :(得分:1)

当您调用http://localhost:8002/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 时,该GameObject会被附加的Destroy(gameObject)脚本破坏。

将得分系统与球碰撞检测系统分开。

1 。创建一个空的GameObject并将其命名为“ ScoreSystem”。

2 。创建一个脚本并将其命名为“ ScoreSys”,然后使用其中的以下代码。

3 。将其附加到“ ScoreSystem”。游戏对象。

Ball

分数系统现在具有其自己的代码和GameObject,并且不会被破坏。此外,分数更改时,public class ScoreSys : MonoBehaviour { public Text TextCount; private int _Count; public int Count { get { return _Count; } set { if (_Count != value) { _Count = value; TextCount.text = _Count.ToString(); } } } void Start() { Count = 82; TextCount.text = _Count.ToString(); } } 也将更新。


现在,您还必须分离Text脚本。只需找到“ ScoreSystem” GameObject,获取附加的Ball组件并更新分数。 ScoreSys脚本应附加到将要销毁的Ball对象上。

请注意,我不知道何时更新分数,但以下是您当前代码的翻译。您可能需要进行一些更改才能使其正常工作。

Ball

答案 1 :(得分:0)

如果将Count设为静态,则每个Ball对象将在内存中共享相同的值。正如其他人指出的那样,如果这些Ball对象中有多个,则每个对象都有自己的Count值概念。

    static int Count;

在类中将其设为静态(在您的源代码中添加一个单词),我认为它将按您的意愿进行操作。

此外,您无需显式声明“私有”,这是默认设置。

public class Ball : MonoBehaviour {

    static int Count;
    public Text TextCount;

    // Update is called once per frame
    Rigidbody rb;
    public float destroyTimeOut = 2;
    bool hitBase = false;
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        Count = 82;
        SetTextCount();
    }


    void Update () {
        if(rb.position.y < -3)
        {
            Destroy(gameObject);
            Count = Count - 1;
            SetTextCount();

        }
        if (hitBase)
        {
            timer += Time.deltaTime;
            if (timer > destroyTimeOut)
            {
                Destroy(gameObject);
                Count = Count - 1;
                SetTextCount();

            }
        }
    }
    float timer;
    private void OnCollisionEnter(Collision collision)
    {

        if (collision.gameObject.CompareTag("base"))
        {
            hitBase = true;
        }
    }

    void SetTextCount()
    {
        TextCount.text = Count.ToString();
    }

}