我遇到了一些邏輯問題和遊戲中發生的行爲。Unity,加電碰撞問題
我想實現一個加電,這個加電只是停止那個字符一段時間。所以要做到這一點,我只是禁用他的劇本,所以他什麼都不做。現在這是行得通的,但問題是我找不到一種方法在5秒後啓用腳本。我想停止角色2秒。
我遇到了一些邏輯問題和遊戲中發生的行爲。Unity,加電碰撞問題
我想實現一個加電,這個加電只是停止那個字符一段時間。所以要做到這一點,我只是禁用他的劇本,所以他什麼都不做。現在這是行得通的,但問題是我找不到一種方法在5秒後啓用腳本。我想停止角色2秒。
你的代碼是錯誤的。你應該使用Invoke
。
它非常簡單。
喜歡的東西...
void ApplyPenalty()
{
yourPauseSystem = true;
Debug.Log("starting penalty..");
Invoke("EndPenalty", 5f);
}
void EndPenalty()
{
yourPauseSystem = false;
Debug.Log(" ...ended penalty");
}
不要忘記的Debug.Log
語句。
注意,最好ApplyPenalty
(和EndPenalty)應
實際上將該代碼放在這些遊戲對象上,而不是在「碰撞對象代碼」中。你懂了?
所以你的情況,適用的刑罰,它會是這樣的..
void OnCollisionEnter(Collision c)
{
if ((c.gameObject.tag == "Character"))
c.GetComponent<YourHerosCode?().ApplyPenalty()
}
你看到了什麼?
您必須使用物理圖層系統。你真的不得不用它來在Unity中發生衝突。您必須使用「物理網格」 ......
指出哪些可以用哪些碰撞。在你的評論中,你說他們「不會碰撞」,但是你絕對可以使任何東西碰撞(或不碰撞)。
請注意,在實踐中,一切都需要它自己的物理層,在Unity中。
當然你的英雄,敵人等都會有自己的圖層。提示:當然「敵方射彈」和「玩家射彈」需要它們自己的獨立層,兩者都需要。
如果NullReference位於此行gameObject.GetComponent<PlayerControls>().enabled = true;
可能是因爲您嘗試引用禁用組件。
嘗試在啓動()的一個變種指定給組件
var playerController = gameObject.GetComponent<PlayerControls>();
,然後用它來指代它並啓用/禁用:
playerController.enable = true; //or false
好的,但你應該按照我說的做:)我的朋友的關鍵是(見編輯)你的「懲罰」代碼應該是「在」英雄 - 你知道我的意思嗎?你需要將代碼移動到你的英雄,你看到了嗎? – Fattie
夠公平的。開始玩樂! – Fattie
你絕對不得不使用圖層,我的朋友!必須的。物理層。 – Fattie