【发布时间】:2014-12-10 17:38:33
【问题描述】:
在 Unity 中工作时遇到问题。我只是想在每次发生碰撞时增加分数,但我的代码没有帮助。我知道这听起来很基本,但我已经在网站上四处寻找了很长一段时间,但我还没有找到答案。 这是脚本:
我已经检查过了,“VictoryScreen”已经制作完毕。
public class PaintScriptGreen : MonoBehaviour {
public GameObject CylGreen;
private int score = 0;
private Vector3 tempPos;
private Quaternion tempRot;
private GameObject tempCyl;
void Awake ()
{
}
public void AddScore (int scoreValue)
{
score += scoreValue;
}
void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "Cylinder" && col.gameObject.tag != "TreeHolder")
{
tempPos = col.gameObject.transform.position;
tempRot = col.gameObject.transform.rotation;
Destroy (col.gameObject);
tempCyl = Instantiate(CylGreen, tempPos, tempRot) as GameObject;
AddScore (1);
if (score >= 4)
{
Application.LoadLevel ("VictoryScreen");
}
}
if ((col.gameObject.tag != "Player")&&(col.gameObject.tag != "PlayPart"))
{
// destroy self bullet
Destroy (this.gameObject);
}
}
【问题讨论】:
-
我不明白什么不起作用以及您期望什么作为答案。你能告诉我们更多吗?你也说“每次发生碰撞”,触发器和碰撞是不一样的。你确定这是你想做的吗?
-
我认为这是一个触发器,对不起,我对 Unity 有点陌生。问题是,分数变量始终为 0,或者看起来如此,因为屏幕永远不会改变,即使通过触发器工作(与触发器相关的所有其他事情都发生在游戏本身中。感谢您的响应。
-
您是否尝试使用 Debug.Log 显示您的 score 变量以确保它的值(在 AddScore 之后和 AddScore 中的增量之后)?
-
值没有被修改,我已经这样做了,这就是问题所在。如果我将所需的值设置为 1,则屏幕会正确更改,但任何超过该值的值最终都会出现问题。就像每次触发发生时值都会重置一样。
-
问题是脚本被附加到一个一直被销毁的游戏对象(“子弹”),所以在改变之后一切都是求解器:)谢谢大家的帮助!跨度>