# 2023/5/31 專題報告 ## 天氣難度作法 配合小孩的程度,能調整遊戲難度,根據現實世界天氣的變化,讓小孩能適應現實各種環境 ![](https://hackmd.io/_uploads/rynq5fQLn.png) ![](https://hackmd.io/_uploads/SkAp2zQI2.png) ![](https://hackmd.io/_uploads/HJXksfQ8h.png) ![](https://hackmd.io/_uploads/HyNG5GX82.png) ![](https://hackmd.io/_uploads/H1EmhGmL2.png) ![](https://hackmd.io/_uploads/By7O2f7I3.png) ## Thread 跟 Coroutine 處理畫面抖動的問題 ### Thread 與 Coroutine 的不同 Thread 和 Coroutine 都是實現異步操作的程式設計概念,但它們之間有幾個主要的不同之處: 1. 執行方式:Thread 是由作業系統負責調度的獨立程式,它運行在自己的獨立空間中。Coroutine 則是由程式碼主動控制的,它可以在同一 thread 內的不同區塊中進行切換。 2. 資源消耗:每個 Thread 都需要額外的資源來維護其執行狀態。相比之下,Coroutine 的資源消耗較低,因為它們在同一 Thread 中共享資源,並且切換開銷較小。 3. 同步處理:Thread 可以同時執行多個任務,每個任務都運行在獨立的程式中,可以實現真正的平行處理。Coroutine 則是基於協作式多工(Cooperative multitasking),需要在適當的時間點手動釋放控制權,才能切換到其他的 Coroutine。 Thread 提供了真正的平行處理能力,但使用多個 Thread 需要額外的資源,並且可能需要進行同步來確保資料一致性。Coroutine 則提供了一種輕量級的異步處理機制,並且在處理過程中更具有控制彈性。 ### 在 Unity 中的機制 在 Unity 裡是鼓勵使用 Coroutine ,也就是常見的 IEnumator 寫法,而這些 Coroutine 都是在 Main Thread 執行。 ![](https://hackmd.io/_uploads/Hy3f0z78h.png) [[Unity]利用C# Job System與Burst Compiler來解放CPU的效能 ]( https://medium.com/akatsuki-taiwan-technology/unity-%E5%88%A9%E7%94%A8c-job-system%E8%88%87burst-compiler%E4%BE%86%E8%A7%A3%E6%94%BEcpu%E7%9A%84%E6%95%88%E8%83%BD-c9447357a076) 而在這次 VR 專案中,由於不管是在更新麥克風收到的音訊資料、還是等待文字版內容傳回來的過程,如果都只在 Main Thread 傳遞的話,就容易發生遊戲 Lag 的情況,以這次的處理方式,是用 Thread 的 async 的方式讓程式再開一個 thread 去執行。