编辑器中设置的枚举值在脚本中未更改

我正在开发一个需要在 UI 菜单中使用大约 30 个按钮的项目。这些按钮中的每一个都有一个附加到它的“加载器”脚本,并且整个场景都有一个 GameManager 对象(它在场景中持续存在)。


GameManager 持有一个枚举,其命名状态的数量等于按钮的数量。


这个想法是我需要根据按下的按钮用特定内容填充下一个场景,所以我想为这些按钮中的每一个分配一个枚举值,当点击加载器脚本时,将更改 GameManager 的枚举以等于按钮的值。这样我就可以避免制作 30 多个场景,而是根据状态更改单个场景。当加载下一个场景时,它应该确定当前状态是什么,并根据它做一些事情。


问题是,即使我能够手动分配编辑器中每个单独按钮的枚举值,这似乎实际上并没有做任何事情。这是我的脚本(仅为相关方法缩写),以及单击按钮时的示例输出。


这是我的游戏管理器:


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 类。它附在每个按钮上。在编辑器中,我选择了四个按钮,并通过检查器中的下拉列表为每个按钮手动将它们的状态更改为“正式”、“休闲”、“头饰”和“配饰”。


Loader 类创建对 GameManager 对象的引用,并尝试将其“选择的”枚举变量更改为等于在检查器窗口中设置的值(在加载器中称为“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);

}

}

当我第一次运行游戏时,调试消息显示按钮的枚举值确实发生了变化:


Current Loader State: Accessories

Current Loader State: Headwear

Current Loader State: Formal

Current Loader State: Casual

但是,在 LoadMenuContent() 方法中打印的日志显示了一些不同的内容:


Button's State is: Tabs

Current state is: Tabs

因此,即使它显示按钮的 MenuOption 已正确更改,一旦它到达按下按钮时调用的 LoadMenuContent(),状态就会以某种方式变回默认状态“Tabs”。


关于为什么枚举可能会改变的任何想法?


蓝山帝景
浏览 183回答 1
1回答

暮色呼如

我发现我的问题是什么。由于按钮数量众多,我不得不采取复制和粘贴的方式。这意味着每个按钮都是相同的,并且有自己的 Loader 脚本副本作为组件。通过这样做,我能够更改检查器中每个单独按钮的枚举的单独值。然而,这也意味着 OnClick() 方法中的每个按钮都仍然持有对我复制和粘贴的原始按钮的引用。所以这些按钮是独立的,但它们都引用了来自同一个按钮的同一个脚本,其状态从未从默认值改变过。为了解决这个问题,我必须手动将每个按钮拖入其自己的 OnClick() 方法中作为对自身的引用,以便他们从自己的单独的 Loader 脚本中正确调用正确的函数。
打开App,查看更多内容
随时随地看视频慕课网APP