[英]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.