По сути, я создаю проект с дополненной реальностью для Vuforia в Unity. Я очень плохо знаком с C #, поэтому код может быть не таким оптимальным, я знаю, но это сработало. Я сохранил и вышел вчера и сегодня, когда я открыл его, чтобы снова протестировать и развить, внезапно появляются ошибки, которые говорят:
NullReferenceException: Object reference not set to an instance of
an object
marsHVB_script.Start () (at Assets/marsHVB_script.cs:11)
У меня есть два отдельных скрипта, один из которых главный:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class main : MonoBehaviour
{
public static GameObject helpObj;
public static GameObject NVB;
public static GameObject BVB;
public static GameObject helpMsg;
public static GameObject nText1;
public static GameObject nText2;
public static GameObject nText3;
public static GameObject nText4;
public static int stage = 1;
// Start is called before the first frame update
void Start()
{
helpObj = GameObject.Find("marsHVB");
helpMsg = GameObject.Find("marsHelp");
nText1 = GameObject.Find("nText1");
nText2 = GameObject.Find("nText2");
nText3 = GameObject.Find("nText3");
nText4 = GameObject.Find("nText4");
nText2.SetActive(false);
nText3.SetActive(false);
nText4.SetActive(false);
helpMsg.SetActive(false);
}
public static void IncrStage()
{
stage++;
Debug.Log("Stage Increased to " + stage);
}
public static void DecrStage()
{
stage--;
Debug.Log("Stage Decreased to " + stage);
}
public static int GetStage()
{
Debug.Log("Stage Got " + stage);
return stage;
}
// Update is called once per frame
void Update()
{
}
}
В коде, представленном ниже, я создаю открытые статические переменные, которые должны быть доступны из других скриптов. Я нахожу их и выключаю после.
Затем есть второй скрипт, который управляет виртуальной кнопкой:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class marsHVB_script : MonoBehaviour, IVirtualButtonEventHandler
{
void Start()
{
main.helpObj.GetComponent<VirtualButtonBehaviour>().RegisterEventHandler(this);
}
void IVirtualButtonEventHandler.OnButtonPressed(VirtualButtonBehaviour vb)
{
switch (main.GetStage())
{
case 1:
main.nText1.SetActive(false);
main.helpMsg.SetActive(true);
break;
case 2:
main.nText2.SetActive(false);
main.helpMsg.SetActive(true);
break;
case 3:
main.nText3.SetActive(false);
main.helpMsg.SetActive(true);
break;
case 4:
main.nText4.SetActive(false);
main.helpMsg.SetActive(true);
break;
}
Debug.Log("Help Pressed");
}
void IVirtualButtonEventHandler.OnButtonReleased(VirtualButtonBehaviour vb)
{
switch (main.GetStage())
{
case 1:
main.helpMsg.SetActive(false);
main.nText1.SetActive(true);
break;
case 2:
main.helpMsg.SetActive(false);
main.nText2.SetActive(true);
break;
case 3:
main.helpMsg.SetActive(false);
main.nText3.SetActive(true);
break;
case 4:
main.helpMsg.SetActive(false);
main.nText4.SetActive(true);
break;
}
Debug.Log("Help Removed");
}
// Update is called once per frame
void Update()
{
}
}
Этот второй скрипт реагирует на нажатие и отпускание виртуальной кнопки.
Ошибка выводится в строке 11, которая является функцией main.helpObj.GetComponent, и вчера она работала, сегодня - нет.
Пожалуйста, помогите мне выяснить причину этого, так как я застрял здесь и сейчас.