Unity C# | Async / Await

更新於 發佈於 閱讀時間約 3 分鐘

一、前言

  這篇文章將會快速介紹非同步函式(Async / Await)的簡易使用方式。

二、非同步函式 (Async / Await)

  有一位讀者跟我分享,業界逐漸使用 Async 逐漸取代 Coroutine,在研究後我打算分享一個簡易的撰寫方式。

《Unity C# | Async / Await (Show in 20 seconds)》

a. 程式碼一覽

raw-image

  上面這張圖,是我想辦法在10行程式碼中呈現非同步函式的用法。

b. 特色介紹

  接下來簡單介紹非同步函式的特色,這是之前研究的成果,詳情可以參考下面這篇文章的留言,這邊摘錄其中我研究後,認為非同步函式擁有的特色。

《Unity C# | 協程(Coroutine)的概念、使用及應用》

1. Async 比 Coroutine 的可讀性高。

2. Async 比 Coroutine 的步驟簡單。

3. Async 可以在物件銷毀後繼續計算。

4. Async 不可以中斷,如果要中斷會一次中斷所有Task。

三、應用步驟

  這邊會簡述使用的流程步驟。

a. Using System.threading.Tasks

  就像使用「Unity Engine.UI」或「TMP.pro」一樣,請直接在最上面灰色地區打上 「Using System.threading.Tasks」。

b. 建立 Async 資料類型的函式

  創建一個 void 函式,並且在 void 的前面添加上「Async」,讓這個函式從普通的不回傳函式轉換成非同步函式。

c. 使用 Await 類別

  其中,非同步函式一定要有一個 Await ,所以請在函式中使用 await 中的函式,譬如本文示範的延遲(Delay),其他可以自行探索;延遲的單位式毫秒,因此如果希望延遲一秒鐘,請撰寫Delay(1000)。

d. 完成

  這樣就完成了;如果希望重複,可以考慮使用 for 迴圈或 While 迴圈。

三、後記

  作為重新寫文章的第一篇,我打算用最精簡的文字介紹非同步函式,結果我發現這樣效果很不錯,能快速理解非同步函式的特色與應用。





















