---
# System prepended metadata

title: 2023/5/31 專題報告

---

# 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 去執行。