修改设置界面
This commit is contained in:
@@ -0,0 +1,312 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.Audio;
|
||||
using TMPro;
|
||||
|
||||
namespace PaulosAudioMenu
|
||||
{
|
||||
public class AudioSettingsMenu : MonoBehaviour
|
||||
{
|
||||
[Header("The Audio Mixer Controller you are using")]
|
||||
[SerializeField]
|
||||
private AudioMixer masterMixer;//mixer prefab
|
||||
|
||||
[Header("Select wich settings you want to use. Settings set to[UnUsed] can be removed from/disabled in the menu UI")]
|
||||
[Space(10)]
|
||||
[SerializeField]
|
||||
[Tooltip("Changing SpeakerMode Will Reset/Stop all current playing audio !!")]
|
||||
private SettingsUsedState speakerModeUsed;
|
||||
[SerializeField]
|
||||
private SettingsUsedState musicVolumeUsed, fxVolumeUsed, mainVolumeUsed, muteUsed;
|
||||
|
||||
[Header("UI elements references")]
|
||||
[Space(10)]
|
||||
[SerializeField]
|
||||
private TMP_Text mainVolumeText;
|
||||
[SerializeField]
|
||||
private TMP_Text fxsVolumeText, musicVolumeText, speakerModeText;
|
||||
[SerializeField]
|
||||
private Slider mainVolumeSlider, fxsVolumeSlider, musicVolumeSlider;
|
||||
[SerializeField]
|
||||
private Toggle muteToggle;
|
||||
|
||||
//default values
|
||||
private bool isMuted = false;
|
||||
private float currentMainVolume = 1, currentFXsVolume = 1, currentMusicVolume = 1;
|
||||
private int currentSpeakerMode = 1;//stereo
|
||||
|
||||
private bool initiated = false, isApplying;
|
||||
|
||||
// Use this for initialization
|
||||
void Start()
|
||||
{
|
||||
LoadMenuVariables();//needs to be in Start, masterMixer not ready yet in Awake
|
||||
|
||||
initiated = true;
|
||||
}
|
||||
|
||||
public void UI_ToggleMute()
|
||||
{
|
||||
if (muteUsed == SettingsUsedState.notUsed || isApplying)
|
||||
return;
|
||||
|
||||
isMuted = !isMuted;
|
||||
|
||||
if (isMuted)
|
||||
masterMixer.SetFloat("mainVolume", -80);
|
||||
else masterMixer.SetFloat("mainVolume", Mathf.Log10(currentMainVolume) * 20);
|
||||
}
|
||||
|
||||
public void UI_SetMainVolume(Slider _slider)
|
||||
{
|
||||
if (mainVolumeUsed == SettingsUsedState.notUsed || isApplying)
|
||||
return;
|
||||
|
||||
currentMainVolume = _slider.value;
|
||||
|
||||
if (!isMuted)
|
||||
masterMixer.SetFloat("mainVolume", Mathf.Log10(currentMainVolume) * 20);
|
||||
|
||||
mainVolumeText.SetText("{0:0}%", _slider.value * 100);
|
||||
}
|
||||
|
||||
public void UI_SetFXsVolume(Slider _slider)
|
||||
{
|
||||
if (fxVolumeUsed == SettingsUsedState.notUsed || isApplying)
|
||||
return;
|
||||
|
||||
currentFXsVolume = _slider.value;
|
||||
masterMixer.SetFloat("fxVolume", Mathf.Log10(currentFXsVolume) * 20);
|
||||
|
||||
fxsVolumeText.SetText("{0:0}%", _slider.value * 100);
|
||||
}
|
||||
|
||||
public void UI_SetMusicVolume(Slider _slider)
|
||||
{
|
||||
if (musicVolumeUsed == SettingsUsedState.notUsed || isApplying)
|
||||
return;
|
||||
|
||||
currentMusicVolume = _slider.value;
|
||||
masterMixer.SetFloat("musicVolume", Mathf.Log10(currentMusicVolume) * 20);
|
||||
|
||||
musicVolumeText.SetText("{0:0}%", _slider.value * 100);
|
||||
}
|
||||
|
||||
//Changing SpeakerMode Will Reset/Stop all current playing audio !!
|
||||
public void UI_SetSpeakerMode(int _speakerMode)
|
||||
{
|
||||
if (speakerModeUsed == SettingsUsedState.notUsed || isApplying)
|
||||
return;
|
||||
|
||||
currentSpeakerMode = _speakerMode;
|
||||
|
||||
AudioConfiguration config = AudioSettings.GetConfiguration();
|
||||
|
||||
AudioSpeakerMode wantedMode = config.speakerMode;
|
||||
string wantedModeText = "";
|
||||
|
||||
switch (currentSpeakerMode)
|
||||
{
|
||||
case 0:
|
||||
wantedMode = AudioSpeakerMode.Mono;
|
||||
wantedModeText = "Mono";
|
||||
break;
|
||||
case 1:
|
||||
wantedMode = AudioSpeakerMode.Stereo;
|
||||
wantedModeText = "Stereo";
|
||||
break;
|
||||
case 2:
|
||||
wantedMode = AudioSpeakerMode.Quad;
|
||||
wantedModeText = "4.4";
|
||||
break;
|
||||
case 3:
|
||||
wantedMode = AudioSpeakerMode.Surround;
|
||||
wantedModeText = "Surround";
|
||||
break;
|
||||
case 4:
|
||||
wantedMode = AudioSpeakerMode.Mode5point1;
|
||||
wantedModeText = "6.5.1";
|
||||
break;
|
||||
case 5:
|
||||
wantedMode = AudioSpeakerMode.Mode7point1;
|
||||
wantedModeText = "8.7.1";
|
||||
break;
|
||||
case 6:
|
||||
wantedMode = AudioSpeakerMode.Prologic;
|
||||
wantedModeText = "Prologic";
|
||||
break;
|
||||
}
|
||||
|
||||
if (wantedMode != config.speakerMode)
|
||||
{
|
||||
config.speakerMode = wantedMode;
|
||||
speakerModeText.text = wantedModeText;
|
||||
|
||||
AudioSettings.OnAudioConfigurationChanged += OnSpeakerModeChanged;
|
||||
AudioSettings.Reset(config);
|
||||
}
|
||||
}
|
||||
|
||||
//called when AudioMenu UIPanel is disabled or the menu is closed
|
||||
public void UI_SaveSettings()
|
||||
{
|
||||
if (!initiated)
|
||||
return;
|
||||
|
||||
SaveMenuVariables();
|
||||
}
|
||||
|
||||
private void LoadMenuVariables()
|
||||
{
|
||||
if (PlayerPrefs.HasKey("muted"))
|
||||
{
|
||||
if (mainVolumeUsed == SettingsUsedState.used)
|
||||
currentMainVolume = PlayerPrefs.GetFloat("mainVolume");//triggers the UI_SetMainVolume function
|
||||
|
||||
if (fxVolumeUsed == SettingsUsedState.used)
|
||||
currentFXsVolume = PlayerPrefs.GetFloat("fxVolume");//triggers the UI_SetFXsVolume function
|
||||
|
||||
if (musicVolumeUsed == SettingsUsedState.used)
|
||||
currentMusicVolume = PlayerPrefs.GetFloat("musicVolume");//triggers the UI_SetMusicVolume function
|
||||
|
||||
if (speakerModeUsed == SettingsUsedState.used)
|
||||
currentSpeakerMode = PlayerPrefs.GetInt("speakerMode");
|
||||
|
||||
if (muteUsed == SettingsUsedState.used)
|
||||
isMuted = PlayerPrefs.GetInt("muted") == 1 ? true : false;
|
||||
}
|
||||
|
||||
ApplySettings();
|
||||
}
|
||||
|
||||
private void ApplySettings()
|
||||
{
|
||||
isApplying = true;
|
||||
|
||||
if (speakerModeUsed == SettingsUsedState.used)//must be first
|
||||
{
|
||||
AudioConfiguration config = AudioSettings.GetConfiguration();
|
||||
|
||||
AudioSpeakerMode wantedMode = config.speakerMode;
|
||||
string wantedModeText = "";
|
||||
|
||||
switch (currentSpeakerMode)
|
||||
{
|
||||
case 0:
|
||||
wantedMode = AudioSpeakerMode.Mono;
|
||||
wantedModeText = "Mono";
|
||||
break;
|
||||
case 1:
|
||||
wantedMode = AudioSpeakerMode.Stereo;
|
||||
wantedModeText = "Stereo";
|
||||
break;
|
||||
case 2:
|
||||
wantedMode = AudioSpeakerMode.Quad;
|
||||
wantedModeText = "4.4";
|
||||
break;
|
||||
case 3:
|
||||
wantedMode = AudioSpeakerMode.Surround;
|
||||
wantedModeText = "Surround";
|
||||
break;
|
||||
case 4:
|
||||
wantedMode = AudioSpeakerMode.Mode5point1;
|
||||
wantedModeText = "6.5.1";
|
||||
break;
|
||||
case 5:
|
||||
wantedMode = AudioSpeakerMode.Mode7point1;
|
||||
wantedModeText = "8.7.1";
|
||||
break;
|
||||
case 6:
|
||||
wantedMode = AudioSpeakerMode.Prologic;
|
||||
wantedModeText = "Prologic";
|
||||
break;
|
||||
}
|
||||
|
||||
if (wantedMode != config.speakerMode)
|
||||
{
|
||||
config.speakerMode = wantedMode;
|
||||
|
||||
AudioSettings.Reset(config);
|
||||
}
|
||||
|
||||
speakerModeText.text = wantedModeText;
|
||||
}
|
||||
|
||||
if (mainVolumeUsed == SettingsUsedState.used)
|
||||
{
|
||||
masterMixer.SetFloat("mainVolume", Mathf.Log10(currentMainVolume) * 20);
|
||||
|
||||
mainVolumeSlider.value = currentMainVolume;
|
||||
mainVolumeText.SetText("{0:0}%", mainVolumeSlider.value * 100);
|
||||
}
|
||||
|
||||
if (fxVolumeUsed == SettingsUsedState.used)
|
||||
{
|
||||
masterMixer.SetFloat("fxVolume", Mathf.Log10(currentFXsVolume) * 20);
|
||||
|
||||
fxsVolumeSlider.value = currentFXsVolume;
|
||||
fxsVolumeText.SetText("{0:0}%", fxsVolumeSlider.value * 100);
|
||||
}
|
||||
|
||||
if (musicVolumeUsed == SettingsUsedState.used)
|
||||
{
|
||||
masterMixer.SetFloat("musicVolume", Mathf.Log10(currentMusicVolume) * 20);
|
||||
|
||||
musicVolumeSlider.value = currentMusicVolume;
|
||||
musicVolumeText.SetText("{0:0}%", musicVolumeSlider.value * 100);
|
||||
}
|
||||
|
||||
if (muteUsed == SettingsUsedState.used)//must be last
|
||||
{
|
||||
if (isMuted)
|
||||
masterMixer.SetFloat("mainVolume", -80);
|
||||
else masterMixer.SetFloat("mainVolume", Mathf.Log10(currentMainVolume) * 20);
|
||||
|
||||
muteToggle.isOn = isMuted;
|
||||
}
|
||||
|
||||
isApplying = false;
|
||||
}
|
||||
|
||||
//triggered when Speakermode has changed, need to reApply the settings (changing speakermode resets all audio)
|
||||
private void OnSpeakerModeChanged(bool _wasChanged)
|
||||
{
|
||||
if (mainVolumeUsed == SettingsUsedState.used)
|
||||
{
|
||||
masterMixer.SetFloat("mainVolume", Mathf.Log10(currentMainVolume) * 20);
|
||||
}
|
||||
|
||||
if (fxVolumeUsed == SettingsUsedState.used)
|
||||
{
|
||||
masterMixer.SetFloat("fxVolume", Mathf.Log10(currentFXsVolume) * 20);
|
||||
}
|
||||
|
||||
if (musicVolumeUsed == SettingsUsedState.used)
|
||||
{
|
||||
masterMixer.SetFloat("musicVolume", Mathf.Log10(currentMusicVolume) * 20);
|
||||
}
|
||||
|
||||
if (muteUsed == SettingsUsedState.used)//must be last
|
||||
{
|
||||
if (isMuted)
|
||||
masterMixer.SetFloat("mainVolume", -80);
|
||||
else masterMixer.SetFloat("mainVolume", Mathf.Log10(currentMainVolume) * 20);
|
||||
}
|
||||
|
||||
AudioSettings.OnAudioConfigurationChanged -= OnSpeakerModeChanged;
|
||||
}
|
||||
|
||||
private void SaveMenuVariables()
|
||||
{
|
||||
PlayerPrefs.SetInt("muted", isMuted == true ? 1 : 0);
|
||||
PlayerPrefs.SetFloat("mainVolume", currentMainVolume);
|
||||
PlayerPrefs.SetFloat("fxVolume", currentFXsVolume);
|
||||
PlayerPrefs.SetFloat("musicVolume", currentMusicVolume);
|
||||
PlayerPrefs.SetInt("speakerMode", currentSpeakerMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public enum SettingsUsedState { used, notUsed };
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0cb4e34011fe11b4fbdbcd1f3918cf2b
|
||||
timeCreated: 1565937768
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 33781
|
||||
packageName: Audio Video Options/Settings Menu
|
||||
packageVersion: 4.2
|
||||
assetPath: Assets/@PaulosCreations/AudioVideoOptionsMenu/Scripts_Shared/AudioSettingsMenu.cs
|
||||
uploadId: 701258
|
||||
@@ -0,0 +1,119 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
using UnityEditor;
|
||||
using System.IO;
|
||||
|
||||
namespace PaulosMenuController
|
||||
{
|
||||
public class GameMenuController : MonoBehaviour
|
||||
{
|
||||
[Header("Should the game pause when opening the menu ?")]
|
||||
[SerializeField]
|
||||
private bool pauseOnOpen = true;
|
||||
[Space(10)]
|
||||
[SerializeField]
|
||||
private GameObject mainCanvasObj;
|
||||
[SerializeField]
|
||||
private GameObject mainMenuPanelObj, optionsPanelObj, graphicsPanelObj, audioPanelObj;
|
||||
[SerializeField]
|
||||
private GameObject closeGameImageObj;
|
||||
|
||||
private float previousTimescale;
|
||||
private bool menuOpen;
|
||||
|
||||
// Use this for initialization
|
||||
void Awake()
|
||||
{
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
mainCanvasObj.SetActive(false);
|
||||
|
||||
graphicsPanelObj.SetActive(false);
|
||||
audioPanelObj.SetActive(false);
|
||||
optionsPanelObj.SetActive(false);
|
||||
mainMenuPanelObj.SetActive(true);
|
||||
|
||||
closeGameImageObj.SetActive(false);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Escape))
|
||||
{
|
||||
if (menuOpen)
|
||||
ButtonCloseMenu();
|
||||
else ButtonOpenMenu();
|
||||
}
|
||||
}
|
||||
|
||||
public void ButtonOpenMenu()
|
||||
{
|
||||
if (pauseOnOpen)
|
||||
{
|
||||
previousTimescale = Time.timeScale;//getting the current timescale
|
||||
Time.timeScale = 0;//Pausing time
|
||||
}
|
||||
|
||||
graphicsPanelObj.SetActive(false);
|
||||
audioPanelObj.SetActive(false);
|
||||
optionsPanelObj.SetActive(false);
|
||||
mainMenuPanelObj.SetActive(true);
|
||||
|
||||
mainCanvasObj.SetActive(true);
|
||||
|
||||
menuOpen = true;
|
||||
}
|
||||
|
||||
public void ButtonCloseMenu()
|
||||
{
|
||||
if (pauseOnOpen)
|
||||
{
|
||||
Time.timeScale = previousTimescale;//unpausing time
|
||||
}
|
||||
|
||||
mainCanvasObj.SetActive(false);
|
||||
|
||||
graphicsPanelObj.SetActive(false);
|
||||
audioPanelObj.SetActive(false);
|
||||
optionsPanelObj.SetActive(false);
|
||||
mainMenuPanelObj.SetActive(true);
|
||||
|
||||
menuOpen = false;
|
||||
}
|
||||
|
||||
public void ButtonQuitGame()
|
||||
{
|
||||
closeGameImageObj.SetActive(true);
|
||||
Application.Quit();
|
||||
}
|
||||
|
||||
//for testing/Debugging.
|
||||
public void DeleteSavedSettings()
|
||||
{
|
||||
PlayerPrefs.DeleteKey("Qualitylevel");
|
||||
PlayerPrefs.DeleteKey("ResolutionX");
|
||||
PlayerPrefs.DeleteKey("ResolutionY");
|
||||
PlayerPrefs.DeleteKey("antiAliasSlider");
|
||||
PlayerPrefs.DeleteKey("RenderScale");
|
||||
PlayerPrefs.DeleteKey("WindowedMode");
|
||||
PlayerPrefs.DeleteKey("VSync");
|
||||
PlayerPrefs.DeleteKey("AntiAliaslevel");
|
||||
PlayerPrefs.DeleteKey("TextureQuality");
|
||||
PlayerPrefs.DeleteKey("AnisotropicMode");
|
||||
PlayerPrefs.DeleteKey("AnisotropicLevel");
|
||||
|
||||
PlayerPrefs.DeleteKey("muted");
|
||||
PlayerPrefs.DeleteKey("mainVolume");
|
||||
PlayerPrefs.DeleteKey("fxVolume");
|
||||
PlayerPrefs.DeleteKey("musicVolume");
|
||||
PlayerPrefs.DeleteKey("speakerMode");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 166a62881b11a2d40a1476993d43c13f
|
||||
timeCreated: 1566029363
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 33781
|
||||
packageName: Audio Video Options/Settings Menu
|
||||
packageVersion: 4.2
|
||||
assetPath: Assets/@PaulosCreations/AudioVideoOptionsMenu/Scripts_Shared/GameMenuController.cs
|
||||
uploadId: 701258
|
||||
@@ -0,0 +1,13 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
//placed on Graphics and Audio Panel with the SaveSettings function assigned to the event.
|
||||
public class OnGameobjectDisabled : MonoBehaviour
|
||||
{
|
||||
public UnityEvent OnDisabledEvent;
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
OnDisabledEvent?.Invoke();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0e5a4e23be5f9648bbe1ab9303a1064
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 33781
|
||||
packageName: Audio Video Options/Settings Menu
|
||||
packageVersion: 4.2
|
||||
assetPath: Assets/@PaulosCreations/AudioVideoOptionsMenu/Scripts_Shared/OnGameobjectDisabled.cs
|
||||
uploadId: 701258
|
||||
@@ -0,0 +1,12 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class TogglePanel : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private GameObject dropDownPanelObj;
|
||||
|
||||
public void Button_ToggleDropDownPanel()
|
||||
{
|
||||
dropDownPanelObj.SetActive(!dropDownPanelObj.activeSelf);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 672bc5c1e95b5564293a3827ada230dc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 33781
|
||||
packageName: Audio Video Options/Settings Menu
|
||||
packageVersion: 4.2
|
||||
assetPath: Assets/@PaulosCreations/AudioVideoOptionsMenu/Scripts_Shared/TogglePanel.cs
|
||||
uploadId: 701258
|
||||
Reference in New Issue
Block a user