我已按照本教程(https://unity3d.com/pt/learn/tutorials/projects/roll-ball-tutorial/displaying-score-and-text)進行操作,每次我的腳本分數發生變化時都會更新文本,并且它工作得很好。但我想使用 TextMeshPro 而不是簡單的文本。我已經在代碼中進行了所有必要的更改,例如:使用TMPro公共 TextMeshProUGUI 分數文本;(而不是公共文本 ScoreText)ScoreText = gameObject.GetComponent(); (在 void Start() 內)ScoreText.text = "分數:" + Score.ToString(); (在我的函數內)在播放模式下,我收到“NullReferenceException:未將對象引用設置到對象實例”消息。我發現了原因。當我進入播放模式時,我在檢查器中看到分配給腳本的 TextMeshProUGUI 自動取消分配。我制作了一個獨立的腳本,并將其添加到 TextMeshProUGUI 中,以檢查我的代碼是否可以與 TextMeshPro 一起使用,確實如此。問題是:我不想用一個單獨的腳本來更新 TextMeshPro。正如上面的教程所示,我需要將 TextMeshPro 作為具有所有其他功能的大腳本內的公共變量。如果在進入播放模式后,我通過將 TextMeshProUGUI 拖動到檢查器來手動分配 TextMeshProUGUI,則樂譜有效!為什么當我進入游戲模式時,文本、預制件和所有內容都保留分配給我的游戲對象,但 TextMeshProUGUI 卻沒有?我認為代碼沒問題,因為如果我手動分配 TextMeshProUGUI,它就可以工作。但是,無論如何...public class SnakeController : MonoBehaviour{ public TextMeshProUGUI scoreText; private int score; void Start() { .... scoreText = gameObject.GetComponent<TextMeshProUGUI>(); score = 0; setScoreText(); } public void setScoreText() { scoreText.text = "Score: " + score.ToString(); } }最大的問題是當我進入播放模式時 TextMeshProUGUI 被取消分配。
1 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
您的文本網格不會“自動取消”。您在這一行中明確告訴它分配其他內容:
ScoreText = gameObject.GetComponent();
您的文本網格可能與控制器不在同一對象上,因為它需要成為畫布的子對象才能工作。因此該命令沒有找到它要查找的內容,返回 null,從而分配 null。使用GetComponentInChildren<TextMeshProUGUI>()
或FindObjectOfType<TextMeshProUGUI>()
代替。取決于文本網格是控制器對象的后代還是完全不同的對象。由于您是通過腳本進行分配,因此不必擔心在檢查器中進行分配。事實上,將該字段設置為私有,這樣它就不會顯示在檢查器中。
或者在檢查器中分配并刪除腳本分配。兩者都做是不必要的、多余的并且容易造成混亂和錯誤。正如你剛剛發現的那樣。
- 1 回答
- 0 關注
- 124 瀏覽
添加回答
舉報
0/150
提交
取消