Относительно исключения
EventSystem.current.currentSelectedGameObject.GetComponent<DayButton>().CurrentNumber();
предлагает множество возможностей.В основном, ссылка перед каждым .
может быть null
.Скорее всего, это либо currentSelectedGameObject
, когда в данный момент просто не выбран ни один объект, либо GetComponent<DayButton>()
, когда в выделенном объекте просто нет такого компонента.
Я ничего не знаю о ваших классах и очень мало о MRTK, номожет быть, вы могли бы использовать шаблон системы событий, например,
public class DayButton : WhateverType
{
// public static event everyone can add listeners to
// in order to wait for any DayButton click
public static event Action<DayButton> OnButtonClicked;
// Just assuming for now this is the method called on click
public void OnClick()
{
// Fire the static event and inform every listener
// that this button was clicked by passing yourself in as parameter
OnButtonClicked?.Invoke(this);
}
}
Тогда вы могли бы иметь один (или разные) классы слушателей, ожидающих событие и проверяющих, какая кнопка была нажата, как
public class SomeListener : MonoBehaviour
{
privtae void Awake()
{
// Add a listener to the global event
DayButton.OnButtonClicked += HandleOnButtonClicked;
}
private void OnDestroy()
{
// Make sure to always remove listeners once not needed anymore
// otherwise you get NullReferenceExceptions!
DayButton.OnButtonClicked -= HandleOnButtonClicked;
}
// By passing the according DayButton reference in you have access
// to all its public fields and methods
private void HandleOnButtonClicked(DayButton button)
{
Debug.Log("The Button with the name {button.name} and number {button.CurrentNumber} was clicked!", this);
}
}