Unity 3D在GameOver上停止物理

本文关键字:3D GameOver Unity | 更新日期: 2023-09-27 18:28:39

我的游戏有分数。它还有多个游戏对象,在碰撞时,得分为10。乐谱脚本附加到所有这些游戏对象。

游戏对象具有以随机时间间隔施加到它们的力。这股力量使他们向右移动,然后他们停了下来。玩家有一个可以点击对象的时间框架。如果玩家及时点击,物体会被向左推进,并因碰撞事件而停止,这会使分数增加+10。如果该时间段到期,游戏对象无论如何都会向左施加一个力,但这会导致游戏在文本上实例化。

假设点击的时间段在玩家点击之前到期。游戏对象被向左推进,由于计时器而不是玩家点击导致了这种推进,GameOver发生了,这只是一个正在实例化的GameOver文本。

**问题是这样的。**由于分数脚本附加到所有这些游戏对象,假设对象1超时并导致游戏结束,则对象2到10与对象1在同一计时器上,并且在超时时仍将被向左推。此外,玩家仍然可以点击它们,并在游戏结束后继续玩。

我的问题是,如何才能阻止这些游戏对象在游戏结束时移动?

我不能禁用对撞机或破坏刚体。在GameOver上设置推力=0是可行的,但只有在其他9个游戏对象超时并再次被踢之后。我无法使int score=0,因为我希望显示最终分数。我不能因为同样的原因破坏比分。取消排队没有任何作用,只是重新启动计时器。

我只需要分数在GameOver上停止递增。如果我也能停止其他9个游戏对象的物理,那也很好。

我希望我已经提供了足够的信息来获得反馈。

感谢

Unity 3D在GameOver上停止物理

您可以通过将时间刻度设置为0:来停止物理

当timeScale设置为零时,如果你的所有功能都是与帧速率无关的,游戏基本上会暂停

当timeScale设置为零时,FixedUpdate函数将不会被调用

http://docs.unity3d.com/ScriptReference/Time-timeScale.html

其他选项:-可以将物理对象刚体设置为[x]运动学,这样它们就会停止-让bool gameover可变,并在超时后将其设置为true,然后在分数脚本中,如果gameover变量为true,则不再添加新分数-时间结束时禁用评分脚本-拥有全局ScoreManager脚本,它可以添加/计算分数,而不是多个单独的评分脚本,更容易处理何时停止/启用

如果我理解正确,这应该会停止所有轴上所需对象的所有物理:

gameobject.find("object").getcomponent<Rigidbody2D>().constraints  = RigidbodyConstraints2D.FreezeAll;

GameObjects[] ObjectsToFreeze = GameObject.FindGameObjectsWithTag("object")
foreach(gameobject obj in objectsToFreeze)
{
obj.getcomponent<Rigidbody2D>().constraints  = RigidbodyConstraints2D.FreezeAll;
}