[英]GetComponent function returning null
我正在使用C#在Unity 2017中开发一个简单的游戏。
在我的关卡菜单中,我有一个Text对象,其中包含一个按钮组件,并附有一个脚本。
这是目前脚本中的内容:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LevelLock : MonoBehaviour {
public bool isLocked = true;
private Button lvlBtn;
// Use this for initialization
void Start () {
lvlBtn = GetComponent<Button> ();
if (lvlBtn != null) {
Debug.Log ("this should be working");
} else {
Debug.Log ("you did something wrong");
}
//if(isLocked){
// lvlBtn.enabled = false;
//}
}
}
问题是, GetComponent<Button>()
返回null
,这意味着它没有在对象中找到按钮组件。
我尝试添加Animator组件并执行相同的操作只是为了检查它确实有效,所以我不知道为什么它不应该找到按钮组件。 如果有人可以帮忙解决这个问题,或者向我指出我做错了什么,我会非常感激
编辑 :
检查员标签:
控制台标签:
您的屏幕截图显示您LevelLock
脚本附加到Button,这很好。
可能的原因和解决方法 :
1.组件/脚本甚至没有附加到GameObject或附加到错误的对象。
在你的代码中,调用GetComponent<Button>();
没有找到游戏对象第一意味着GetComponent
应该寻找一个Button
,其安装到该组件GameObject
这个脚本( LevelLock
)附连到。
如果你想获取脚本,连接到另一个游戏物体,你可以通过先解决这个问题,找到游戏对象的Button
组件连接到与GameObject.Find
然后检索Button
从中组件/脚本。
更换
lvlBtn = GetComponent<Button> ();
同
GameObject obj = GameObject.Find("lvl 2");
lvlBtn = obj.GetComponent<Button>();
3. .Script附加到多个对象
GetComponent<Button>()
可能返回false
的原因之一是因为您错误地将LevelLock
脚本附加到另一个LevelLock
。 它可能是一个空的GameObject,但GameObject没有附加Button
组件。
找到这个LevelLock
并LevelLock
删除LevelLock
脚本。
为此,从“项目”选项卡中选择“ LevelLock
脚本,然后转到“ 资源” → “在场景中查找引用” 。 从其他LevelLock
删除LevelLock
脚本。
这将确保LevelLock
脚本仅附加到“lvl 2”GameObject
3.具有相同名称但在不同namespace
多个脚本:
如果你有两个具有相同名称但在不同命名空间中的类,并且在尝试从代码访问另一个时将一个类附加到GameObject
,则它将为null
因为它们不是相同的。 我查看了你的项目,这就是问题所在。
您创建了一个名为“Button”的脚本,而Unity带有它自己的内置脚本/组件,也称为“Button” ,它位于UnityEngine.UI
命名空间中。
您将Unity的内置“Button”脚本附加到GameObject,但之后您尝试从脚本中访问自己创建的“Button”脚本。 提供UnityEngine.UI
的命名空间,以便Unity知道您想要使用Unity附带的Button
组件。
更改:
vlBtn = GetComponent<Button> ();
至
lvlBtn = GetComponent<UnityEngine.UI.Button>();
也改变:
private Button lvlBtn;
至
private UnityEngine.UI.Button lvlBtn;
最后, 不要将脚本命名为与任何内置组件相同的名称,如Button
, Image
, Text
, Rigidbody
等。 创建一个class
名,并确保它不存在于Unity API中,否则您将继续遇到此类问题,甚至SO上的人也无法帮助您,除非他们可以访问您的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.