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

时间:2018-06-22 20:13:19

标签: c# unity3d enums

我正在从事一个项目,该项目在UI菜单中需要大约30个按钮。这些按钮中的每个按钮都附加有一个“加载程序”脚本,并且整个场景都有一个GameManager对象(该对象在场景中持续存在)。

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

这个想法是我需要根据按下的按钮填充特定内容的下一个场景,因此我想为这些按钮中的每个按钮分配一个枚举值,当单击Loader脚本时,GameManager的枚举将更改为等于该按钮的枚举。值。这样,我可以避免制作30个以上的场景,而是根据状态更改单个场景。当加载下一个场景时,它应该确定当前状态是什么,并根据该状态进行处理。

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

这是我的GameManager:

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”)中设置的值。 / p>

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”。 / p>

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

1 个答案:

答案 0 :(得分:0)

我发现了我的问题所在。

由于按钮数量众多,我不得不复制并粘贴它们。

这意味着每个按钮都是相同的,并且具有自己的Loader脚本副本作为组件。这样,我就可以更改检查器中每个按钮的枚举的各个值。

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

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