- 这个问题一直卡了我许多天的,浪费了很多时间,现在终于解决了,发出来让大家避免此坑
写了个碰撞脚本,当人物获得到目标物品时,显示文本内容
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个脚本,这下子我无论怎么样改都会报空
于是我修改了脚本,绑在了人物上,然后就变成了上面所说的
之前一度以为网上所写的脚本有问题,因为一直报空,结果发现是我的问题.....
最后再附一个关于如何显示与隐藏文本的教程: