C# 脚本在1次计数后停止计数
从我开始练习统一和c#到现在已经4-5天了。我很业余。我有一个我想不出来的问题。我正在尝试编写一个简单的2D乒乓球游戏。每次球员错过球,我都会举例说明球并计算分数。但即使球每次都被实例化,游戏在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 {
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;