我將單獨的腳本分開來管理unity3d中的用戶輸入,因此角色本身不一定由用戶輸入控制,也可以由AI進行控制。在unity3d更新之前閱讀用戶輸入
問題是:我想讓其他邏輯腳本讀取來自此腳本InputManager
的輸入,如InputManage ipt; ipt.walk ipt.jump
。我如何保證在其他更新之前更新輸入。
我將單獨的腳本分開來管理unity3d中的用戶輸入,因此角色本身不一定由用戶輸入控制,也可以由AI進行控制。在unity3d更新之前閱讀用戶輸入
問題是:我想讓其他邏輯腳本讀取來自此腳本InputManager
的輸入,如InputManage ipt; ipt.walk ipt.jump
。我如何保證在其他更新之前更新輸入。
一般來說是一件好事(和一個設計)的選擇,不要依賴腳本執行順序。
順便說一下,可以強制某些腳本以特定順序更新。你可以修改Edit->Project Settings->Script Execution Order。
讀輸入 - >更新(https://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.Update.html)
字符(和使用輸入其他腳本) - > LateUpdate(https://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.LateUpdate.html)
這確保了輸入被更新的字符或其它遊戲對象之前被處理。
我不認爲在LateUpdate中放置所有其他更新是個好主意。它不是爲了做這樣的事情而設計的。 – zoujyjs
是的,我發現。順便說一句:我已經看到你的個人資料,請注意你是網絡和unity3d的專家。所以我有一個使用unity3d設計的遊戲客戶端,並且我從服務器接收消息。當我收到一條消息時,我有一個Dispatcher在它的Update中處理消息,它首先看到消息的類型,並根據消息的類型將消息分派給一個合適的處理函數,如'handle_login' ,'handle_something'什麼都不是從'MonoBehaviour'派生的類中定義的。通常,我需要在處理程序中實例化一個新的GameObject。 – zoujyjs
但是'Handler'類包含的所有處理程序不是派生出來的'MonoBehaviour',我不能在其中實例化新的對象。如何在保持消息發送和處理框架的同時做到這一點? – zoujyjs
GameObject.Instantiate是一種靜態方法。你可以從一個不是MonoBehavior的類中調用它,不是嗎? – Heisenbug