我建立了一个基于被破坏球的计分系统,所以一开始,得分是82,每个被破坏的球应将得分降低1。
我为球制作了脚本,但是比分无法正常工作,您能告诉我代码中有什么问题吗?
这是球形脚本:
public class Ball : MonoBehaviour {
private int Count;
public Text TextCount;
// Update is called once per frame
Rigidbody rb;
public float destroyTimeOut = 2;
bool hitBase = false;
void Start()
{
rb = GetComponent<Rigidbody>();
Count = 82;
SetTextCount();
}
void Update () {
if(rb.position.y < -3)
{
Destroy(gameObject);
Count = Count - 1;
SetTextCount();
}
if (hitBase)
{
timer += Time.deltaTime;
if (timer > destroyTimeOut)
{
Destroy(gameObject);
Count = Count - 1;
SetTextCount();
}
}
}
float timer;
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("base"))
{
hitBase = true;
}
}
void SetTextCount()
{
TextCount.text = Count.ToString();
}
}
谢谢
答案 0 :(得分:1)
当您调用http://localhost:8002/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
时,该GameObject会被附加的Destroy(gameObject)
脚本破坏。
将得分系统与球碰撞检测系统分开。
1 。创建一个空的GameObject并将其命名为“ ScoreSystem”。
2 。创建一个脚本并将其命名为“ ScoreSys”,然后使用其中的以下代码。
3 。将其附加到“ ScoreSystem”。游戏对象。
Ball
分数系统现在具有其自己的代码和GameObject,并且不会被破坏。此外,分数更改时,public class ScoreSys : MonoBehaviour
{
public Text TextCount;
private int _Count;
public int Count
{
get
{
return _Count;
}
set
{
if (_Count != value)
{
_Count = value;
TextCount.text = _Count.ToString();
}
}
}
void Start()
{
Count = 82;
TextCount.text = _Count.ToString();
}
}
也将更新。
现在,您还必须分离Text
脚本。只需找到“ ScoreSystem” GameObject,获取附加的Ball
组件并更新分数。 ScoreSys
脚本应附加到将要销毁的Ball对象上。
请注意,我不知道何时更新分数,但以下是您当前代码的翻译。您可能需要进行一些更改才能使其正常工作。
Ball
答案 1 :(得分:0)
如果将Count设为静态,则每个Ball对象将在内存中共享相同的值。正如其他人指出的那样,如果这些Ball对象中有多个,则每个对象都有自己的Count值概念。
static int Count;
在类中将其设为静态(在您的源代码中添加一个单词),我认为它将按您的意愿进行操作。
此外,您无需显式声明“私有”,这是默认设置。
public class Ball : MonoBehaviour {
static int Count;
public Text TextCount;
// Update is called once per frame
Rigidbody rb;
public float destroyTimeOut = 2;
bool hitBase = false;
void Start()
{
rb = GetComponent<Rigidbody>();
Count = 82;
SetTextCount();
}
void Update () {
if(rb.position.y < -3)
{
Destroy(gameObject);
Count = Count - 1;
SetTextCount();
}
if (hitBase)
{
timer += Time.deltaTime;
if (timer > destroyTimeOut)
{
Destroy(gameObject);
Count = Count - 1;
SetTextCount();
}
}
}
float timer;
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("base"))
{
hitBase = true;
}
}
void SetTextCount()
{
TextCount.text = Count.ToString();
}
}