C# CS0120非静态字段需要对象引用

C# CS0120非静态字段需要对象引用,c#,unity3d,C#,Unity3d,我知道这是问了很多,但它是一个非常广泛的错误,所以我需要一些帮助,如何使我的矢量3静态 void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Grid.GridScan(transform.position); } } 从这里调用“GridScan”: public void GridScan(Vector3 worldposition)

我知道这是问了很多,但它是一个非常广泛的错误,所以我需要一些帮助,如何使我的矢量3静态

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Grid.GridScan(transform.position);
        }

    }
从这里调用“GridScan”:

 public void GridScan(Vector3 worldposition)
    {
        Debug.Log(GetValue(worldposition));
        if ((GetValue(worldposition)) == 100)
        {
            if (Neighbours(worldposition, 2) < 2)
            {
                SetValue(worldposition, 0);
            }
            if ((Neighbours(worldposition, 2)) > 3) 
            {
                SetValue(worldposition, 0);
            }
        }

        if ((GetValue(worldposition)) == 0)
        {
            if (Neighbours(worldposition, 2) == 3)
            {
                SetValue(worldposition, 100);
            }
        }
    }
public void GridScan(Vector3 worldposition)
{
Log(GetValue(worldposition));
如果((GetValue(worldposition))==100)
{
if(邻居(世界位置,2)<2)
{
设置值(世界位置,0);
}
如果((邻居(世界排名,2))>3)
{
设置值(世界位置,0);
}
}
如果((GetValue(worldposition))==0)
{
if(邻居(世界位置,2)==3)
{
设定值(世界位置,100);
}
}
}

第一个代码和“Grid.GridScan(Vector3)”的错误。第一个代码在创建时附加到许多游戏对象。如何使vector3(transform.position)保持静态?

错误是因为GridScan方法不是静态的,您需要在特定的网格上调用它。您可以添加使其成为静态的


或者,您可以将网格设置为单例,这意味着具有指向当前网格的静态属性。在Unity中,您还可以使用在场景中搜索它,但是这是一个昂贵的操作。它必须遍历场景中的所有对象才能找到脚本,这比获取静态属性要昂贵得多。

Grid
所属类的实例吗?
public static void GridScan
?John,Grid是包含函数Gridscan的脚本。静态修饰符不起作用,因为函数Gridscan使用其他非静态变量和需要保持非静态的函数。在这种情况下,单例是否有效?是的,所以在网格内部,您可以创建一个静态
当前
网格变量。在网格的唤醒或合一中,您分配它,并在其他任何地方使用它。这是一种可接受的方法,当您有一种类型的组件,您想在许多不同的地方使用。感谢您这么快回复,我是非常新的,非常感谢。我现在使用什么样的变量(int,float)?有很多文章比我解释得更好,例如:静态变量应该是网格,你用它来获得场景中的一个网格。所以类型应该是Grid。