Скрипт перестает считать после 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;