Unity C# | 每禎時間Time.deltaTime & 基礎計時器

閱讀時間約 5 分鐘

前言

  最近正在思考,如何呈現Unity程式會比較適合我,我可以從最開始學習的角色移動與跳躍開始撰寫,然而會錯過目前研究的程式,這讓我兩頭燒,未來會變成「現在撰寫的程式」跟「文章更新的程式」,同步更新又會導致工作量極大。
  在遊戲程式,每一個遊戲程式會分開,不會全部聚集在一起,如同我前面提到的高內聚、低耦合,如果我介紹一項程式會需要一大堆程式配合,那這個程式就不是好程式了。
  之前也有提到,Unity C#是讓大概懂一些的程式新手更進一步的系列,如同今天介紹的基礎計時器,我希望在閱讀這篇文章時,不會有必須要參考之前文章的強迫性,屬於「可以參考之前的文章,但非必要。」的程度。

每禎時間:Time.deltaTime

  在Unity中,這項靜態浮點數的定義:
//Unity.Engine
//Time
public static float deltaTime;
  這項靜態浮點數會存取每一禎會消耗的時間,每一禎的時間都有些微不同,因此這個浮點數會持續改變,如果想要親眼看看,可以參考上一章的Debug.Log
然後在Update打出下列程式
Debug.Log(Time.deltaTime);

基礎計時器

  計時器製作分為為三部分,時間、限制。

時間

創造一個計時器變數,並讓初始值為零。
private float timer=0;
  讓計時器隨時間增加
void Update
{
  timer += Time.deltaTime;
}
  製作完成後,可以在上面加上Debug.Log(timer);
void Update
{
  timer += Time.deltaTime;
  Debug.Log(timer);
}
  用來確認時間是否正確增加

限制

  依照不同的使用需求,增加一個限制條件,譬如我希望子彈在兩秒鐘後發射出去,那就需要添加一個限制,在時間到達兩秒時會觸發。
  當我們在設計新程式的時候,會希望程式碼是易讀好理解的,所以請大膽的直接使用「不存在的變數」。
void Update
{
  timer += Time.deltaTime;
  if(timer > bulletCooldown)
  {
    timer = 0; //重置計時器
    //Debug.Log("時間重置");
  }
  //Debug.Log(timer);
}
//Debug.Log不要讓瘋狂出現的參數跟條件出現的參數同時跑,請則一。
  然後宣告不存在變數,讓他真的存在。
private float bulletCooldown=2; 
  這個動作有兩個好處,程式中的變數不會有「沒使用過」的變數,並且程式名稱相當直覺,除非你下意識用了A之類的代號類型變數。

客製化程式

  基礎的計時器如同上面這樣,然而依照不同的需求,會有不一樣的限制。

範例:「時間到了要停止」

  最直覺的想法是新增一個布林,直接添加限制進去。
void Update
{
  if(timerComplete)
  {
    timer = 0;
  }
  else
  {
    (計時器)
  }
}
  分析基礎計時器的運作
void Update
{
  ...(無論計時器運行與否,都會持續運作)
  if(timer > bulletCooldown)...(計時器停止條件)
  ...(無論計時器運行與否,都會持續運作)
}
  分析問題,「時間到了要停止」相當於「時間停止前要計時」,所以把進行計時的算式移動到條件中,加上else就可以了,
void Update
{
  ...(無論計時器運行與否,都會持續運作)

  if(timer > bulletCooldown)...(計時器限制時會運作)
  {}else...(計時器限制之前會運作)
  { 
    timer += Time.deltaTime;
  }
    
  ...(無論計時器運行與否,都會持續運作)
}

補充:計時器的使用方式

  計時器製作出來了,我想有些人會直接繼續修改這個計時器,完成原本他要解決的問題,然而這會導致這個計時器變得很長,易讀性下降,變相的增加維護難度。
  更好的做法,是創造一個函式,譬如說
private void keepEnemyRelease()
{
  .......
  Debug.Log("敵人釋放");
}
  將新製作的函式放到計時器中,這樣計時器會簡潔很多
void Update
{
  if(timerComplete)...(如果時間完成)
  if(timer > bulletCooldown)
  {...(計時器限制時會運作)}else...(計時器限制之前會運作)
  {
    timer += Time.deltaTime;
    keepEnemyRelease();
  }
  ...(無論計時器運行與否,都會持續運作)
}

結尾

  計時器是一個相當重要的程式內容,幾乎每款遊戲都會使用到時間,像是冷卻時間、攻擊間隔、血量恢復等等,而從基本的計時器就能產生相當多的變化。
  在撰寫這篇文章時,我原本以為撰寫計時器會很快速,結果在客製化程式的部分我出了問題,這也讓我對計時器製作的理解更深,每當我學會一個新的程式時,在撰寫文章的時候,我能學到更多。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
105會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
撰寫程式,如何命名很重要,本文舉例了兩種廣泛使用的命名法則,同時收錄了好程式的判斷依據和減少資源浪費的撰寫方式。
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
撰寫程式,如何命名很重要,本文舉例了兩種廣泛使用的命名法則,同時收錄了好程式的判斷依據和減少資源浪費的撰寫方式。
你可能也想看
Google News 追蹤
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!