天天看點

《Unity 5.x遊戲開發實戰》一2.6 定時器和倒計時

本節書摘來異步社群《unity 5.x遊戲開發實戰》一書中的第2章,第2.6節,作者: alan thorn 譯者: 李華峰 責編: 胡俊英,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

現在已經擁有一個具備場景和金币的關卡了。憑借新添加進來的coin.cs腳本,現在的金币也可以被正常計數和采集了。不過對于玩家來說,現在的關卡中仍然沒有挑戰性,因為他們既赢不了,也輸不了。在這個遊戲中,玩家沒有需要達成的目标。是以時間限制也就成為了遊戲中的一個重要條件:它定義了玩家勝利和失敗的關鍵。也就是說,在遊戲時間結束前,玩家采集到了所有的金币,就可以看作玩家勝利;玩家沒有采集到所有的金币,則玩家失敗。是以需要為這個關卡建立一個倒計時的計數器。首先選擇菜單欄上的“gameobject | create empty”建立一個新的空遊戲對象,并為其起名為“level timer”,如圖2.25所示。

《Unity 5.x遊戲開發實戰》一2.6 定時器和倒計時
注意  記住,遊戲開始時,玩家是看不到任何空遊戲對象的,因為這些對象身上沒有任何的網格渲染元件。但是這些對象在用來建立一些不直接對應到實體的和可見實體上的功能和行為時,就顯得特别有用了,例如定時器、管理器和遊戲邏輯控制器之類。

接下來,建立一個名為“timer.cs”的新腳本檔案,然後将這個腳本添加到場景中的leveltimer 對象上。完成這個操作以後,在這個場景中,定時器就開始起作用了。不過需要确定的是,這個定時腳本僅僅被添加到了場景中的一個物體上,而不是多個物體上。否則,在同一場景中可能就會出現多個互相沖突的定時器。可以使用層次(hierarchy)面闆來查找整個場景中特定類型的元件。首先在層次(hierarchy)查找框中輸入“t:timer”,然後按下鍵盤上的Enter鍵開始查找。這樣将會查找到場景中所有帶有定時器類型元件的對象,并将在層次(hierarchy)面闆中顯示查找的結果。另外,在這個層次(hierarchy)面闆中隻會顯示比對的結果。在查找時輸入的“t”表示這次查找的條件是類型,如圖2.26所示。

《Unity 5.x遊戲開發實戰》一2.6 定時器和倒計時

如果在查找過程中停止這次查找,并傳回層次(hierarchy)面闆的初始狀态,則可以通過單擊查找對話框右側的“×”号圖示按鈕來實作。不過這個按鈕很難發現,如圖2.27所示。

《Unity 5.x遊戲開發實戰》一2.6 定時器和倒計時

如果希望timer腳本生效,那麼必須在裡面編寫相應的代碼。下面的代碼示例2.6給出了timer.cs中的完整代碼。如果讀者之前從未在unity中進行過系統的編碼,那麼這段代碼将會是非常有學習價值的。這段代碼給出了很多十分重要的特點,代碼中的注釋給出了詳細的說明。

現在對上面的代碼進行如下總結。

在unity中,将類變量聲明為公共變量(例如public float maxtime)之後,會作為一個可以編輯的字段顯示在object inspector處。雖然這并不支援所有的資料類型,但是卻是相當有用的一個功能。這意味着開發人員可以直接從inspector處監視公共變量的值,或者設定公共變量的值,而不是每次都要對代碼進行修改和編譯。預設情況下,在inspector處私有變量是看不到的。不過,如果需要,可以使用serializefield屬性強制使它們可見。如果私有變量前面加上了這個屬性,例如countdown變量,就會在不改變變量的作用範圍前提下,像一個公共變量一樣顯示在對象inspector中。

完成timer腳本的建立工作之後,在場景中選中leveltimer對象。從對象的檢查(inspector)面闆中就可以看到玩家在目前關卡完成任務所允許的最大時間限制(以秒為機關),如圖2.28所示。這裡将時間設定為60秒。這意味着玩家需要在關卡開始之後的60秒之内完成所有金币的采集工作。如果定時器中的時間耗盡,那麼這個關卡将會重新開機。

《Unity 5.x遊戲開發實戰》一2.6 定時器和倒計時

現在有了一個具備倒計時功能的完整關卡,可以完成金币的采集,而且定時器也可以耗盡時間。總的來說,現在的遊戲已經初具規模了,不過這裡還有一個更深入的問題,後面内容将進行講解。

繼續閱讀