【问题标题】:Enum Value Set in Editor Not Changing in Script编辑器中设置的枚举值未在脚本中更改
【发布时间】:2018-06-23 05:19:40
【问题描述】:

我正在开发一个需要在 UI 菜单中使用大约 30 个按钮的项目。这些按钮中的每一个都附加了一个“Loader”脚本,并且整个场景都有一个 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”。

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

【问题讨论】:

    标签: c# unity3d enums


    【解决方案1】:

    我发现了我的问题所在。

    由于按钮数量众多,我只好复制粘贴。

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

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

    为了解决这个问题,我不得不手动将每个按钮拖到其自己的 OnClick() 方法中作为对自身的引用,因此他们从自己的中正确调用了正确的函数单独的加载程序脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2022-09-27
      • 2013-03-18
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多