【发布时间】:2021-01-20 17:34:19
【问题描述】:
我正在开发一个游戏,它基本上是关于滚动球,当你击中游戏结束对象时它就是游戏结束,当你击中目标对象时它就是目标(也许你会被导航到下一阶段或其他什么),在这里我想要算法,当你击中目标对象后击中游戏结束对象时,它会被忽略,所以一旦你击中目标对象,你就会赢得舞台。
这里是C#代码,我设置变量goaled,当你击中目标对象时尝试将变量更改为“true”,只有当goaled == false,当你还没有进球时,你会输.但是代码不起作用,作为预期的结果,它不应该在我进球后记录“游戏结束”,但实际上它会。
那么,如何修改代码以按预期工作?谢谢。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class tmp03 : MonoBehaviour
{
bool goaled = false;
void OnCollisionEnter(Collision otherObj)
{
// bool goaled = false;
if (gameObject.name == "goal" && otherObj.gameObject.name == "ball")
{
Debug.Log("goal");
Debug.Log(goaled);
goaled = true;
Debug.Log(goaled);
}
if (gameObject.name == "gameover" && otherObj.gameObject.name == "ball" && goaled == false)
{
Debug.Log("gameover");
Debug.Log(goaled);
}
}
}
【问题讨论】:
-
如果您查看文档docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html,他们也会像您一样使用变量。我认为命名有问题。您是否尝试将目标设置为公开?这样你就可以在编辑器中跟踪比赛期间的变化,看看你进球是否会发生变化。调试日志返回的值是多少,是否成功更改了目标 var onCollisionEnter?
-
@Holger 是的,我也尝试过
public bool goaled = false;,但没有成功。 -
也许你忘记了刚体组件。为此,至少其中一个对象必须具有刚体组件。如果您不想添加刚体,我建议在目标和游戏结束对象的碰撞器上使用 onTriggerEnter 并将 isTrigger 属性切换为 true。
-
@MustafaCemKobal 我有用于“球”对象的刚体组件。 OnCollisionEnter 本身运行良好,当球物体击中物体时会显示日志。