脚本在 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;
从开始练习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;