forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   C# Unity: Проблемы с подпиской на события (http://forum.boolean.name/showthread.php?t=20602)

Артур 02.04.2017 23:06

C# Unity: Проблемы с подпиской на события
 
Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
 
public class SettingManager : MonoBehaviour
{
    public Toggle FullScreenCntr;
    public Dropdown ResolutionCntr;
    public Dropdown TextureQualityCntr;
    public Dropdown AntiAliasingCntr;
    public Dropdown vSyncCntr;
    public Slider MusicVolumeCntr;
    public Button buttonApply;
 
    public Resolution[] resolutions;
    public GameSettings gameSettings;
    public AudioSource musicSource;
 
    void OnEnable ()
    {
        gameSettings = new GameSettings ();
        resolutions = Screen.resolutions;
        foreach (Resolution resolution in resolutions)
        {
            ResolutionCntr.options.Add (new Dropdown.OptionData (resolution.ToString ()));
        }
 
        LoadSettings ();
 
        // Subscribe Events
        FullScreenCntr.onValueChanged.AddListener (delegate {
            OnFullScreenToggle ();
        });
        ResolutionCntr.onValueChanged.AddListener (delegate {
            OnResolutionChange ();
        });
        TextureQualityCntr.onValueChanged.AddListener (delegate {
            OnTextureQualityChange ();
        });
        AntiAliasingCntr.onValueChanged.AddListener (delegate {
            OnAntialiasingChange ();
        });
        vSyncCntr.onValueChanged.AddListener (delegate {
            OnVSyncChange ();
        });
        MusicVolumeCntr.onValueChanged.AddListener (delegate {
            OnMusicVolumeChange ();
        });
        buttonApply.onClick.AddListener (delegate {
            OnApplyButtonClick ();
        });
    }
 
    public void OnFullScreenToggle ()
    {
        gameSettings.fullscreen = Screen.fullScreen = FullScreenCntr.isOn;
    }
 
    public void OnResolutionChange ()
    {
        Screen.SetResolution (resolutions[ResolutionCntr.value].width, resolutions[ResolutionCntr.value].height, Screen.fullScreen);
        gameSettings.resolutionIndex = ResolutionCntr.value;
    }
 
    public void OnTextureQualityChange ()
    {
        QualitySettings.masterTextureLimit = gameSettings.textureQuality = TextureQualityCntr.value;
    }
 
    public void OnAntialiasingChange ()
    {
        QualitySettings.antiAliasing = gameSettings.antialiasing = (int)Mathf.Pow (2, AntiAliasingCntr.value);
    }
 
    public void OnVSyncChange ()
    {
        QualitySettings.vSyncCount = gameSettings.vSync = vSyncCntr.value;
    }
 
    public void OnMusicVolumeChange ()
    {
        musicSource.volume = gameSettings.musicVolume = MusicVolumeCntr.value;
    }
 
    //public void SaveSettings ()
    //{
    //  string JsonData = JsonUtility.ToJson (gameSettings, true);
    //}
 
    public void OnApplyButtonClick()
    {
        //SaveSettings ();
    }
 
    public void LoadSettings()
    {
        gameSettings = JsonUtility.FromJson<GameSettings> (File.ReadAllText(Application.persistentDataPath + "/Config/Preferences.json"));
        MusicVolumeCntr.value = gameSettings.musicVolume;
        AntiAliasingCntr.value = gameSettings.antialiasing;
        vSyncCntr.value = gameSettings.vSync;
        TextureQualityCntr.value = gameSettings.textureQuality;
        ResolutionCntr.value = gameSettings.resolutionIndex;
        FullScreenCntr.isOn = gameSettings.fullscreen;
        Screen.fullScreen = gameSettings.fullscreen;
 
        ResolutionCntr.RefreshShownValue ();
    }
}

Товарищи, требуется помощь. Возникает ошибка NullReferenceExeption

Текст ошибки: NullReferenceException: Object reference not set to an instance of an object
SettingManager.OnEnable () (at Assets/Utilities/Game Settings/Scripts/SettingManager.cs:27)

Подскажите, быть может я не правильно подписался на событие?

pax 03.04.2017 09:35

Ответ: C# Unity: Проблемы с подпиской на события
 
В данном случае у тебя всего несколько вариантов (ошибка на 27 строке):
PHP код:

ResolutionCntr == null
//или 
ResolutionCntr.options == null
//или 
resolution == null 

Скорее всего ты просто не назначил ссылку на поле ResolutionCntr в инспекторе


Часовой пояс GMT +4, время: 04:18.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot