首页 > 解决方案 > 非静态字段方法或属性统一“Game.Open”需要对象引用

问题描述

你好如何在不使用静态的情况下使用该字段?我不能在静态中使用“this”,但是当我删除“this”时,我遇到了以下问题:非静态字段方法或属性统一“Game.Open”需要对象引用

private bool Open;
    // Token: 0x06001748 RID: 5960
    public static void Menu()
    {

            if (SceneManager.GetActiveScene().name == "MainMenu")
            {

                        if (Open)
                        {
                            Open = true;
                        }
                        else
                        {
                            Open = false;

                        }
            }
    }

标签: c#unity3d

解决方案


简介:private static bool Open;<-静态方法的静态变量

你的方法是静态的(属于类,只有一个)。你的变量不是(属于的对象可以有很多):。
只有一个菜单(我猜)所以把变量放在静态。(并避免整个if反模式)。那样可以么 :

private static bool Open;

// Token: 0x06001748 RID: 5960
public static void Menu(){
       if (SceneManager.GetActiveScene().name != "MainMenu"){return;}

       if (Open){Open = true;}
       else{Open = false;} 
}

见这里:https ://syntaxdb.com/ref/csharp/static-methods
Static methods are called without instantiation. This means that static methods can only access other static members of the class (and of course, global and passed in variables), because other members are object members.


推荐阅读