老實說,根據我無法分辨的檔案,但應該GetComponent<T>()在場景中的所有物件中搜索組件?<name>Publisher我有一個 pub/sub 設定,并且在一個名為ie WorldPublisher\的場景中有各種 EmptyObjects PlayerPublisher,我可以在其中附加各種需要的發布者。
我的想法是我可以打電話GetComponent<KeyBindingPublisher>(),這會回傳那個腳本。但是,我得到一個空值,所以它似乎無法從玩家 GameObject 中找到它。
我不想將 pub/sub 都附加到感覺過于緊密耦合的玩家 GameObject 上。
我目前正在這樣做:
GameObject playerEvents = GameObject.Find("PlayerPublishers");
KeyBindingPublisher keyBindingPublisher = playerEvents.GetComponent<KeyBindingPublisher>();
這似乎確實有效,但這似乎將訂閱者腳本和我試圖避免的 UI 緊密結合在一起。我可能不需要放置一個PlayerPublishers物件,所以只想在不知道所有物件的情況下獲得腳本的參考。
uj5u.com熱心網友回復:
當您呼叫GameObject.GetComponent時,它將搜索附加到您呼叫它的特定 GameObject 的匹配組件。如果您想在搜索中包含其他游戲物件,您有幾個選項:
GameObject.GetComponentInChildren將搜索該游戲物件及其所有子物件。GameObject.GetComponentInParent將搜索該游戲物件及其所有父物件。Object.FindObjectOfType將搜索所有加載的 Unity 物件。
如果您正在搜索多個物件,則有類似的函式會回傳匹配陣列。
正如您可能想象的那樣,廣撒網可能會對性能產生影響。理想情況下,搜索整個場景應該保持在最低限度。
如果您正在尋找KeyBindingPublisher其他腳本可以在所有場景中參考的一個實體,您可能會研究一種稱為單例的設計模式。這是來自 GameDev Stack Exchange 的示例,其中包含一些用于在 Unity3D 中實作此目的的代碼示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/449569.html
上一篇:VisualStudio2022git錯誤無法與{0}埠{1}協商:找不到匹配的主機密鑰型別。他們的提議:ssh-rsa
下一篇:將透視腳本更改為正交統一2d
