C# 为什么编译器不能识别这个变量?

C# 为什么编译器不能识别这个变量?,c#,unity3d,C#,Unity3d,我正在Unity2D中制作一个简单的游戏,即使经过多次尝试,CS0120错误仍然会发生 我已经看过了一些教程/帮助,但是没有一个对我有真正的帮助,我不想把我的代码搞得更糟 //This is the one which I want to call the var from public class Terraform : MonoBehaviour { public int TerraformClick; void Start() { }

我正在Unity2D中制作一个简单的游戏,即使经过多次尝试,CS0120错误仍然会发生

我已经看过了一些教程/帮助,但是没有一个对我有真正的帮助,我不想把我的代码搞得更糟

//This is the one which I want to call the var from
public class Terraform : MonoBehaviour
{
    public int TerraformClick;

    void Start()
    {        
    }

    void Update()
    {
        if(Input.GetMouseButtonDown(1))
        {
            TerraformClick = 1;
        }
    }
}

//And this is the main script
public class Grass_Follow : MonoBehaviour
{    
    void Awake()
    {
        GameObject TerraformButt = GameObject.Find("Terraform");
        Terraform terraformScript = TerraformButt.GetComponent<Terraform>();  //finding the object            
    }

    void Update()
    {
        //probably some mistake in calling the variable
        if (Terraform.TerraformClick == 1)
        {
            Vector3 pz = 
                Camera.main.ScreenToWorldPoint(Input.mousePosition);
            pz.z = 0;
            transform.position = pz;
        }
        else
        {                    
        }                
    }   
}

我想这只是一个小小的错误,因为变量的位置/调用

你走对了方向。只是您必须在Awake函数之外声明“terraformScript”。您仍然可以在Awake函数内初始化它,但它应该在该函数外声明。这是因为您不希望该变量只存在于Awake函数中,是吗?不。您还希望您的更新功能也可以访问它。所以只需在脚本顶部声明它,这样所有函数都可以访问它。我们称这些变量为成员变量


Terraform.TerraformClick->TerraformClick。它是一个非静态的成员变量在随意尝试任何进一步的操作之前,请努力理解错误CS0120及其错误消息确切地告诉您哪些代码行有什么问题……它还可以帮助告诉我们整个编译器错误消息,而不仅仅是ID。
using UnityEngine;

public class Grass_Follow : MonoBehaviour
{        
    Terraform terraformScript; 

    void Awake()
    {
        GameObject TerraformButt = GameObject.Find("Terraform");
        terraformScript = TerraformButt.GetComponent<Terraform>();
    }

    void Update()
    {
        if (terraformScript.TerraformClick == 1)
        {
            Vector3 pz = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = pz;
        }
    }
}