2 回答

TA貢獻1770條經驗 獲得超3個贊
你已經完成了async整個Update()方法。
async void Update()
{//whatever needs to be done in a frame}
渲染Update方法異步運行,這樣 Unity 就不會等待它返回就繼續執行。它繼續調用Update()所有其他對象,執行其操作,渲染幀,直到async void Update()在同一對象上的下一幀上達到相同的效果。所以,它可以反應
if (Input.GetKey(KeyCode.A))
{
player.transform.Translate(new Vector3(-1,0,0) * Time.deltaTime);
}
在后一幀上,即使前一幀Update()正在等待await Task.Delay(3000). 這就是您獲得結果的原因。
順便說一句,async void Update()恕我直言,這是一個壞主意,因為當各種Update()方法在意外的時間返回不同的值并在意外的時間修改變量時,您會得到意外的結果。我會保持Update()同步,并最終讓它調用一個async可以滿足您需要的方法。

TA貢獻1845條經驗 獲得超8個贊
異步編程并使用基于任務的異步模式 (TAP)
基于 .NET 任務的異步模型由 Task 和 Task 類型以及 C# 中的 async 和await 關鍵字公開
我意識到理解這些文檔并不總是那么容易;所以基本上發生的情況是,當您await
在方法中時,返回值在調用中“保留”?await Update()
。一旦等待完成,調用者將收到該值,這將在調用樹中向上級聯。
重要的是每個單獨的方法調用都變得異步。我認為它就像你給員工的工作卡。你可以不斷地給他們新卡,每次他們完成工作時,他們都會把卡還給你,你就做你必須做的事。員工可能會選擇先做簡單的事情,這樣您很可能會以不同的順序取回卡片,但這并不重要。
- 2 回答
- 0 關注
- 254 瀏覽
添加回答
舉報