by the way guys, if you cannot drag in the resolution drop down, you probably have a text mesh pro dropdown one. To solve this you can do 'public TMPro.TMP_Dropdown resolutionDropdown;' instead of the 'public Dropdown resolutionDropdown'. I hope this helps on anyone who is stuck.
For the resolutions option, if anybody is seeing a lot of seemingly duplicate options (I was), it's because of refresh rates - you have 1920x1080@60hz and 1920x1080@144hz for example. What I did was add the refresh rate into the dropdown text options: string option = resolutions[i].width + " x " + resolutions[i].height + " @ " + resolutions[i].refreshRate + "hz";
I literally just switched back from my Unity program to google "why do i have duplicate resolutions?" Just to see your comment conveniently right before I clicked away. Bless your soul, you beautiful bastard! Thank you!
At 14:30 there´s a mistake in the script. He compares resolution[i] with Screen.currentResolution but that´s wrong. CurrentResolution gives the Resolution of the monitor but we want to compare it with the Resolution of the window in case we change the scene. That´s why we have to compare resolution[i].width with Screen.width and resolution[i].height with Screen.height.
At 5:10 use audioMixer.SetFloat("Volume", Mathf.Log10(volume) * 20); instead since the audiomixer volume is not linear Edit: make sure the varibles match yours ie. same caps and spellings
Just wanted to let you know your tutorials are phenomenal! I really appreciate the way you add in Debug.Logs as you go so we can see it working as we go rather than just hoping it all works at the end of the tute. Stay awesome man!
...... This is hardly a settings menu, what about aspect ratio, AA, Different volume settings for like music/sfx/master volume, what about controler and keyboard binding, or what about SAVING the settings for the next time a player opens the game........
- Aspect ratio is just a modified resolutions dialog with resolution shown in lower fractions. - The AA can be accessed through the post-processing stack, which I believe he has done a tutorial on already. - The different volume settings would be done by sending AudioSource sounds to specific mixers instead of master (SFX mixer, Music mixer) and then modifying them instead of the master as he did in this video. - The controller and keyboard bindings can be accessed and modified (with much more work) through the Input class etc. - Saving the settings is just using PlayerPrefs, which he has done a tutorial on already.
Watch Brackey's high score tutorial and you have your answer for both how to save custom prefs into a prefs and load it back. In his previous tutirials you can also find the answer how to detect inputs, keyress etc and change those settings. Then just combine all of them together and you can get a fully functional options menu :)
If your slider is affecting the audio mixer values but not changing the sound volume of your audio, you have to drag the mixer into the slot of your audio clip on the inspector to affect the actual sound of each clip.
@@mcsween4593 It sounds like you have brand-new understanding of the Unity menus. I think you need to do more beginner-friendly tutorials to get better familiarity.
@@aminkafnaweez2595 you underestimate just how bad some of us are at art. Or more importantly, how long it takes us to figure out some digital art programs.
@@redgeoblaze3752 that is why all my menus consist of tmp text with a nice gradient and a dark semi-transparent panel underneath it. Good enough looking ui and it's really easy to make.
For anyone with troubles in build where the options can get duplicated in the dropdown; this is in fact not a bug, it is due to the varying refresh rates available. Unity editor has a consistent 60Hz, but when an application is built, there can be multiple differing rates between the same resolution. A fix can be just adding the refresh rate to the option: string option = resolutions[i].width + " x " + resolutions[i].height + ", " + resolutions[i].refreshRate + "Hz";
Is there a way to do it without the refresh rates? I tried comparing the old vs new value, got the drop down list to be only unique refresh rates... but when I select one, I guess it takes it's index form the drop down and applies it to the available resolutions.
Hi! Thanks for your video! I've got something you might find useful. Instead of this: if(resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height) You can use the Equals method: if(resolutions[i].Equals(Screen.currentResolution)) It compares objects and returns true, if their fields are equal. Hope it might help someone to shorten their code!
For everyone who gets the same resolution on the dropdown even if they already changed it: This happens when on window mode. The Screen.currentResolution will get the 'desktop resolution' instead of the game's current resolution. To fix this, simply change: ` if(_resolutions[i].width == Screen.currentResolution.width && _resolutions[i].height == Screen.currentResolution.height) ` TO ` if(_resolutions[i].width == Screen.width && _resolutions[i].height == Screen.height) ` If you didn't get it, change "Screen.currentResolution.width" to "Screen.width" (and also height) during the if statement on the for loop. This will get the game's current resolution. God Bless and Happy Coding! =)
If you are using a TextMeshPro DropDown instead of the default Dropdown change: public DropDown resolutionDropdown; to public TMP_Dropdown resolutionDropdown; and make sure that you have using TMPpro; at the top of your script
It's true what they all say, you are THE Unity guy. Sure I know others exist, but the sheer amount of topics you discuss, from 2d to 3d, to settings and multiplayer. Thanks so much! It's been long overdue for me, but FINALLY getting into Unity and C# :D
If it weren't for Brackeys, not only would I have maybe thought about giving up Game developing, thinking it would be too boring or difficult, or I would have kept doing it but never find so much joy in learning the basics. Thanks man!
If you want to set the default quality to high for instance you can do that within the dropdown component by setting 'value' to 2. I struggled with this a bit at first :P
@ 11:45 - 12:13 try this line instead: string option = resolutions[i].width + " x "+ resolutions[i].height +" @ " +resolutions[i].refreshRate + " Hz"; This will populate the list nicely with refreshRate information intact edit: not sure yet how to apply the refresh rate as well.
if anyone has errors in their script, try this: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio; using UnityEngine.UI; using TMPro; public class SettingsMenu : MonoBehaviour{ public AudioMixer audioMixer; public TMP_Dropdown resolutionDropdown; Resolution[] resolutions; void Start () { resolutions = Screen.resolutions; resolutionDropdown.ClearOptions(); List options = new List(); int currentResolutionIndex = 0; for (int i = 0; i < resolutions.Length; i++) { string option = resolutions[i].width + "x" + resolutions [i].height; options.Add(option); if (resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height) { currentResolutionIndex = i; } } resolutionDropdown.AddOptions(options); resolutionDropdown.value = currentResolutionIndex; resolutionDropdown.RefreshShownValue(); } public void SetResolution (int resolutionIndex) { Resolution resolution = resolutions[resolutionIndex]; Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen); } public void SetVolume(float volume) { audioMixer.SetFloat("volume", volume); } public void SetQuality (int qualityIndex) { QualitySettings.SetQualityLevel(qualityIndex); } public void SetFullscreen (bool isFullscreen) { Screen.fullScreen = isFullscreen; } } (the text mesh pro is only if you are using it)
To people like me who's having trouble with the volume here's something that works: public AudioMixer audioMixer; [SerializeField] AudioSource audioSrc; public float Nvolume = 1f; void Update() { audioSrc.volume = Nvolume; } public void SetVolume(float volume) { Nvolume = volume; audioMixer.SetFloat("volume", Nvolume); }
If you see the bar in the MainMixer go up and down but the volume doesn't change you have to add: public AudioMixerGroup mixerGroup; in your AudioManager script and then inside the foreach(Sound s in sounds) after the s.source = gameObject.AddComponent(); you have to put s.source.outputAudioMixerGroup = mixerGroup; after that open the MainMixer icon in your assets and drag the "Master" inside the public mixerGroup in editor!
For those whose volume doesn't change after using the slider, add this to your code: AudioMixer audioMixer = Resources.Load("MainMixer"); AudioMixerGroup[] audioMixGroup = audioMixer.FindMatchingGroups("Master"); audioSource.outputAudioMixerGroup = audioMixGroup[0]; Also, you have to go to the audiosource component of the audioclip you want to lower the sound of and change the output section to Master(AudioMixer).
if anyone was wondering, this is how i think is an easy way to use the volume slider: using System.Collections; using System.Collections.Generic; using UnityEngine; public class OptionMenu : MonoBehaviour {
public void SetVolume(float volume) { AudioListener.volume = volume;
So I know this is an old video, but the Graphics dropdown only actually works when my mouse is hovering over the Quality section in the Project Settings tab
can you make a tutorial on how to save these settings when the game gets closed? would this also apply to other things in the game (lives, unlocked levels, etc.)
Hey you! Having issues with the Volume Slider not working because you're using DontDestroyOnLoad() to keep music between scenes? I gotchu. In your AudioManager script, add this : public AudioMixerGroup mix; and in your foreach (Sound s in sounds), add this: s.source.outputAudioMixerGroup = mix; You can change the variable names as needed of course - the main idea is that A) Unity needs to be able to grab the proper Audio Mixer item through code, even when switching scenes, and B) you need to use the outputAudioMixerGroup functionality in Sound (s.source in the above) to edit the Mixer controls from the code! Hope this helps you solve this bug faster than I did lol
Hey guys just to point out if your using a TMP dropdown you must put Using TMPro; At The Top And Public TMP_Dropdown resolutionDropdown; Hope This Helps Someone
To fix the bug with repeat resolution you need to disable the extra support for the aspect ratio in the player settings. After that, the bug with the rotation resolution will be lost. P.S. sorry for the bad english. People need it in the top!
@@zhuohuichen9444 The solution is pretty simple actually the duplicates are different refresh rates for the resolutions, since brackeys only picked the sizes of width and height in the string you can't see then you can keep the duplicates and add the refresh rates using something like string option = resolutions[i].ToString(); or filter all non-60hz results using resolutions = Screen.resolutions.Where(resolution => resolution.refreshRate == 60).ToArray(); istead of resolutions = Screen.resolutions; just make sure you are using System.Linq o/
Spanish: El mejor tutorial de Unity es este. Yo pude programar con exito el menu de mi juego. Muchas gracias, saludos desde Colombia. English: The best Unity tutorial is this one. I could reprogram sucesfully the menu of my game. Thank you very much, greatings for Colombia. ☺😀👏👍
I just found this channel yesterday this is so helpful and amazing. I don't know how else to thank you as soon as I have a stable income I will become a patron supporter!!!
Having one issue and have not been able to fix it. if you have it set to window mode and open the settings menu it changes the resolution back to what your screen is.
For those of you getting several of the same resolutions in your resolution drop down, you can get rid of them by going into Edit, Project Settings, Player, Resolution and Presentation and find the Support Aspect Ratios, then untick 4:3, 5:4, and other. You will no longer have the smaller number of resolutions but you won't have any duplicates. The lowest resolution you can then choose is 1280 x 720 (or at least it is for me). If you need something smaller, you may have to do some coding or live with the duplicates..
@@kondzio3500 sure, go to your audio source, there should be a slot for an audio mixer. This is to tell which sound to mute and which to not, you can have 2 audio mixers: music and sfx, and 2 sliders and that is so when you mute music sfx doesnt get affected and this is the solution
NO GOD! NO GOD! PLEASE NO NO NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
@@west770 I mean it would be completely okay if it was not free in the very beginning. But he changed the price right after this video (it is 2nd time I am watching this video). It is not a nice thing to do.
Set the volume slider to go from 0 to 1 and use this code to have a linear sound slider: public void SetVolume(float decimalVolume) { var dbVolume = Mathf.Log10(decimalVolume) * 20; if (decimalVolume == 0.0f) { dbVolume = -80.0f; } audioMixer.SetFloat("volume", dbVolume); }
Nice tutorial, but I am a bit surprised that it didn't touch upon the volume slider being logarithmic (due to it being tied with the sound in dB). The way it is showcased here, you get a very sensitive slider, which is not very user friendly at all
Does anyone has the same bug with builded version in resolution dropdown, where some resolutions are duplicated? You can see same in video (16:23) 720 x 480, 720 x 480. Btw thank you for your professional work, you are awesome:)
As much as I used to love (and I still do) your videos teaching us about this engine, the only negative thing you have is that you are a little bit way too fast! Sometimes I can't follow up with what is being said, otherwise your videos are brilliant!
This video has been really really helpful! I tried to make an option menu, and some stuff didn't work, after watching this video, I found what I did wrong. Thanks, Brackeys! Love the christmas hat btw
@@GontyWasHere ok so first put at the top of your code put using TMPro now when your referencing the dropdown put public TMP_Dropdown resolutiondropdown
i had issue with my text being crisp and clear in the editor but blurried when building the game , this totally fixed it AND it wasn't even related to that LOL! thanks brackeys you the man
the audio slider does not saved when changing scenes, looks like a bug.... can you combine this volume slider with another tutorial AudioManager singleton ?
i consider myself new to coding and unity overall and even i know this is just sloppy. like you know what problems will happen before they even happen type of sloppy.
@@XiaoZong322 Brackeys is good and all, but most of times he doesn't show all nuances of his scripts and how to fix simple problems. You will need to jump around UA-cam to find solutions to very simple problems arising from his scripts to fix them. Here what i found and used. First link to slider problem (slider doesn't work properly - like starting to tune down sound only after 50% of slider) and second video about mute button. Hope that helps. gamedevbeginner.com/10-unity-audio-tips-that-you-wont-find-in-the-tutorials/ - 9-th tip, slider problem. ua-cam.com/video/OeZuwgG6HJM/v-deo.html - mute button video.
hmm, I did everything like you showed in this video and my master volume changes with volume slider, but music in my game doesn't change at all (and other sound effects as well)! That is very weird and I am stuck 🤔
I have ALWAYS wanted to make a rhythm game! Like those Hatsune Miku Diva games for PS4. However, it seems really complicated with how to make it all works. Can you explain the basics for a rhythm game? - How to force press of certain buttons, multiple buttons, timing rate (cool, fine, sad, worst etc), keeping a combo/breaking a combo, hold notes and etc. You would really be of help! :D
I cannot see your code but one possible difference could be, that you are using private variables and [SerializeField] to make them visible in the editor. But you really have to use public variables here. I am using Unity 2019.1 and still have those fields, Brackeys showed in his tutorial.
Edit: The code brackey's provided (without) some of the options. Hello! Does anyone know how I would edit my code in order to filter out any refreshrates other than 60Hz? The code brackey's provided is down below: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class OptionsMenu : MonoBehaviour { public Dropdown resolutionDropdown; Resolution[] resolutions; void Start() { resolutions = Screen.resolutions; resolutionDropdown.ClearOptions(); List options = new List(); int currentResolutionIndex = 0; for (int i = 0; i < resolutions.Length; i++) { string option = resolutions[i].width + " x " + resolutions[i].height; options.Add(option); if (resolutions[i].width == Screen.width && resolutions[i].height == Screen.height) { currentResolutionIndex = i; } } resolutionDropdown.AddOptions(options); resolutionDropdown.value = currentResolutionIndex; resolutionDropdown.RefreshShownValue(); } public void SetResolution(int resolutionIndex) { Resolution resolution = resolutions[resolutionIndex]; Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen); } public void SetFullScreen (bool isFullScreen) { Screen.fullScreen = isFullScreen; } } Note: If you were to build and run this using the tutorial above, you'd get multiple options of the same resolutions, because the refreshrate is recognized by the engine but isn't displayed via the options. My problem is that I'm all too new to programming and unity to figure out what to do in order to filter out the refreshrates from the options list provided to the player. Help? Thanks!
Hope this helps others! For Audio to work, Create a "Resources" folder in Assets, and put the new mixer in. In code Awake() throw the following: AudioMixer mixer = Resources.Load("Mixer_Main") as AudioMixer; audioSource.outputAudioMixerGroup = mixer.FindMatchingGroups("Master")[0];
Thanks for the tutorial I'm getting the following error: NullReferenceException: Object reference not set to an instance of an object SettingsMenu.Start () (at Assets/UI/Scripts/SettingsMenu.cs:20)
by the way guys, if you cannot drag in the resolution drop down, you probably have a text mesh pro dropdown one. To solve this you can do 'public TMPro.TMP_Dropdown resolutionDropdown;' instead of the 'public Dropdown resolutionDropdown'. I hope this helps on anyone who is stuck.
You're a life saver
nice,
Thank you for your help
Thank you so much
You are the king of mankind
You're the best!
Dude every time i need to learn something, i go on youtube and every time, you make a video about what i needed at that moment, you kidda scary tho
Lol yall crazy lol
Elvishious the fbi man tells him
for everyone who's wondering, there is actually a tool that let's you know what people search the most :)
@@NicoFye Yeah it's called Google trends
@@ariarichards- yep
0:00 Intro
1:13 Volume
5:36 Graphics
7:48 Full Screen
9:05 Resolution
Thx man, now that they are not working as a youtuber anymore i dont feel guilty about not watching the whole vid lol
Someone get this man a cookie!
@Ninja Boy you're probably doing something wrong then.
С этой связкой все стало проще и эффективнее, спасибо за советы!
Small tip
Select the audiosource you want to control volume > Output > None→Master(AudioMixer). :D
Thank you!
thx
Thank you!
make this top comment
Hey man, I followed the tutorial step by step and even followed your comment. Still my slider seems to have no effect on the volume. Any suggestions?
For the resolutions option, if anybody is seeing a lot of seemingly duplicate options (I was), it's because of refresh rates - you have 1920x1080@60hz and 1920x1080@144hz for example. What I did was add the refresh rate into the dropdown text options:
string option = resolutions[i].width + " x " + resolutions[i].height + " @ " + resolutions[i].refreshRate + "hz";
Thank you!
@WasNeverBrandon No idea, but there definitely is a way.
I literally just switched back from my Unity program to google "why do i have duplicate resolutions?" Just to see your comment conveniently right before I clicked away. Bless your soul, you beautiful bastard! Thank you!
Thank you bro!
this is exactly what I was looking for
At 14:30 there´s a mistake in the script. He compares resolution[i] with Screen.currentResolution but that´s wrong. CurrentResolution gives the Resolution of the monitor but we want to compare it with the Resolution of the window in case we change the scene. That´s why we have to compare resolution[i].width with Screen.width and resolution[i].height with Screen.height.
Patrick H YOU HAVE SAVED ME THANK YOU VERY MUCH
i love you. this video assisted me in creating my first project and this was a huge stuck. thank you
Thanks a bunch man! i was wondering why my game kept resizing to full screen when I opened my settings lol
Could you copy full script with resolution for me, becouse im having some trouble.
love you my dude, you saved my life :D
At 5:10 use
audioMixer.SetFloat("Volume", Mathf.Log10(volume) * 20);
instead since the audiomixer volume is not linear
Edit: make sure the varibles match yours ie. same caps and spellings
Thanks dude. Solved a problem I was having.
Thank you!
Thank you. For this to work the Slider object must have Min and Max values of 0.0001 and 1 respectively.
@Zoom the second time its lower case
this only works if you change the "Volume" to "volume"
it took me 10 minutes to figure out that the "Volume" wasn't supposed to be caps.
Just wanted to let you know your tutorials are phenomenal!
I really appreciate the way you add in Debug.Logs as you go so we can see it working as we go rather than just hoping it all works at the end of the tute.
Stay awesome man!
We asked for it, we got it, we enjoy it. :D
...... This is hardly a settings menu, what about aspect ratio, AA, Different volume settings for like music/sfx/master volume, what about controler and keyboard binding, or what about SAVING the settings for the next time a player opens the game........
- Aspect ratio is just a modified resolutions dialog with resolution shown in lower fractions.
- The AA can be accessed through the post-processing stack, which I believe he has done a tutorial on already.
- The different volume settings would be done by sending AudioSource sounds to specific mixers instead of master (SFX mixer, Music mixer) and then modifying them instead of the master as he did in this video.
- The controller and keyboard bindings can be accessed and modified (with much more work) through the Input class etc.
- Saving the settings is just using PlayerPrefs, which he has done a tutorial on already.
Yes because telling someone what they are is totally the same thing as showing someone how to set them up........
Watch Brackey's high score tutorial and you have your answer for both how to save custom prefs into a prefs and load it back. In his previous tutirials you can also find the answer how to detect inputs, keyress etc and change those settings. Then just combine all of them together and you can get a fully functional options menu :)
brian ou have to learn a few things by you own...
If your slider is affecting the audio mixer values but not changing the sound volume of your audio, you have to drag the mixer into the slot of your audio clip on the inspector to affect the actual sound of each clip.
I know this was 3 months ago but thank you so much
thanks 👍
thank you so much
I dont get what you mean where do i drag the audio mixer
@@mcsween4593 It sounds like you have brand-new understanding of the Unity menus. I think you need to do more beginner-friendly tutorials to get better familiarity.
Brackeys: Its an amazing pack thats free on the asset store
The asset store: That'll be $25 please
True, I dont know which asset to use...
@@infleo23 bro u can just draw the them urself its easy
:)
@@aminkafnaweez2595 wait.. is it really easy???
@@aminkafnaweez2595
you underestimate just how bad some of us are at art.
Or more importantly, how long it takes us to figure out some digital art programs.
@@redgeoblaze3752 that is why all my menus consist of tmp text with a nice gradient and a dark semi-transparent panel underneath it. Good enough looking ui and it's really easy to make.
Probably one of the few youtubers who care about their subscribers and take their feedback!
For anyone with troubles in build where the options can get duplicated in the dropdown; this is in fact not a bug, it is due to the varying refresh rates available. Unity editor has a consistent 60Hz, but when an application is built, there can be multiple differing rates between the same resolution.
A fix can be just adding the refresh rate to the option:
string option = resolutions[i].width + " x " + resolutions[i].height + ", " + resolutions[i].refreshRate + "Hz";
Is there a way to do it without the refresh rates? I tried comparing the old vs new value, got the drop down list to be only unique refresh rates... but when I select one, I guess it takes it's index form the drop down and applies it to the available resolutions.
You are the best, Brackeys !
Hi! Thanks for your video! I've got something you might find useful.
Instead of this:
if(resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height)
You can use the Equals method:
if(resolutions[i].Equals(Screen.currentResolution))
It compares objects and returns true, if their fields are equal.
Hope it might help someone to shorten their code!
Евгений Кучерявый I think == is an implicit .equals call so you can just directly use ==
== is slower than .Equals, his comment deserves more likes.
Do you still need the last 3 lines:
m_ResolutionDropdown.AddOptions(m_Options);
m_ResolutionDropdown.value = m_CurrentResolutionIndex;
m_ResolutionDropdown.RefreshShownValue();
@@awawa5594 yes
For everyone who gets the same resolution on the dropdown even if they already changed it:
This happens when on window mode. The Screen.currentResolution will get the 'desktop resolution' instead of the game's current resolution.
To fix this, simply change:
` if(_resolutions[i].width == Screen.currentResolution.width && _resolutions[i].height == Screen.currentResolution.height) `
TO
` if(_resolutions[i].width == Screen.width && _resolutions[i].height == Screen.height) `
If you didn't get it, change "Screen.currentResolution.width" to "Screen.width" (and also height) during the if statement on the for loop. This will get the game's current resolution.
God Bless and Happy Coding! =)
Holy hell this solved all my problems.
it would save everything but as soon as a scene loaded it changed the resolution
@@tophatsntales Happy to help!
what canvas settings did you have? mine doesnt scale properly and the resolution gets considerably lower if you pick anything but default
If you are using a TextMeshPro DropDown instead of the default Dropdown change:
public DropDown resolutionDropdown;
to
public TMP_Dropdown resolutionDropdown;
and make sure that you have
using TMPpro; at the top of your script
wow.. thx a lot bro.. I was wondering what went wrong for a sec lol
Thx, help me a lot
legend
I came here looking for a brave soul that solved my problem without me asking, internet delivered once again... Thanks man!
Thx, man, but 1 mistake using TMPro; without "p"
It's true what they all say, you are THE Unity guy.
Sure I know others exist, but the sheer amount of topics you discuss, from 2d to 3d, to settings and multiplayer. Thanks so much!
It's been long overdue for me, but FINALLY getting into Unity and C# :D
If it weren't for Brackeys, not only would I have maybe thought about giving up Game developing, thinking it would be too boring or difficult, or I would have kept doing it but never find so much joy in learning the basics. Thanks man!
YOU ARE BADASS MAN!! I REALLY LOVE YOU DUDE!
If you want to set the default quality to high for instance you can do that within the dropdown component by setting 'value' to 2. I struggled with this a bit at first :P
Thanks!
@ 11:45 - 12:13 try this line instead:
string option = resolutions[i].width + " x "+ resolutions[i].height +" @ " +resolutions[i].refreshRate + " Hz";
This will populate the list nicely with refreshRate information intact
edit: not sure yet how to apply the refresh rate as well.
if brackeys doesn't have a tutorial on it, it can't be done. this guys saved me so many headaches
This is what i love about Brackeys, The quality of their tutorials.
if anyone has errors in their script, try this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;
using TMPro;
public class SettingsMenu : MonoBehaviour{
public AudioMixer audioMixer;
public TMP_Dropdown resolutionDropdown;
Resolution[] resolutions;
void Start ()
{
resolutions = Screen.resolutions;
resolutionDropdown.ClearOptions();
List options = new List();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + "x" + resolutions [i].height;
options.Add(option);
if (resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height)
{
currentResolutionIndex = i;
}
}
resolutionDropdown.AddOptions(options);
resolutionDropdown.value = currentResolutionIndex;
resolutionDropdown.RefreshShownValue();
}
public void SetResolution (int resolutionIndex)
{
Resolution resolution = resolutions[resolutionIndex];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
}
public void SetVolume(float volume)
{
audioMixer.SetFloat("volume", volume);
}
public void SetQuality (int qualityIndex)
{
QualitySettings.SetQualityLevel(qualityIndex);
}
public void SetFullscreen (bool isFullscreen)
{
Screen.fullScreen = isFullscreen;
}
}
(the text mesh pro is only if you are using it)
Thank you so much, I wasn't able to do resolution dropdown.
thanks, your a life saver. i dont know why mine wasnt working
We need more people like you.
To people like me who's having trouble with the volume here's something that works:
public AudioMixer audioMixer;
[SerializeField] AudioSource audioSrc;
public float Nvolume = 1f;
void Update()
{
audioSrc.volume = Nvolume;
}
public void SetVolume(float volume)
{
Nvolume = volume;
audioMixer.SetFloat("volume", Nvolume);
}
TKS
My GOAT, 6 years later and all of this is still helpful
I almost never comment on videos but dude you just saved my programming project!
1:15 Volume
5:40 Graphics
7:50 Fullscreen
9:15 Resolution
If you see the bar in the MainMixer go up and down but the volume doesn't change you have to add:
public AudioMixerGroup mixerGroup; in your AudioManager script and then inside the foreach(Sound s in sounds) after the s.source = gameObject.AddComponent();
you have to put s.source.outputAudioMixerGroup = mixerGroup; after that open the MainMixer icon in your assets and drag the "Master" inside the public mixerGroup in editor!
tysm!
I'm always so happy when I finish writing the scripts and there are no errors
Still the greatest source of info on internet
For those whose volume doesn't change after using the slider, add this to your code:
AudioMixer audioMixer = Resources.Load("MainMixer");
AudioMixerGroup[] audioMixGroup = audioMixer.FindMatchingGroups("Master");
audioSource.outputAudioMixerGroup = audioMixGroup[0];
Also, you have to go to the audiosource component of the audioclip you want to lower the sound of and change the output section to Master(AudioMixer).
Thanks!
if anyone was wondering, this is how i think is an easy way to use the volume slider:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OptionMenu : MonoBehaviour
{
public void SetVolume(float volume)
{
AudioListener.volume = volume;
}
}
hope it helped!
Lifesaver
Honestly, without your tutorials i would never finish my game. BIG THANK TO YOU!
Can i play your game?
i also want to play your game :>
he just a big brain master of all unity the god of all dev games
So I know this is an old video, but the Graphics dropdown only actually works when my mouse is hovering over the Quality section in the Project Settings tab
Love the tutorial. Wish you were still making them.
Dude, you don't even know how your tutorials have been helping me, thanks.
This is actually way easier than I thought it would be
remember to Increase volume on "Audio Mixer", and add Output -> Master to your "Audio source" component... :D
Thank you, you saved my life!! :D
THANK YOU SO MUUUUUUUUCHHHHHHHHHHHHHHHH
can you make a tutorial on how to save these settings when the game gets closed? would this also apply to other things in the game (lives, unlocked levels, etc.)
so unity doesn't load these settings after restart? did you check it?
He did a video on saving and loading values. Maybe you want to check that out.
yes i need that too
@@Definitely_a_Fox can you please give me the link?
@@Croccolucho Okay, a quick look through their video''s was all you needed to do.
ua-cam.com/video/XOjd_qU2Ido/v-deo.html
Hey you! Having issues with the Volume Slider not working because you're using DontDestroyOnLoad() to keep music between scenes? I gotchu.
In your AudioManager script, add this :
public AudioMixerGroup mix;
and in your foreach (Sound s in sounds), add this:
s.source.outputAudioMixerGroup = mix;
You can change the variable names as needed of course - the main idea is that A) Unity needs to be able to grab the proper Audio Mixer item through code, even when switching scenes, and B) you need to use the outputAudioMixerGroup functionality in Sound (s.source in the above) to edit the Mixer controls from the code! Hope this helps you solve this bug faster than I did lol
THAAAAANKS TEACHER BRACKEYS
Please make a tutorial on how to map controller input.
it's in project settings > Input
dat christmas hat tho :D
TimTube i thought it was judge hair 😀
Lol deutscher iz da
Hey guys just to point out if your using a TMP dropdown you must put
Using TMPro; At The Top
And
Public TMP_Dropdown resolutionDropdown;
Hope This Helps Someone
Exactly what I was looking for. Thank you very much!
1 second in: I love that hat!
You can also save all theses values in the PlayerProperties for load the settings each time you change or restart scenes
How? It doesnt work for me
No offense to you Brackeys
public TMPro.TMP_Dropdown resolutionDropdown;
In case you are using a newer Unity build, and can't drag and drop the Dropdown object in the Inspector
DUUUDE, just arrived at the point in my personal project where I have to implement the settings menu! Best timing ever!
To fix the bug with repeat resolution you need to disable the extra support for the aspect ratio in the player settings. After that, the bug with the rotation resolution will be lost. P.S. sorry for the bad english.
People need it in the top!
thanks a ton!
I cant find the extra support T_T, Help
@@moenator509 me too :(
@@zhuohuichen9444 The solution is pretty simple actually the duplicates are different refresh rates for the resolutions, since brackeys only picked the sizes of width and height in the string you can't see then you can keep the duplicates and add the refresh rates using something like string option = resolutions[i].ToString();
or filter all non-60hz results using
resolutions = Screen.resolutions.Where(resolution => resolution.refreshRate == 60).ToArray(); istead of resolutions = Screen.resolutions; just make sure you are using System.Linq o/
@@mikecastilho1010 Also you can do this
List options = new List();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + "x" + resolutions[i].height + ":" + resolutions[i].refreshRate + "Hz";
options.Add(option);
if(resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height && resolutions[i].refreshRate == Screen.currentResolution.refreshRate)
{
currentResolutionIndex = i;
}
}
resolutionDropdown.AddOptions(options);
resolutionDropdown.value = currentResolutionIndex;
resolutionDropdown.RefreshShownValue();
public void SetResolution(int resolutionIndex)
{
Resolution resolution = resolutions[resolutionIndex];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen, resolution.refreshRate);
}
I couldn't stop laughing at the start of the video!
Nice look Brackeys :)
Dude u are so great, I love these tutorials, gonna pass my uni degree based on half of this stuff 😂😂 keep it up 😍
Spanish: El mejor tutorial de Unity es este. Yo pude programar con exito el menu de mi juego. Muchas gracias, saludos desde Colombia. English: The best Unity tutorial is this one. I could reprogram sucesfully the menu of my game. Thank you very much, greatings for Colombia. ☺😀👏👍
sorry but i have a problem when my option menu is loaded after playing one scene, it gets to default..(which is high)
Make Tutorial about when you press esc you can resume game,quit,and option
He explain this in one of the "Tower Defense" videos. In this one ua-cam.com/video/789gM9R3htc/v-deo.html
I just found this channel yesterday this is so helpful and amazing. I don't know how else to thank you as soon as I have a stable income I will become a patron supporter!!!
Loving these UI tutorials. Keep 'em coming!!!
on Low Quality my Images and Fonts are the same quality as in High. How can I change this?
In dropdown, change the value to 2
@@muhammadalfin2691 which value tho
I’m good at programming, especially 2d player movement but when it comes to settings, brainUnderstands = false;
Amazing tutorial, helped me get through volume slider and graphics options, thank you
Having one issue and have not been able to fix it. if you have it set to window mode and open the settings menu it changes the resolution back to what your screen is.
For those of you getting several of the same resolutions in your resolution drop down, you can get rid of them by going into Edit, Project Settings, Player, Resolution and Presentation and find the Support Aspect Ratios, then untick 4:3, 5:4, and other. You will no longer have the smaller number of resolutions but you won't have any duplicates. The lowest resolution you can then choose is 1280 x 720 (or at least it is for me). If you need something smaller, you may have to do some coding or live with the duplicates..
when i use the slider the audio mixer changes but the sound does not increase or decrease at all
I gave same problem.
i know u wrote it 8 months ago, but did u find solution?
@@kondzio3500 sure, go to your audio source, there should be a slot for an audio mixer. This is to tell which sound to mute and which to not, you can have 2 audio mixers: music and sfx, and 2 sliders and that is so when you mute music sfx doesnt get affected and this is the solution
I was just looking for this! Thank you yet again Brackeys!!!!!
five years later this is the top of the top
The Ultimate Game UI costs now😭
nOOOOOOOO!!!!!
I know, its so annoying
It's 25$😭
NO GOD! NO GOD! PLEASE NO NO NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
@@west770 I mean it would be completely okay if it was not free in the very beginning. But he changed the price right after this video (it is 2nd time I am watching this video). It is not a nice thing to do.
Set the volume slider to go from 0 to 1 and use this code to have a linear sound slider:
public void SetVolume(float decimalVolume)
{
var dbVolume = Mathf.Log10(decimalVolume) * 20;
if (decimalVolume == 0.0f)
{
dbVolume = -80.0f;
}
audioMixer.SetFloat("volume", dbVolume);
}
Thanks dude
Thx bro you always been there helping even tho you gone now you still helping people
Best tutorial i have ever seen about unity's ui. Nice.
1:03 was free, feelsbadman
Yeah probs got an influx of traffic from this vid and decide to price it up :(
FeelsOkayMan there are probably better free alternatives
Nice tutorial, but I am a bit surprised that it didn't touch upon the volume slider being logarithmic (due to it being tied with the sound in dB). The way it is showcased here, you get a very sensitive slider, which is not very user friendly at all
You're so very right, do you have a working solution of how to modify it to work perfectly from 0% to 100% of volume?
@@whereistheguru. try this
audioMixer.SetFloat("volume", Mathf.Log10(volume) * 20);
[be aware of variable names]
the best channel i learnt from it for ever
Can't thank you enough for this! Didn't expect to learn anywhere near this much!
Does anyone has the same bug with builded version in resolution dropdown, where some resolutions are duplicated? You can see same in video (16:23) 720 x 480, 720 x 480. Btw thank you for your professional work, you are awesome:)
For me, all the refresh rates are the same (40Hz)! Any idea as to why?
As much as I used to love (and I still do) your videos teaching us about this engine, the only negative thing you have is that you are a little bit way too fast! Sometimes I can't follow up with what is being said, otherwise your videos are brilliant!
Explore17 You can always change the speed of the video :P
This video has been really really helpful! I tried to make an option menu, and some stuff didn't work, after watching this video, I found what I did wrong. Thanks, Brackeys!
Love the christmas hat btw
THANKS A LOT MAN I WOULD HAVE STRUGGLED WITH THIS FOR AGES IF YOU WOULD WERE NOT THERE!!
5:36 For some reason, when I drag the handle, it either goes to 0 or -80 but never in between P:
I dont know why, but my graphic dropdown wount work. And i tried everything! Can someone Help me?
Change the value of the dropdown
@@baconslayer I tried this and it did nothing. I am having the same problem and all it did was change the default of the dropdown.
@@GontyWasHere is the dropdown Text mesh pro?
@@GontyWasHere ok so first put at the top of your code put using TMPro now when your referencing the dropdown put public TMP_Dropdown resolutiondropdown
@@baconslayer I already did all that. also, I am talking about the graphics dropdown, not the resolution dropdown.
Does the settings save when quit game
i had issue with my text being crisp and clear in the editor but blurried when building the game , this totally fixed it AND it wasn't even related to that LOL! thanks brackeys you the man
the audio slider does not saved when changing scenes, looks like a bug.... can you combine this volume slider with another tutorial AudioManager singleton ?
i consider myself new to coding and unity overall and even i know this is just sloppy. like you know what problems will happen before they even happen type of sloppy.
@@Racools It changes when going to new scenes because the options aren't being saved. You'll need to implement a save and load system for settings
I second this question. Would like a tutorial of the audio mixer (or the slider) working with AudioManager
@@XiaoZong322 Brackeys is good and all, but most of times he doesn't show all nuances of his scripts and how to fix simple problems. You will need to jump around UA-cam to find solutions to very simple problems arising from his scripts to fix them. Here what i found and used. First link to slider problem (slider doesn't work properly - like starting to tune down sound only after 50% of slider) and second video about mute button. Hope that helps.
gamedevbeginner.com/10-unity-audio-tips-that-you-wont-find-in-the-tutorials/ - 9-th tip, slider problem.
ua-cam.com/video/OeZuwgG6HJM/v-deo.html - mute button video.
try this guys :
ibb.co/GFCWS2v
I was confused why it wasn't working and found out why
In audio source you need to click the circle on the end of output and then hit master
Thank you
@@thea.mgamer Yup :D
Never thought I'd be taking lessons from one of Santa's little elves.
hmm, I did everything like you showed in this video and my master volume changes with volume slider, but music in my game doesn't change at all (and other sound effects as well)! That is very weird and I am stuck 🤔
found the solution? cause i think i have the same thing; and nothing seems to work...
Yeah, in Audio Source Component (where you set your audio) add MainMixer->Master in the Output.
Thank you so much! that was exactly what i did wrong.
how did you connect the audio in the slider?
You just me a lot of headache and time.. Thank you, you goddamn bloody legend
I have ALWAYS wanted to make a rhythm game! Like those Hatsune Miku Diva games for PS4. However, it seems really complicated with how to make it all works. Can you explain the basics for a rhythm game? - How to force press of certain buttons, multiple buttons, timing rate (cool, fine, sad, worst etc), keeping a combo/breaking a combo, hold notes and etc. You would really be of help! :D
When I build and run my project in unity , dropdown UI element don't show arrow on screen, so how can select options?
Everything works perfectly and so simple! Thank you so much, with this video today i built the game for the first time.
for some reason i see 4 - 8 of the same resolutions when i use the dropdown, fixes?
Same problem. Any fix?
Yellow GD dont worry, when u build the game its good.
nope still a problem
really?, mine just got Fixed so i dont think i can help you much on this
Having the same problem, works good at editor, but there is some same resolutions at the build
I only can choose SetVolume(float) i dont have the dynamic float could someone help me?
i am having the same problem . It might be the new Unity Versions that are causing the problem
I cannot see your code but one possible difference could be, that you are using private variables and [SerializeField] to make them visible in the editor. But you really have to use public variables here. I am using Unity 2019.1 and still have those fields, Brackeys showed in his tutorial.
HARDgames i used another tutorial how to do it and it worked without using dynamics
@@imvanishr8641 what tutorial did u use?
Great video! Exactly what I was looking for today. Keep up the awesome work man. Thank you.
it's so insane. I just made a game in the 2-week holidays because of you?
Thanks so much stranger. I mean god brackeys =) haha
Edit: The code brackey's provided (without) some of the options.
Hello! Does anyone know how I would edit my code in order to filter out any refreshrates other than 60Hz? The code brackey's provided is down below:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OptionsMenu : MonoBehaviour
{
public Dropdown resolutionDropdown;
Resolution[] resolutions;
void Start()
{
resolutions = Screen.resolutions;
resolutionDropdown.ClearOptions();
List options = new List();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + " x " + resolutions[i].height;
options.Add(option);
if (resolutions[i].width == Screen.width && resolutions[i].height == Screen.height)
{
currentResolutionIndex = i;
}
}
resolutionDropdown.AddOptions(options);
resolutionDropdown.value = currentResolutionIndex;
resolutionDropdown.RefreshShownValue();
}
public void SetResolution(int resolutionIndex)
{
Resolution resolution = resolutions[resolutionIndex];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
}
public void SetFullScreen (bool isFullScreen)
{
Screen.fullScreen = isFullScreen;
}
}
Note: If you were to build and run this using the tutorial above, you'd get multiple options of the same resolutions, because the refreshrate is recognized by the engine but isn't displayed via the options. My problem is that I'm all too new to programming and unity to figure out what to do in order to filter out the refreshrates from the options list provided to the player.
Help? Thanks!
List options = new List();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + "x" + resolutions[i].height + ":" + resolutions[i].refreshRate + "Hz";
options.Add(option);
if(resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height && resolutions[i].refreshRate == Screen.currentResolution.refreshRate)
{
currentResolutionIndex = i;
}
}
resolutionDropdown.AddOptions(options);
resolutionDropdown.value = currentResolutionIndex;
resolutionDropdown.RefreshShownValue();
public void SetResolution(int resolutionIndex)
{
Resolution resolution = resolutions[resolutionIndex];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen, resolution.refreshRate);
}
Code doesn't work for me, If I try to make a list for my resolutions, I can't get the list to show up in visual studio
Hope this helps others! For Audio to work, Create a "Resources" folder in Assets, and put the new mixer in. In code Awake() throw the following:
AudioMixer mixer = Resources.Load("Mixer_Main") as AudioMixer;
audioSource.outputAudioMixerGroup = mixer.FindMatchingGroups("Master")[0];
Where's Awake in the code i cant find it
never mind but there is red line under "outputAudioMixerGroup" idk what to do about it
just saw this tutorial and implemented it! new patreon member incoming !!!
Thanks for the tutorial I'm getting the following error:
NullReferenceException: Object reference not set to an instance of an object
SettingsMenu.Start () (at Assets/UI/Scripts/SettingsMenu.cs:20)
Same but i dont know how to fix it