亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TextMeshProUGUI 在播放模式下取消分配

TextMeshProUGUI 在播放模式下取消分配

C#
慕姐8265434 2023-09-16 20:15:45
我已按照本教程(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>()代替。取決于文本網格是控制器對象的后代還是完全不同的對象。由于您是通過腳本進行分配,因此不必擔心在檢查器中進行分配。事實上,將該字段設置為私有,這樣它就不會顯示在檢查器中。

或者在檢查器中分配并刪除腳本分配。兩者都做是不必要的、多余的并且容易造成混亂和錯誤。正如你剛剛發現的那樣。


查看完整回答
反對 回復 2023-09-16
  • 1 回答
  • 0 關注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號