Странное поведение при добавлении SerializeField к переменной - PullRequest
0 голосов
/ 05 августа 2020

Хорошо, во-первых, я не уверен, что добавил правильный заголовок к этому вопросу, если вы думаете, что это может сбивать с толку, я его изменю.

В сцене у меня есть LevelManager, который появляется три экземпляра одного и того же объекта с помощью Instantiate. Для созданных объектов есть сценарий, написанный ниже. Первый и второй объекты только создаются, а третий кэшируется и сразу после того, как LevelManager вызывает функцию IsNowCorrect:

public class LevelManagerValuesUpdater : MonoBehaviour
{
    ShapeMatch_LevelManager _levelManager;

    Transform _transform;
    Rigidbody2D _rigidbody;

    /*[SerializeField]*/ bool isCorrect = false;

    Vector2 position;
    float rotation;

    public void IsNowCorrect(ShapeMatch_LevelManager levelManager)
    {
        isCorrect = true;

        Debug.Log(gameObject.name + " is correct");
    
        _levelManager = levelManager;
        AssignComponents();
    }

    void AssignComponents()
    {
        _transform = gameObject.transform;
        _rigidbody = GetComponent<Rigidbody2D>();
    
    }

    private void Update()
    {
        if (!isCorrect)
            return;

        Debug.Log("Update ran");

        position = _transform.position;
        rotation = _rigidbody.rotation;

        _levelManager.UpdateInfo(position, rotation);
    }
}

Первая часть скрипта работает нормально. Первый Debug.Log (тот, что находится внутри NowIsCorrect) вызывается только последним из трех объектов, как и следовало ожидать. Но тогда ни один из трех не запускает второй Debug.Log в функции обновления.

Я попытался добавить [SerializeField] в переменную isCorrect, чтобы проверить ее в инспекторе, и вот что произошло: переменная на третий объект был истинным, и первый журнал был вызван один раз (как и раньше), но теперь функция Debug.Log in Update вызывалась всеми тремя объектами. Вдобавок ко всему, теперь я получаю исключение NullReference от всех трех объектов, как будто функция AssignComponents не вызывается (но если вы поместите внутри нее Debug.Log, похоже, что она вызывается)

Извините, если я упустил что-то тривиальное, но я пока не могу понять это ...

1 Ответ

0 голосов
/ 05 августа 2020

Для тех, у кого такая же проблема. Оказывается, когда объекты были созданы, по какой-то причине isCorrect по умолчанию было установлено значение true (даже если я сделал его ложным объявлением durung), поэтому я сделал так, что он снова становится ложным, как только Awake называется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...