这是我的代码,我尝试启用我已经禁用的gameobject,以便它显示在CollisionEnter上。
using System.Collections.Generic;
using UnityEngine;
public class JumpMessage : MonoBehaviour
{
    private GameObject jumptutorialbox;
    private GameObject triggerjumptut;
    public AudioSource audioPlayer;
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            Debug.Log("Triggered Jump Tutorial");
            triggerjumptut = GameObject.Find("TriggerJumpTut");
            triggerjumptut.gameObject.SetActive(false);
            jumptutorialbox = GameObject.Find("TutorialJUMP");
            jumptutorialbox.gameObject.SetActive(true);
            audioPlayer.Play();
        }
    }
}我想在CollisionEnter上启用一个禁用的对象,但是我得到了以下错误:
NullReferenceException: Object reference not set to an instance of an object
JumpMessage.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/Scripts/JumpMessage.cs:19)发布于 2022-06-25 17:25:16
因此,为了将不活动的游戏对象设置为active,您必须通过另一个游戏对象将其设置为active,因为如果场景中的一个对象是非活动的,那么代码和脚本永远不会运行,所以创建另一个脚本并将其放到一个新的游戏对象上,然后创建一个bool或什么的,这就是将其设置为active的方法。
发布于 2022-06-26 07:37:38
您可以使用代码创建一个新的空GameObject,这样您就可以通过代码启用和禁用其他GameObject,而不会出现任何问题。我喜欢用这些代码来调用这个GameObjects,这些代码将其他GameObject的行为称为控制器。
发布于 2022-06-26 08:13:21
检查在使用GameObject.Find时是否找到了一些东西。在此基础上,您可能可以在检查器中使用公共变量并设置对对象的引用。
https://stackoverflow.com/questions/72755891
复制相似问题