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

C# 脚本在1次计数后停止计数,c#,unity3d,counter,counting,C#,Unity3d,Counter,Counting,从我开始练习统一和c#到现在已经4-5天了。我很业余。我有一个我想不出来的问题。我正在尝试编写一个简单的2D乒乓球游戏。每次球员错过球,我都会举例说明球并计算分数。但即使球每次都被实例化,游戏在1次后停止增加分数 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ballmove : MonoBehaviour {

从我开始练习统一和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;
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类ballmove:单一行为
{
私有刚体2d rb;
公众浮标速度;
公共游戏对象顶部;
私人矢量2直接;
公共INTP2;
公共int p1;
公共文本;
公共文本2;
void Start()
{
rb=GetComponent();
速度=3f;
调用重复(“加速”,10f,10f);
p1=0;
p2=0;
}
无效更新()
{
if(rb.velocity==新矢量2(0f,0f))
{
if(Input.GetKeyDown(KeyCode.Space))
{
rb.速度=新矢量2(2f,1f)*速度;
}
}
}
无效OnTiggerEnter2D(碰撞的R2D其他)
{
如果(other.gameObject.tag==“finish2”)
{
Log(“此if正在工作”);
p2++;
实例化(顶部,新向量2(-6.4f,-0.2f),四元数标识);
摧毁(这个游戏对象);
updateCore2();
}
if(other.gameObject.tag==“finish”)
{
p1++;
实例化(顶部,新向量2(6.32f,-0.2f),四元数.identity);
摧毁(这个游戏对象);
updateScore();
}
}
void updateScore()
{
scoretext.text=p1.ToString();
}
void updatecore2()
{
scoretext2.text=p2.ToString();
}
无效加速()
{
直接=rb.velocity.normalized;
rb.速度+=直接*2f;
}
}
我的p1和p2(分数)只增加了1倍。但它们的情况与我们的情况相同

实例化,每次其中一个玩家得分时,实例化都有效,但p1和/或p2保持不变

值为1


谢谢。

我无法对此发表评论,因为我已经试过了。但不幸的是,这并没有奏效。顺便说一下,我创建了新的testVar。并在p1附近增加,并打印到控制台。它起作用了。它增加了,但不知怎么的p1和p2又回到了0;起初我漏掉了一些东西,但我又编辑了一次。我想这应该能帮你解决问题,它奏效了。非常感谢。但是为什么呢?启动函数不是只运行一次吗?启动函数只对每个实例运行一次。每次得分后实例化一个新球时,新球将再次运行
Start()
,重置分数。好的,我知道了。非常感谢。
public static int p2;
public static int p1;
public static int p2 = 0;
public static int p1 = 0;