修改设置界面

This commit is contained in:
bob
2025-05-29 18:03:24 +08:00
parent cdcb007d6d
commit f421288244
306 changed files with 41744 additions and 612 deletions

View File

@@ -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 };
}

View File

@@ -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

View File

@@ -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");
}
}
}

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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

View File

@@ -0,0 +1,12 @@
using UnityEngine;
public class TogglePanel : MonoBehaviour
{
[SerializeField]
private GameObject dropDownPanelObj;
public void Button_ToggleDropDownPanel()
{
dropDownPanelObj.SetActive(!dropDownPanelObj.activeSelf);
}
}

View File

@@ -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