【问题标题】:Unity 3D stop physics on GameOverUnity 3D 在 GameOver 上停止物理
【发布时间】:2016-01-02 14:48:17
【问题描述】:

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

游戏对象以随机的时间间隔向它们施加力。这种力将它们向右移动,然后它们停止。玩家有一个时间范围,他们可以在其中点击对象。如果玩家及时点击,物体会被向左推进并被碰撞事件停止,这会增加 +10 的分数。如果该时间范围到期,游戏对象无论如何都会向左方向施加力,但这会导致游戏在文本上的实例化。

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

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

我的问题是,我怎样才能阻止这些游戏对象在游戏结束时继续移动?

我不能禁用碰撞器或破坏刚体。在 GameOver 上设置推力 = 0 是可行的,但只有在其他 9 个游戏对象超时并再次被踢一次之后。我不能让 int score = 0 因为我想要显示最终分数。出于同样的原因,我不能破坏分数。出队没有任何作用,它只是重新启动计时器。

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

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

谢谢

【问题讨论】:

  • 也许您可以发布导致问题的“评分脚本”,因为您不想在出现GameOver 时增加分数。
  • 好的,我到家后贴出来
  • 太好了,很难想象你在那里遇到了什么,更难提出任何解决方案。

标签: c# unity3d


【解决方案1】:

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

当 timeScale 设置为零时,如果您的所有功能都独立于帧速率,则游戏基本上会暂停

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      相关资源
      最近更新 更多