Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity 3D停止GameOver上的物理_C#_Unity3d - Fatal编程技术网

C# Unity 3D停止GameOver上的物理

C# Unity 3D停止GameOver上的物理,c#,unity3d,C#,Unity3d,我的比赛有分数。它还有多个游戏对象,在碰撞时,+=10到整数的分数。分数脚本附加到所有这些游戏对象 游戏对象以随机时间间隔对其施加力。这个力使它们向右移动,然后它们停止。玩家有一个时间范围,在这个时间范围内他们可以点击这个对象。如果玩家及时点击,物体将被向左推进,并因碰撞事件而停止,该事件会使分数增加+10。如果该时间段过期,游戏对象将在左方向上施加一个力,但这会导致在文本上实例化游戏 假设在玩家可以单击之前,单击的时间段过期。游戏对象向左推进,由于计时器而不是玩家的点击导致了这种推进,Game

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

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

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

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

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

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

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

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


谢谢

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

当timeScale设置为零时,如果所有函数都与帧速率无关,则游戏基本暂停

当时间刻度设置为零时,不会调用FixeUpdate函数

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

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

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

GameObjects[]ObjectsToFreeze=GameObject.FindGameObjectsWithTag(“对象”)
foreach(objectsToFreeze中的gameobjectobj)
{
obj.getcomponent().constraints=RigidbodyConstraints2D.FreezeAll;
}

也许你可以发布导致问题出现的“分数脚本”,因为你不想在
GameOver
发生时增加分数。好的,我回家后会发布。很好,很难想象你在那里遇到了什么,更难提出任何解决方案。
GameObjects[] ObjectsToFreeze = GameObject.FindGameObjectsWithTag("object")

foreach(gameobject obj in objectsToFreeze)

{

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

}