C# 它已经声明并可供您使用它指的是此脚本附加到的游戏对象。

C# 它已经声明并可供您使用它指的是此脚本附加到的游戏对象。,c#,unity3d,C#,Unity3d,事实上,现在你应该得到一个类似的警告: private GameObject gameObject; void Start() { gameObject = GameObject.Find("Doodler"); Debug.Log("START Found the Doodler: " + gameObject.GetInstanceID()); } private GameObject doodler; void Start() { doodler = Game

事实上,现在你应该得到一个类似的警告:

private GameObject gameObject;

void Start() {
    gameObject = GameObject.Find("Doodler");
    Debug.Log("START Found the Doodler: " + gameObject.GetInstanceID());
}
private GameObject doodler;

void Start() {
    doodler = GameObject.Find("Doodler");
    Debug.Log("START Found the Doodler: " + doodler.GetInstanceID());
}
严重性代码说明项目文件行抑制状态 警告CS0108“YourScript.gameObject”隐藏继承的成员 “Component.gameObject”。如果要隐藏,请使用新关键字

该做什么

当然,您可以使用
new
关键字将其隐藏并删除该警告:

private new GameObject gameObject;
不要那样做。不要将变量命名为“
gameObject
”,或从
monobhavior
类中已经使用的任何名称。使用此代码时,您将遇到许多问题。我已经看到了一些由此引起的问题,很难发现这就是问题所在。类似于下面的内容应该可以:

private GameObject doodler;

void Start()
{
    doodler = GameObject.Find("Doodler");
}

“但它似乎没有找到涂鸦者,因此”如果涂鸦者对象未激活,
GameObject.Find
无法找到它。如果它还不在场景中,
GameObject.Find
也找不到它。它是哪一个?它是在LateUpdate方法中找到的,但不是Start方法,所以我想知道DontDestroyOnLoad对象在新场景中何时可用。但是,看起来我已经按照上面的编辑进行了修复。我决定在您使用当前和旧代码更新问题后留下答案。请阅读,“但它似乎没有找到涂鸦者,因此”如果涂鸦者对象未激活,
GameObject.Find
无法找到它。如果它还不在场景中,
GameObject.Find
也找不到它。它是哪一个?它是在LateUpdate方法中找到的,但不是Start方法,所以我想知道DontDestroyOnLoad对象在新场景中何时可用。但是,看起来我已经按照上面的编辑进行了修复。我决定在您使用当前和旧代码更新问题后留下答案。请阅读。自从发布这篇文章以来,我实际上已经通过在Start方法之外初始化一个私有游戏对象,而不是在Start方法内进行初始化来修复它(请参阅我在文章中的编辑)。你知道我做这件事的两种方式有什么不同吗?我会将此更改为使用您提到的SceneManager.sceneLoaded方法-谢谢!事实上,我已经设法解决了这个问题,因为我发布了这篇文章,在Start方法之外初始化了一个私有的游戏对象,而不是在Start方法之内(请参阅我在文章中的编辑)。你知道我做这件事的两种方式有什么不同吗?我会将此更改为使用您提到的SceneManager.sceneLoaded方法-谢谢!我收到了警告,谢谢你解决了。我将更新问题以反映最终代码。为了澄清一下,当我在Start方法中定义游戏对象时,是否默认只在该方法的范围内?我是否可以添加“Public”以使其在最新更新中可见?1.可以。假设你做了
GameObject doodler=GameObject.Find(“doodler”)
Start
功能中,您只能在
Start
功能中使用它。事实上,
{…}
内的变量只能在该
{…}
内使用。我建议您阅读C#中的范围和声明以了解更多信息。2.您无需将其设置为公共的
即可在
最新更新中访问它。如果您想从另一个脚本访问它,或者如果您想在编辑器中显示它,以便您可以在运行时从编辑器中看到它的值,那么您可以将它设置为公共的然后在一个函数中初始化它,比如
void Start(){doodler=GameObject.Find(“doodler”);}
公共
private
protected
只用于从另一个脚本(而不是从这个脚本)确定该变量/函数的访问级别。这让它更清晰了,谢谢。我将在C#中查找范围和声明。我收到了这个警告,谢谢您解决它。我将更新问题以反映最终代码。为了澄清一下,当我在Start方法中定义游戏对象时,是否默认只在该方法的范围内?我是否可以添加“Public”以使其在最新更新中可见?1.可以。假设你做了
GameObject doodler=GameObject.Find(“doodler”)
Start
功能中,您只能在
Start
功能中使用它。事实上,
{…}
内的变量只能在该
{…}
内使用。我建议您阅读C#中的范围和声明以了解更多信息。2.您无需将其设置为公共的
即可在
最新更新中访问它。如果您想从另一个脚本访问它,或者如果您想在编辑器中显示它,以便您可以在运行时从编辑器中看到它的值,那么您可以将它设置为公共的然后在一个函数中初始化它,比如
void Start(){doodler=GameObject.Find(“doodler”);}
公共
private
protected
只用于从另一个脚本(而不是从这个脚本)确定该变量/函数的访问级别。这让它更清晰了,谢谢。我将在C#中查找范围和声明。
private GameObject doodler;

void Start() {
    doodler = GameObject.Find("Doodler");
    Debug.Log("START Found the Doodler: " + doodler.GetInstanceID());
}
private GameObject gameObject;

void Start() 
{
    gameObject = GameObject.Find("Doodler");
}
void LateUpdate () 
{
    if (gameObject.transform.position.y > transform.position.y) {...}
}
public GameObject gameObject { get; }
private new GameObject gameObject;
private GameObject doodler;

void Start()
{
    doodler = GameObject.Find("Doodler");
}