Unity 3D在GameOver上停止物理

时间:2016-01-02 14:48:17

标签: c# unity3d

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

游戏对象以随机时间间隔对其施加力。这股力量向右移动然后停止。玩家有一个时间框架,他们可以点击该对象。如果玩家及时点击,则该对象被向左推进并被碰撞事件停止,该事件将得分增加+10。如果该时间帧到期,则游戏对象无论如何都会向左方向施加力,但这会导致游戏实例化为文本。

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

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

我的问题是,如何阻止这些游戏对象继续游戏?

我无法禁用对手或摧毁刚体。在GameOver上做出推力= 0的工作,但只有在其他9个游戏对象超时并再次被踢之后。我无法将int得分= 0,因为我希望显示最终得分。出于同样的原因,我无法摧毁乐谱。排队什么也没做,只是重新开始计时器。

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

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

由于

2 个答案:

答案 0 :(得分:1)

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

  

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

     

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

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

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

答案 1 :(得分:1)

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

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

GameObjects[] ObjectsToFreeze = GameObject.FindGameObjectsWithTag("object")

foreach(gameobject obj in objectsToFreeze)

{

obj.getcomponent<Rigidbody2D>().constraints  = RigidbodyConstraints2D.FreezeAll;

}