- Home /
Null Reference Exception
I want to write an Settings menu and I already created the UI but when I click on a button I get a null reference exception.
NullReferenceException: Object reference not set to an instance of an object SettingsManager.SetResolutionHeight (Int32 height) (at Assets/Scripts/Options/SettingsManager.cs:36) UnityEngine.Events.InvokableCall`1[System.Int32].Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:189) UnityEngine.Events.CachedInvokableCall`1[System.Int32].Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:309) UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:637) UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:773) UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:52) UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44) UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update()
Here is my Code
This is my data class:
public class Options_data
{
public int width, height;
public bool fullscreen;
public int textureQuality, antialiasing, vSync, shadowType, shadowResolution;
public float masterVolume, musicVolume, surroundingVolume, battleVolume;
}
This is the class where I Change and set the values:
using UnityEngine;
using UnityEngine.UI;
public class SettingsManager : MonoBehaviour {
private Options_data data;
public Slider[] musicSlider;
public Toggle fullScreenToggle;
private bool fullscreen = true;
private int screenWidth = 1920, screenHeight = 1080;
private void Start()
{
fullScreenToggle.onValueChanged.AddListener(delegate { SetFullscreen(); });
}
public void SetTextureQuality(int idx)
{
data.textureQuality = QualitySettings.masterTextureLimit = idx;
}
public void SetResolution()
{
Screen.SetResolution(screenWidth, screenHeight, fullscreen, 60);
}
public void SetResolutionWidth(int width)
{
screenWidth = data.width = width;
}
public void SetResolutionHeight(int height)
{
screenHeight = data.height = height;
}
public void SetShadowType(int idx)
{
}
public void SetShadowResolution(int idx)
{
}
public void SetFullscreen()
{
data.fullscreen = fullscreen = fullScreenToggle.isOn;
}
public void SetAntiAliasing(int idx)
{
data.antialiasing = QualitySettings.antiAliasing = idx;
}
public void SetVSync(int idx)
{
}
public void Apply()
{
}
public void Revert()
{
}
private void Update()
{
}
}
The Code is not finished
Thanks for any help :)
ok I feel stupid. I solved it. I just forgot to use the constructor. #facepalm
private Options_data data = new Options:data();