脚本在 1 次计数后停止计数

Script stops counting after 1 count

从开始练习Unity和c#到现在已经4-5天了。我很业余。我有一个我无法弄清楚的问题。我正在尝试编写那个简单的 2D 乒乓球类游戏。每次玩家错过球时,我都会实例化球并计算得分。但是即使每次都实例化球,游戏也会在 1 次后停止增加分数。

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

public class ballmove : MonoBehaviour
{
    private Rigidbody2D rb;
    public float speed;
    public GameObject top;
    private Vector2 direct;
    public int p2;
    public int p1;
    public Text scoretext;
    public Text scoretext2;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        speed = 3f;
        InvokeRepeating("speedUp", 10f, 10f);

        p1 = 0;
        p2 = 0;
    }

    void Update()
    {
        if (rb.velocity == new Vector2(0f, 0f))
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                rb.velocity = new Vector2(2f, 1f) * speed;
            }
        }
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "finish2")
        {
            Debug.Log("This if is working");

            p2++;

            Instantiate(top, new Vector2(-6.4f, -0.2f), Quaternion.identity);
            Destroy(this.gameObject);

            updateScore2();
        }
        if (other.gameObject.tag == "finish")
        {
            p1++;

            Instantiate(top, new Vector2(6.32f, -0.2f), Quaternion.identity);
            Destroy(this.gameObject);

            updateScore();
        }
    }

    void updateScore()
    {
        scoretext.text = p1.ToString();
    }
    void updateScore2()
    {
        scoretext2.text = p2.ToString();
    }
    void speedUp()
    {
        direct = rb.velocity.normalized;
        rb.velocity += direct * 2f;
    }
}

我的p1和p2(分数)都只增加了1倍。但是他们的条件和

是一样的

实例化,每次其中一名球员得分时,实例化都会起作用,但 p1 and/or p2 停留在

值 1。

谢谢。

我不能发表评论来问这个问题,因为我有 <50 个代表,但是 - 这个脚本是附加在球本身上的吗?

如果是这样,那就是问题所在。小球实例化得分为 0,当它被销毁时,只需将得分 1 再次写入显示得分。

尝试将分数的定义更改为静态:

public static int p2;
public static int p1;

编辑: 我第一次看的时候错过了这个,但是,您还在 Start() 函数中将分数设置为 0。您需要删除它,而不是将它们初始化为原始定义中的 0:

public static int p2 = 0;
public static int p1 = 0;