namespace Photon.Voice { using System; using System.IO; using Photon.Realtime; using UnityEngine; /// /// Collection of connection-relevant settings, used internally by PhotonNetwork.ConnectUsingSettings. /// /// /// Includes the AppSettings class from the Realtime APIs plus some other, PUN-relevant, settings. [Serializable] public class PhotonAppSettings : ScriptableObject { [Tooltip("Core Photon Server/Cloud settings.")] public AppSettings AppSettings; /// Sets appid and region code in the AppSettings. Used in Editor. public void UseCloud(string cloudAppid, string code = "") { this.AppSettings.AppIdRealtime = cloudAppid; this.AppSettings.Server = null; this.AppSettings.FixedRegion = string.IsNullOrEmpty(code) ? null : code; } static private PhotonAppSettings instance; static public PhotonAppSettings Instance { get { if (instance == null) { LoadOrCreateSettings(); } return instance; } } const string SettingsFileName = "VoiceAppSettings"; const string PhotonVoiceFolderGUID = "d3a9df3027b4a45679a2a3e978dde78e"; public static void LoadOrCreateSettings() { // try to load the resource / asset instance = (PhotonAppSettings)Resources.Load(SettingsFileName, typeof(PhotonAppSettings)); if (instance != null) { return; } // create the ScriptableObject if it could not be loaded if (instance == null) { instance = (PhotonAppSettings)ScriptableObject.CreateInstance(typeof(PhotonAppSettings)); if (instance == null) { Debug.LogError("Failed to create ServerSettings. PUN is unable to run this way. If you deleted it from the project, reload the Editor."); return; } } #if UNITY_EDITOR // in the editor, store the settings file as it could not be loaded // don't save the settings while Unity still imports assets if (UnityEditor.EditorApplication.isUpdating) { UnityEditor.EditorApplication.delayCall += delegate { LoadOrCreateSettings(); }; return; } var voicePath = UnityEditor.AssetDatabase.GUIDToAssetPath(PhotonVoiceFolderGUID); if (voicePath == null || voicePath == "" || voicePath.Contains("Packages")) { voicePath = "Assets/Photon/PhotonVoice"; } string path = Path.Combine(voicePath, "Resources", SettingsFileName + ".asset"); string dir = Path.GetDirectoryName(path); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); UnityEditor.AssetDatabase.ImportAsset(dir); } if (!File.Exists(path)) { UnityEditor.AssetDatabase.CreateAsset(instance, path); } UnityEditor.AssetDatabase.SaveAssets(); // if the project does not have PhotonServerSettings yet, enable "Development Build" to use the Dev Region. UnityEditor.EditorUserBuildSettings.development = true; #endif } /// String summary of the AppSettings. public override string ToString() { return "VoiceAppSettings: " + this.AppSettings.ToStringFull(); } } }