unity关于文本显示与隐藏,报空错误的解决(避坑)

  1. 这个问题一直卡了我许多天的,浪费了很多时间,现在终于解决了,发出来让大家避免此坑

写了个碰撞脚本,当人物获得到目标物品时,显示文本内容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class Destroyed : MonoBehaviour
{
    public static GameObject txt ; //定义txt,将文本内容所在的“gain”层赋值到txt上
    
    void Start ()
    {
        txt = GameObject.Find("gain");
        txt.SetActive(false);//隐藏文本
        
    }
    
    void Update () {
        
    }
    public void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "bs")//人物触碰到宝石,宝石消失,文本显示
        {
             
             Destroy(collision.gameObject);    
             txt.SetActive(true);
        }
    }

}


这个脚本写完后,控制台一直报错这个

NullReferenceException: Object reference not set to an instance of an object
Destroyed.Start () (at Assets/Destroyed.cs:12)

然后我去百度,csdn,b站等上搜了很多,但都没卵用,一直没解决

直到三个月后我再贴吧看到了这个

【问题求助】关于SetActive的疑问【unity3d吧】_百度贴吧 (baidu.com)

我看了下自己的发现正好自己canvas上有这个脚本

移除后发现竟然能运行成功了,nb

 这个也是我经过了无数次失败后才得以解决掉一个错误

因为多绑了一个脚本在canvas上导致的错误

刚刚开始写这个的时候,好像是我写的脚本是绑在宝石上的,宝石遇到人物时触发消失脚本Destroyed

但是后来我发现无论怎么改这个,哪怕canvas上也没多绑这个脚本也会出错,很可能跟我设计的多个宝石数量有关,(因为修改后destroyed脚本只绑一个人物上,多绑的话会报空),而我设计的宝石却有多个,没错我就是把宝石绑了6个脚本,这下子我无论怎么样改都会报空

于是我修改了脚本,绑在了人物上,然后就变成了上面所说的

之前一度以为网上所写的脚本有问题,因为一直报空,结果发现是我的问题.....

最后再附一个关于如何显示与隐藏文本的教程:

交互游戏设计与开发unity_20.1触发后显示文字的方法_哔哩哔哩_bilibili

猜你喜欢

转载自blog.csdn.net/lnz2268996538/article/details/126864699