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");
}