Unity3D - Почему переменная всегда верна, несмотря на то, что я установил в инспекторе? - PullRequest
0 голосов
/ 23 апреля 2019

Я установил переменную как SerializeField, чтобы выбрать значение из инспектора.Однако значение не меняется, и оно всегда имеет «истинное» значение.

Я пытался сделать его общедоступным, изменить имя, повторно импортировать компонент, сбросить компонент, ... И ничего не кажетсячтобы добиться какого-либо эффекта, единственное, что работает, - это изменение значения в методе Awake.

public class AudioController : MonoBehaviour
{

    [SerializeField] private bool playSoundsAtColision; //WHY IS TRUE??? Is false in the inspector...

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (this.playSoundsAtColision)
            Debug.Log("playSoundsAtColision = " + this.playSoundsAtColision + " by: " + gameObject.name, gameObject);
    }
}


Здесь у вас есть изображение всего кода: https://i.imgur.com/rT5BdhT.png (где вы можете увидетьчто переменная только объявлена, затем проверена и напечатана, и к ней больше нет доступа)

Вот что происходит, несмотря на то, что я установил в инспекторе: https://i.imgur.com/FLFugq8.png

СпасибоЗа вашу помощь заранее!

1 Ответ

0 голосов
/ 23 апреля 2019

Проверьте, если:

  1. Вы вешаете свойство, пока игра работает в автономном режиме - при выходе из автономного режима свойства сбрасываются
  2. Вы не установилисобственность в вашем коде.Чтобы изменить логическое значение по умолчанию (true), вам нужно установить значение для поля playSoundsAtColision:

    public class AudioController : MonoBehaviour 
    {
    
        [SerializeField] public bool playSoundsAtColision = false; //you just shoud change the variable to public and default value to false or true
    
        private void OnCollisionEnter2D(Collision2D collision)
        {
            if (this.playSoundsAtColision)
                Debug.Log("playSoundsAtColision = " + this.playSoundsAtColision + " by: " + gameObject.name, gameObject);
        }
    }
    
...