留言
avatar-img
留言分享你的想法!
原來方格子對程式碼分享比較不友善這塊是我以前沒注意到的,還是依你的規畫為主吧~你其他篇文章也是蠻吸引人的另外關於"公告現實相關的事情會擔心暴露個資",就看你的考量了我自己是覺得"自我行銷"這塊在現在也是蠻重要的一環,空有技術但無法讓別人理解你做了什麼是蠻可惜的。所以我覺得公告現實相關的事情在現代的風氣應該是還好XD舉個比較有感(老)的例子,以前youtuber都不願露臉,拍攝不是戴面具就是頸部以下,但現在都一一出櫃(?)了,而且還可以斜槓到其他領域,上節目或者是feat其他人的頻道之類的所以我覺得適時透漏自己的行程或計畫讓更多人參予可能也不是壞事,甚至讓我們(讀者)縮短與作者的距離感,增加面對面反饋的機會。再說顧展的人不是都輪替的嗎XD誰知道哪個同學是瓶裝雪
瓶裝雪-avatar-img
發文者
2023/05/20
泡芙爸爸(泡芙爸爸) 欸幹,最後那句好有道理你這樣一說,感覺的確是可以透露一些資訊,至少在一些遊戲開發者聚會的活動上能知道我會出現,這樣的做法應該不錯...嗎?不過我顧展其實打算都在攤位上,沒什麼打算到處亂跑,因為我記得顧展對於個人發展有超級重要的意義?
居然特地寫了一篇回應我,真是受寵若驚><其實我也是第一次在網路上回應別人的文章主要是覺得看到你還在大學時期就這麼積極把自己所學的事情記錄下來然後看你的文章也讓我想到以前的自己(畢竟經歷類似,但你肯定是比我更有想法跟執行力所以忍不住想留言鼓勵你,跟你表示文章還是有人在關注的~不好意思說了這麼多跟這篇文章沒有相關的回覆---------------------------------------------------------------以下正是針對這篇文章做回覆><讀完文章後,第一直覺是為什麼你在後記提到你打算用"最精簡的文字介紹"可能我中間有漏追蹤的,但是我覺得這篇可能對於Async / Await並沒有像之前Coroutine講解的這麼完整(對我來說,直接的感受是可能對這個主題比較沒有愛)雖然你有寫到一些你認為"非同步函式擁有的特色",但我讀這篇文章,我會預期想看到這些點具體讓你感受到的點,或是程式碼的編寫上實際的例子我不確定你這篇文章的出發點是想寫給"我"或者是"知道怎麼寫Async / Await的人",所以沒有像Coroutine有"基本介紹"或"實際應用"我個人是覺得有點可惜,但以上都是個人觀點,可能你有其他考量,對我的回覆也可以不用太放在心上-------------------------------------------------------如果以後有作品參展或擺攤,一定要公告一下,我會去現場支持你的~
瓶裝雪-avatar-img
發文者
2023/05/11
泡芙爸爸(泡芙爸爸) 我有在之前那篇留言回覆,並詢問一些事情XD其實我也想過要不要寫更多程式碼編寫的案例,不過因為我自己也只是初步使用,所以就直接把過程寫成文章了。至於出發點,其實只是單純的「我嘗試使用了...就寫成文章好了」的感覺,並沒有特別去介紹,主要是沒什麼時間。(學校最近東西很多)範例的話...主要是方格子雖然有程式碼的區塊,但是不適合轉載到巴哈姆特與痞客邦,要再重新加工一次,會花很多時間,所以我通常會避免寫程式碼,也許這次用截圖的方式可以多嘗試看看...?我以前對於公告現實相關的事情會擔心暴露個資,不過現在感覺還好?目前確定會有的展覽應該是畢業製作的作品,會在新一代展出,預計是第三人稱射擊遊戲,感謝你提醒了我,到時候我會再公告出來的!
avatar-img
瓶裝雪的沙龍
108會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
瓶裝雪的沙龍的其他內容
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
Thumbnail
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
Thumbnail
歡迎來到 React 白話文運動第三篇,今天我們將深入探討 JavaScript 中的非同步操作,並介紹兩個重要的關鍵字:Async 與 Await。在這篇文章中,我們將透過實例演示非同步操作的概念,以及如何使用 Promise、Fetch、Async 和 Await 來更有效地處理非同步程式。
Thumbnail
歡迎來到 React 白話文運動第三篇,今天我們將深入探討 JavaScript 中的非同步操作,並介紹兩個重要的關鍵字:Async 與 Await。在這篇文章中,我們將透過實例演示非同步操作的概念,以及如何使用 Promise、Fetch、Async 和 Await 來更有效地處理非同步程式。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
執行以上程式碼,然後看到了這個結果: 為什麼「延遲0秒」的函式寫在上方,但在console印出的結果,它還是被排在第二順位? 利用AC教材提供的youtube演講連結一窺究竟: 演講提供了更多JS的細節概念,身為JS新手的我還在消化,但若針對教案提出的問題來回答,加上利用google大神查到MDN的
Thumbnail
執行以上程式碼,然後看到了這個結果: 為什麼「延遲0秒」的函式寫在上方,但在console印出的結果,它還是被排在第二順位? 利用AC教材提供的youtube演講連結一窺究竟: 演講提供了更多JS的細節概念,身為JS新手的我還在消化,但若針對教案提出的問題來回答,加上利用google大神查到MDN的
Thumbnail
介紹 委派的非同步方法 可以透過BeginInvoke執行委派的非同步方法 Action<T>.BeginInvoke(<T> obj,AsyncCallback callback,Object @object) 第一個內容的 obj,只的是要傳入acction委派的參數 第二個AsyncCallb
Thumbnail
介紹 委派的非同步方法 可以透過BeginInvoke執行委派的非同步方法 Action<T>.BeginInvoke(<T> obj,AsyncCallback callback,Object @object) 第一個內容的 obj,只的是要傳入acction委派的參數 第二個AsyncCallb
Thumbnail
介紹 📷 定義 處理序(Process) (大陸:進程): 一個程序運行時,占用全部計算資源的總和 執行緒(Thread) (大陸:線程):是作業系統能夠進行運算排程的最小單位。 大部分情況下,它被包含在行程之中,是行程中的實際運作單位。 C#多線程和異步(一)——基本概念和使用方法 執行緒帶來的
Thumbnail
介紹 📷 定義 處理序(Process) (大陸:進程): 一個程序運行時,占用全部計算資源的總和 執行緒(Thread) (大陸:線程):是作業系統能夠進行運算排程的最小單位。 大部分情況下,它被包含在行程之中,是行程中的實際運作單位。 C#多線程和異步(一)——基本概念和使用方法 執行緒帶來的
Thumbnail
前言 這是第一次寫技術文章,但其實應該也只能說是蒐集很多資料並學習如何透過自己的話解釋的內容,並不能像其他大神可能分享一些很酷的技術,目標就單純是為了完成最後一週的作業(如下)。 走入非同步之前 執行環境(Execution Context) 執行環境堆疊 (Execution stack)
Thumbnail
前言 這是第一次寫技術文章,但其實應該也只能說是蒐集很多資料並學習如何透過自己的話解釋的內容,並不能像其他大神可能分享一些很酷的技術,目標就單純是為了完成最後一週的作業(如下)。 走入非同步之前 執行環境(Execution Context) 執行環境堆疊 (Execution stack)
Thumbnail
  本篇文章將會告訴你延時方法的呼叫方式,Invoke是一種讓函式(function)延時啟動的官方函式,通常用於延後幾秒鐘啟動或用InvokeRepeating定時啟動函式,遊戲中常用於怪物的定時召喚或延遲觸發機關等。
Thumbnail
  本篇文章將會告訴你延時方法的呼叫方式,Invoke是一種讓函式(function)延時啟動的官方函式,通常用於延後幾秒鐘啟動或用InvokeRepeating定時啟動函式,遊戲中常用於怪物的定時召喚或延遲觸發機關等。
Thumbnail
上篇介紹的promise chain的寫法,是已經比原本好維護了沒錯,但是可讀性似乎還是有點不足,其實還可以改成用async/await的寫法,如下: E 其中,async是非同步的意思,等於是把getData()這個function定義為非同步,因此從console可以看到,test是最先被pri
Thumbnail
上篇介紹的promise chain的寫法,是已經比原本好維護了沒錯,但是可讀性似乎還是有點不足,其實還可以改成用async/await的寫法,如下: E 其中,async是非同步的意思,等於是把getData()這個function定義為非同步,因此從console可以看到,test是最先被pri
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News