我正在開發(fā)一個需要在 UI 菜單中使用大約 30 個按鈕的項目。這些按鈕中的每一個都有一個附加到它的“加載器”腳本,并且整個場景都有一個 GameManager 對象(它在場景中持續(xù)存在)。GameManager 持有一個枚舉,其命名狀態(tài)的數(shù)量等于按鈕的數(shù)量。這個想法是我需要根據(jù)按下的按鈕用特定內(nèi)容填充下一個場景,所以我想為這些按鈕中的每一個分配一個枚舉值,當點擊加載器腳本時,將更改 GameManager 的枚舉以等于按鈕的值。這樣我就可以避免制作 30 多個場景,而是根據(jù)狀態(tài)更改單個場景。當加載下一個場景時,它應(yīng)該確定當前狀態(tài)是什么,并根據(jù)它做一些事情。問題是,即使我能夠手動分配編輯器中每個單獨按鈕的枚舉值,這似乎實際上并沒有做任何事情。這是我的腳本(僅為相關(guān)方法縮寫),以及單擊按鈕時的示例輸出。這是我的游戲管理器:public class GameManager : MonoBehaviour {//Used so MenuContent scene knows what random content to populate with public enum MenuChosen{ Tabs, Formal, Casual, Headwear, Accessories, Speakers, ComputerParts, GameConsoles, MobilePhones, Furniture, Lighting, OfficeSupplies, Gadgets, Toys, Summer, SchoolSupplies, ArtsCrafts, Checking, Savings, PayPal, OtherAccount, Visa, MasterCard, AirMiles, OtherCards, Food, Retail, Digital, OtherCoupons, PayTransaction, ScheduledPayments, LoanPayment, MobileRecharge};public MenuChosen chosen;}這是我的 Loader 類。它附在每個按鈕上。在編輯器中,我選擇了四個按鈕,并通過檢查器中的下拉列表為每個按鈕手動將它們的狀態(tài)更改為“正式”、“休閑”、“頭飾”和“配飾”。Loader 類創(chuàng)建對 GameManager 對象的引用,并嘗試將其“選擇的”枚舉變量更改為等于在檢查器窗口中設(shè)置的值(在加載器中稱為“MenuOption”)。public class Loader : MonoBehaviour {public GameManager gm;public GameManager.MenuChosen MenuOption;private void Start(){ gm = GameObject.FindGameObjectWithTag("GameManager").GetComponent<GameManager>(); Debug.Log("Current Loader State: " + MenuOption);}public void LoadMenuContent(){ Debug.Log("Button's State is: " + MenuOption); gm.chosen = MenuOption; SceneManager.LoadScene("MenuContent"); Debug.Log("Current state is: " + gm.chosen);}}當我第一次運行游戲時,調(diào)試消息顯示按鈕的枚舉值確實發(fā)生了變化:Current Loader State: AccessoriesCurrent Loader State: HeadwearCurrent Loader State: FormalCurrent Loader State: Casual但是,在 LoadMenuContent() 方法中打印的日志顯示了一些不同的內(nèi)容:Button's State is: TabsCurrent state is: Tabs因此,即使它顯示按鈕的 MenuOption 已正確更改,一旦它到達按下按鈕時調(diào)用的 LoadMenuContent(),狀態(tài)就會以某種方式變回默認狀態(tài)“Tabs”。關(guān)于為什么枚舉可能會改變的任何想法?
1 回答

暮色呼如
TA貢獻1853條經(jīng)驗 獲得超9個贊
我發(fā)現(xiàn)我的問題是什么。
由于按鈕數(shù)量眾多,我不得不采取復制和粘貼的方式。
這意味著每個按鈕都是相同的,并且有自己的 Loader 腳本副本作為組件。通過這樣做,我能夠更改檢查器中每個單獨按鈕的枚舉的單獨值。
然而,這也意味著 OnClick() 方法中的每個按鈕都仍然持有對我復制和粘貼的原始按鈕的引用。所以這些按鈕是獨立的,但它們都引用了來自同一個按鈕的同一個腳本,其狀態(tài)從未從默認值改變過。
為了解決這個問題,我必須手動將每個按鈕拖入其自己的 OnClick() 方法中作為對自身的引用,以便他們從自己的單獨的 Loader 腳本中正確調(diào)用正確的函數(shù)。
- 1 回答
- 0 關(guān)注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消