Почему я получаю исключение NullReferenceException, когда моя переменная создается в методе «пробуждения»?

1

Я продолжаю получать эту ошибку, когда я нажимаю на Карту, чтобы я мог ее переместить.

NullReferenceException: ссылка на объект не установлена в экземпляр объекта CardProspector.OnMouseUpAsButton() (в Assets/__Scripts/CardProspector.cs: 17) UnityEngine.SendMouseEvents: DoSendMouseEvents (Int32, Int32)

Исключение указывает следующий метод в моем классе CardProspector:

override public void OnMouseUpAsButton() {
    Prospector.S.CardClicked(this);  // line 17
    base.OnMouseUpAsButton();
}

Но эта переменная должна была быть создана экземпляром моего класса Prospector, соответствующая часть которой показана ниже:

public class Prospector : MonoBehaviour {
    static public Prospector S;
    ...
    ...

    // Use this for initialization
    void awake() {
        S = this;
    }

    ...
    ...
}
  • 1
    я думаю, что пробуждение не было вызвано, так что S является нулем
  • 0
    Дурак применим, в значительной степени ... но, кажется, Ян затронул реальную проблему. Метод «Пробуждение», по-видимому, автоматически вызывается Unity, но его следует использовать с большой буквы.
Показать ещё 4 комментария
Теги:
unity3d

2 ответа

3

Awake() чувствителен к регистру и никогда не будет вызываться в вашем коде.

0

Эта часть сообщения дает информацию о том, где проблема:

(at Assets/__Scripts/CardProspector.cs:17)

Это "17" означает строку 17 вашего файла CardProspector.cs, которая переводится в следующую строку:

Prospector.S.CardClicked(this);

Это предполагает, что статическое свойство "S" равно null - оно не определено.

Поскольку "S" определяется в методе Awake(), вам необходимо вызвать Awake(), прежде чем ссылаться на свойство "S" любым способом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню