Я пытаюсь закодировать игру и в системе регистрации, если код возврата - это нечто иное, чем два, чтобы показать всплывающее окно с сообщением об ошибке. Я сделал новый холст с прикрепленной панелью. Прикрепленное к панели - это кнопка и текст. В моем коде, если сервер отключился я хочу вызвать эту функцию:NullReferenceException in Unity3D
Register.cs (класс):
} catch(SocketException) {
var uiclass = new UIManagerLoginRegister();
uiclass.displayErrorMessage ("Unable to connect to server. Please try again later.");
}
я должен использовать этот вар, так что я могу назвать эту функцию в другом классе называется UIManagerLoginRegister.cs (класс). Оттуда функция должна сделать это:
UIManagerLoginRegister.cs (класс):
public void displayErrorMessage(string message) {
errorText.text = message;
errorCanvas.enabled = true;
}
ErrorText общественный текст, и объявляется выше, и я поставил его, перетащив его в через редактор. То же самое с errorCanvas, оно объявлено выше функции, и я устанавливаю его, перетаскивая его через редактор.
Но я получаю две ошибки. Первый:
Вы пытаетесь создать MonoBehaviour, используя ключевое слово 'new'. Это запрещено. MonoBehaviours можно добавлять только с помощью AddComponent(). Кроме того, ваш сценарий может наследовать от ScriptableObject или нет базового класса на всех
UnityEngine.MonoBehaviour: .ctor()
UIManagerLoginRegister: .ctor()
Регистрация: attemptRegister() (в Assets/_scripts/Register.cs: 81)
UnityEngine.EventSystems.EventSystem: Update()
Это не нравится, как я установил мой вар, так что я могу использовать другие функции классов. Так как я это исправить.
И моя вторая ошибка:
NullReferenceException: Ссылка на объект не указывает на экземпляр UIManagerLoginRegister.displayErrorMessage (System.String сообщение) объекта (на активы/_scripts/UIManagerLoginRegister.cs: 36)
Register.attemptRegister() (at Assets/_scripts/Register.cs: 82)
UnityEngine.Events.InvokableCall.Invoke (System.Object [] args) (в C:/buildslave/unity/build/Runtime/Export /UnityEvent.cs:153)
Параметры UnityEngine.Events.InvokableCallList.Invoke (System.Object []) (в C: /buildslave/unity/build/Runtime/Export/UnityEvent.cs: 630)
UnityEngine.Events.UnityEventBase.Invoke (параметры System.Object []) (в C:/buildslave/unity/build/Время воспроизведения/Экспорт/UnityEvent.cs: 765)
UnityEngine.Events.UnityEvent.Invoke() (в C: /buildslave/unity/build/Runtime/Export/UnityEvent_0.cs: 53)
UnityEngine.UI.Button. Нажмите() (в C: /buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs: 35)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (в C: /buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs: 44)
UnityEngine.EventSystems.ExecuteEvents.Execute (обработчик IPointerClickHandler, UnityEngi ne.EventSystems.BaseEventData eventData) (в C: /buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs: 52)
UnityEngine.EventSystems.ExecuteEvents.Execute [IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (в C:/buildslave/unity/build/Extensions /guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269) UnityEngine.EventSystems.EventSystem: Update()
Я не понимаю, почему я получаю эту вторую ошибку. Помогите мне исправить эти ошибки.
Не первая ошибка вызывает вторую? Исправьте это, и я уверен, что он уходит. Например, что-то вроде этого: 'var uiclass = gameObject.AddComponent();' (PS Я не Unity dev, просто хорошо в Google-fu) –
DavidG
NullReferenceException - одно из наименее полезных сообщений об ошибках в .Net , когда вы видите один взгляд на свой код в режиме отладки и проверяете всю свою переменную и находите ту, которая является нулевой, это обычно происходит, когда вы вызываете 'something.SomethingElse' и' something' является 'null', и потому что' null' doesn У вас есть свойство 'SomethingElse', вы получаете ошибку – MikeT