簡體   English   中英

Unity 3D在GameOver上停止物理

[英]Unity 3D stop physics on GameOver

我的比賽得分很高。 它還具有多個游戲對象,在發生碰撞時,其int得分為+ = 10。 得分腳本已附加到所有這些游戲對象上。

游戲對象會在隨機的時間間隔上施加力。 該力使它們向右移動,然后停止。 播放器有一個時間表,可以在其中單擊對象。 如果玩家及時單擊,該對象將向左推進,並因碰撞事件而停止,該碰撞事件會使得分增加+10。 如果該時間段到期,則無論如何游戲對象都會向左施加力,但這會導致游戲在文本上實例化。

假設單擊時間范圍在播放器可以單擊之前到期。 游戲對象被向左推動,並且由於計時器而不是玩家的點擊導致了這種推動,所以GameOver發生了,這只是實例化了GameOver文本。

**這里是問題。**由於得分腳本已附加到所有這些游戲對象上,因此假設對象1超時並導致游戲結束,則對象2到10與對象1在同一計時器上,並且仍將向左推超時。 此外,玩家仍可以單擊它們並在游戲結束后繼續玩游戲。

我的問題是,如何阻止這些游戲對象繼續游戲?

我不能禁用對撞機或破壞剛體。 在GameOver上使推力= 0起作用,但是僅在其他9個游戲對象超時並被踢一次之后才可以。 我無法使int score = 0,因為我想顯示最終分數。 由於相同的原因,我無法銷毀分數。 出隊什么也沒做,只會重新啟動計時器。

我只需要分數即可停止在GameOver上增加。 如果我還可以停止其他9個游戲對象的物理操作,那也將是一件好事。

希望我提供了足夠的信息以獲取反饋。

謝謝

您可以通過將timescale設置為0來停止物理:

當timeScale設置為零時,如果所有功能均與幀頻無關,則游戲基本上會暫停

當timeScale設置為零時,將不會調用FixedUpdate函數

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

其他選項:-可以將物理對象的剛體設置為[x]運動學,因此它們將停止-使布爾值gameover-variable超時后將其設置為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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM