为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
蓝山帝景 2021-08-29 17:53:18
我正在开发一个需要在 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: AccessoriesCurrent Loader State: HeadwearCurrent Loader State: FormalCurrent Loader State: Casual但是,在 LoadMenuContent() 方法中打印的日志显示了一些不同的内容:Button's State is: TabsCurrent state is: Tabs因此,即使它显示按钮的 MenuOption 已正确更改,一旦它到达按下按钮时调用的 LoadMenuContent(),状态就会以某种方式变回默认状态“Tabs”。关于为什么枚举可能会改变的任何想法?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

我发现我的问题是什么。

由于按钮数量众多,我不得不采取复制和粘贴的方式。

这意味着每个按钮都是相同的,并且有自己的 Loader 脚本副本作为组件。通过这样做,我能够更改检查器中每个单独按钮的枚举的单独值。

然而,这也意味着 OnClick() 方法中的每个按钮都仍然持有对我复制和粘贴的原始按钮的引用。所以这些按钮是独立的,但它们都引用了来自同一个按钮的同一个脚本,其状态从未从默认值改变过。

为了解决这个问题,我必须手动将每个按钮拖入其自己的 OnClick() 方法中作为对自身的引用,以便他们从自己单独的 Loader 脚本中正确调用正确的函数。


查看完整回答
反对 回复 2021-08-29
  • 1 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信