Скрипт перестает считать после 1 счета

Прошло 4-5 дней с тех пор, как я начал практиковать Unity и C#. Я довольно любитель. У меня есть проблема, которую я не мог понять. Я пытаюсь закодировать эту простую двухмерную игру в пинг-понг. Каждый раз, когда игрок пропускает мяч, я создаю его и подсчитываю счет. Но даже мяч создается каждый раз, игра перестает увеличивать счет через 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 и / или p2 остаются на

значение 1.

Благодарю.

1 ответ

Решение

Я не могу комментировать, чтобы спросить это, потому что у меня <50 повторений, но - этот скрипт прикреплен к самому мячу?

Если так, то это проблема. Мяч создает балл 0, а когда он уничтожается, просто записывает 1 балл снова в счет дисплея.

Попробуйте изменить определение баллов на статическое:

public static int p2;
public static int p1;

РЕДАКТИРОВАТЬ: я пропустил это в первый раз, когда я посмотрел, но вы также установили счет на 0 в Start() функция. Вам нужно будет удалить это, и вместо этого инициализировать их равными 0 в их первоначальном определении:

public static int p2 = 0;
public static int p1 = 0;
Другие вопросы по тегам