From 5dc6243d563619464cac2a75a453f01fea4a6bfe Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Tue, 11 Apr 2023 17:28:43 +0800 Subject: [PATCH] SettingsMenu SettingsMenu --- Assets/TEngine/Editor/GameSettings.meta | 8 + .../Editor/GameSettings/SettingsMenu.cs | 7 + .../Editor/GameSettings/SettingsMenu.cs.meta | 11 + .../GameSettings/TEngineSettingsProvider.cs | 59 ++++++ .../TEngineSettingsProvider.cs.meta | 3 + Assets/TEngine/Editor/HybridCLR.meta | 8 + .../Editor/HybridCLR/BuildAssetsCommand.cs | 64 ++++++ .../HybridCLR/BuildAssetsCommand.cs.meta | 11 + .../Resources/TEngineGlobalSettings.asset | 47 ++++ .../TEngineGlobalSettings.asset.meta | 8 + Assets/TEngine/Runtime/GameSettings.meta | 8 + Assets/TEngine/Runtime/GameSettings/Enum.meta | 3 + .../Runtime/GameSettings/Enum/AppStageEnum.cs | 23 ++ .../GameSettings/Enum/AppStageEnum.cs.meta | 3 + .../GameSettings/Enum/ResourcesType.cs | 9 + .../GameSettings/Enum/ResourcesType.cs.meta | 3 + .../GameSettings/Enum/ServerTypeEnum.cs | 19 ++ .../GameSettings/Enum/ServerTypeEnum.cs.meta | 3 + .../Runtime/GameSettings/Framework.meta | 3 + .../Framework/FrameworkGlobalSettings.cs | 200 ++++++++++++++++++ .../Framework/FrameworkGlobalSettings.cs.meta | 3 + .../Runtime/GameSettings/HybridCLR.meta | 3 + .../HybridCLRCustomGlobalSettings.cs | 55 +++++ .../HybridCLRCustomGlobalSettings.cs.meta | 3 + .../Runtime/GameSettings/SettingsUtils.cs | 200 ++++++++++++++++++ .../GameSettings/SettingsUtils.cs.meta | 11 + .../Runtime/GameSettings/TEngineSettings.cs | 19 ++ .../GameSettings/TEngineSettings.cs.meta | 11 + 28 files changed, 805 insertions(+) create mode 100644 Assets/TEngine/Editor/GameSettings.meta create mode 100644 Assets/TEngine/Editor/GameSettings/SettingsMenu.cs create mode 100644 Assets/TEngine/Editor/GameSettings/SettingsMenu.cs.meta create mode 100644 Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs create mode 100644 Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs.meta create mode 100644 Assets/TEngine/Editor/HybridCLR.meta create mode 100644 Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs create mode 100644 Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs.meta create mode 100644 Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset create mode 100644 Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset.meta create mode 100644 Assets/TEngine/Runtime/GameSettings.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/Framework.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/HybridCLR.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs.meta create mode 100644 Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs create mode 100644 Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs.meta diff --git a/Assets/TEngine/Editor/GameSettings.meta b/Assets/TEngine/Editor/GameSettings.meta new file mode 100644 index 00000000..cf861e31 --- /dev/null +++ b/Assets/TEngine/Editor/GameSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1292f46836a1a2d4e980cc0817de46c1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Editor/GameSettings/SettingsMenu.cs b/Assets/TEngine/Editor/GameSettings/SettingsMenu.cs new file mode 100644 index 00000000..b368883e --- /dev/null +++ b/Assets/TEngine/Editor/GameSettings/SettingsMenu.cs @@ -0,0 +1,7 @@ +using UnityEditor; + +public static class SettingsMenu +{ + [MenuItem("TEngine/Settings/TEngineSettings", priority = -1)] + public static void OpenSettings() => SettingsService.OpenProjectSettings("TEngine/TEngineSettings"); +} \ No newline at end of file diff --git a/Assets/TEngine/Editor/GameSettings/SettingsMenu.cs.meta b/Assets/TEngine/Editor/GameSettings/SettingsMenu.cs.meta new file mode 100644 index 00000000..39aa9c82 --- /dev/null +++ b/Assets/TEngine/Editor/GameSettings/SettingsMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1afcc6b01c286a54d84a1c6a27deceb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs b/Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs new file mode 100644 index 00000000..703223cc --- /dev/null +++ b/Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs @@ -0,0 +1,59 @@ +using System.IO; +using UnityEditor; +using UnityEngine.UIElements; +using System.Collections.Generic; + +public class TEngineSettingsProvider : SettingsProvider +{ + const string k_SettingsPath = "Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset"; + private const string headerName = "TEngine/TEngineSettings"; + private SerializedObject m_CustomSettings; + + internal static SerializedObject GetSerializedSettings() + { + return new SerializedObject(SettingsUtils.GlobalSettings); + } + + public static bool IsSettingsAvailable() + { + return File.Exists(k_SettingsPath); + } + + public override void OnActivate(string searchContext, VisualElement rootElement) + { + base.OnActivate(searchContext, rootElement); + m_CustomSettings = GetSerializedSettings(); + } + + public override void OnGUI(string searchContext) + { + base.OnGUI(searchContext); + using var changeCheckScope = new EditorGUI.ChangeCheckScope(); + EditorGUILayout.PropertyField(m_CustomSettings.FindProperty("m_FrameworkGlobalSettings")); + EditorGUILayout.PropertyField(m_CustomSettings.FindProperty("m_BybridCLRCustomGlobalSettings")); + EditorGUILayout.Space(20); + if (!changeCheckScope.changed) return; + m_CustomSettings.ApplyModifiedPropertiesWithoutUndo(); + } + + public TEngineSettingsProvider(string path, SettingsScope scopes, IEnumerable keywords = null) : base(path, scopes, keywords) + { + } + + [SettingsProvider] + private static SettingsProvider CreateSettingProvider() + { + if (IsSettingsAvailable()) + { + var provider = new TEngineSettingsProvider(headerName, SettingsScope.Project); + provider.keywords = GetSearchKeywordsFromGUIContentProperties(); + return provider; + } + else + { + UnityEngine.Debug.LogError($"Open GameFramework Settings error,Please Create Game Framework/GameFrameworkSettings.assets File in Path GameMain/Resources/Settings"); + } + + return null; + } +} \ No newline at end of file diff --git a/Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs.meta b/Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs.meta new file mode 100644 index 00000000..f88cb196 --- /dev/null +++ b/Assets/TEngine/Editor/GameSettings/TEngineSettingsProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 09fb422339ad47ec86205963c369718b +timeCreated: 1678946531 \ No newline at end of file diff --git a/Assets/TEngine/Editor/HybridCLR.meta b/Assets/TEngine/Editor/HybridCLR.meta new file mode 100644 index 00000000..a41f1f4c --- /dev/null +++ b/Assets/TEngine/Editor/HybridCLR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68636450bb18ad54fa7896ae5b6297fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs b/Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs new file mode 100644 index 00000000..1bbb0c83 --- /dev/null +++ b/Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs @@ -0,0 +1,64 @@ +/* +using System.Collections; +using System.Collections.Generic; +using HybridCLR.Editor; +using HybridCLR.Editor.Commands; +using UnityEditor; +using UnityEngine; +using UnityGameFramework.Runtime; + +public static class BuildAssetsCommand +{ + [MenuItem("HybridCLR/Build/BuildAssets And CopyTo AssemblyTextAssetPath")] + public static void BuildAndCopyDlls() + { + BuildTarget target = EditorUserBuildSettings.activeBuildTarget; + CompileDllCommand.CompileDll(target); + CopyAOTHotUpdateDlls(target); + } + + public static void CopyAOTHotUpdateDlls(BuildTarget target) + { + CopyAOTAssembliesToAssetPath(); + CopyHotUpdateAssembliesToAssetPath(); + AssetDatabase.Refresh(); + } + + public static void CopyAOTAssembliesToAssetPath() + { + var target = EditorUserBuildSettings.activeBuildTarget; + string aotAssembliesSrcDir = SettingsUtil.GetAssembliesPostIl2CppStripDir(target); + string aotAssembliesDstDir = Application.dataPath +"/"+ SettingsUtils.HybridCLRCustomGlobalSettings.AssemblyTextAssetPath; + + foreach (var dll in SettingsUtils.HybridCLRCustomGlobalSettings.AOTMetaAssemblies) + { + string srcDllPath = $"{aotAssembliesSrcDir}/{dll}"; + if (!System.IO.File.Exists(srcDllPath)) + { + Debug.LogError($"ab中添加AOT补充元数据dll:{srcDllPath} 时发生错误,文件不存在。裁剪后的AOT dll在BuildPlayer时才能生成,因此需要你先构建一次游戏App后再打包。"); + continue; + } + string dllBytesPath = $"{aotAssembliesDstDir}/{dll}.bytes"; + System.IO.File.Copy(srcDllPath, dllBytesPath, true); + Debug.Log($"[CopyAOTAssembliesToStreamingAssets] copy AOT dll {srcDllPath} -> {dllBytesPath}"); + } + } + + public static void CopyHotUpdateAssembliesToAssetPath() + { + var target = EditorUserBuildSettings.activeBuildTarget; + + string hotfixDllSrcDir = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target); + string hotfixAssembliesDstDir = Application.dataPath +"/"+ SettingsUtils.HybridCLRCustomGlobalSettings.AssemblyTextAssetPath; + foreach (var dll in SettingsUtil.HotUpdateAssemblyFilesExcludePreserved) + { + string dllPath = $"{hotfixDllSrcDir}/{dll}"; + string dllBytesPath = $"{hotfixAssembliesDstDir}/{dll}.bytes"; + System.IO.File.Copy(dllPath, dllBytesPath, true); + Debug.Log($"[CopyHotUpdateAssembliesToStreamingAssets] copy hotfix dll {dllPath} -> {dllBytesPath}"); + } + } +} +*/ + + diff --git a/Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs.meta b/Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs.meta new file mode 100644 index 00000000..0d759b52 --- /dev/null +++ b/Assets/TEngine/Editor/HybridCLR/BuildAssetsCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b43c8d69a58c066469f4f28e310d8181 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset b/Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset new file mode 100644 index 00000000..f50bb932 --- /dev/null +++ b/Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 577471f3ecd1ec94b8a0d67218386f4a, type: 3} + m_Name: TEngineGlobalSettings + m_EditorClassIdentifier: + m_FrameworkGlobalSettings: + m_ScriptAuthor: Default + m_ScriptVersion: 0.1 + m_AppStage: 1 + m_DefaultFont: Arial + m_ResourcesArea: + m_ResAdminType: Default + m_ResAdminCode: 0 + m_ServerType: 1 + m_CleanCommitPathRes: 1 + m_InnerResourceSourceUrl: http://127.0.0.1:8088 + m_ExtraResourceSourceUrl: http://127.0.0.1:8088 + m_FormalResourceSourceUrl: http://127.0.0.1:8088 + m_AtlasFolder: Assets/AssetRaw/Atlas + m_ResourceVersionFileName: ResourceVersion.txt + CheckVersionUrl: http://127.0.0.1/Resources/{0}Version.txt + WindowsAppUrl: http://127.0.0.1 + MacOSAppUrl: http://127.0.0.1 + IOSAppUrl: http://127.0.0.1 + AndroidAppUrl: http://127.0.0.1 + m_CurUseServerChannel: + m_ServerChannelInfos: [] + m_IsReadLocalConfigInEditor: 1 + m_ConfigFolderName: Assets/AssetRaw/Configs/ + m_BybridCLRCustomGlobalSettings: + m_Enable: 0 + m_Gitee: 1 + HotUpdateAssemblies: [] + AOTMetaAssemblies: [] + LogicMainDllName: xxx.dll + AssemblyTextAssetExtension: .bytes + AssemblyTextAssetPath: Assets/AssetRaw/DLL + HybridCLRGlobalSettings: Settings/HybridCLRGlobalSettings diff --git a/Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset.meta b/Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset.meta new file mode 100644 index 00000000..69cd9055 --- /dev/null +++ b/Assets/TEngine/ResRaw/Resources/TEngineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4ca975e526dcaf4b9b9de906997f52b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Runtime/GameSettings.meta b/Assets/TEngine/Runtime/GameSettings.meta new file mode 100644 index 00000000..f0a72b02 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f7fd704edb046f49ad714c1c1c82af5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Runtime/GameSettings/Enum.meta b/Assets/TEngine/Runtime/GameSettings/Enum.meta new file mode 100644 index 00000000..221fe777 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 267688fe79c44595ab7169379b4dd8be +timeCreated: 1678945994 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs b/Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs new file mode 100644 index 00000000..b3531ca0 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs @@ -0,0 +1,23 @@ +public enum AppStageEnum +{ + /// + /// 测试版本 + /// + Debug = 1, + /// + /// 前期版本 + /// + Alpha = 2, + /// + /// 中期版本 + /// + Beta = 3, + /// + /// 后期版本 与发布版本没多大差别 + /// + Rc = 4, + /// + /// 发布版本 + /// + Release = 5 +} diff --git a/Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs.meta b/Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs.meta new file mode 100644 index 00000000..713aa51d --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum/AppStageEnum.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 02f6e676930b49429c55884c7540d94c +timeCreated: 1678945994 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs b/Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs new file mode 100644 index 00000000..08b131ca --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs @@ -0,0 +1,9 @@ +/// +/// 资源类型 游戏内资源 和 配置表资源 +/// +public enum ResourcesType +{ + None = 0, + Resources = 1, + Config = 2 +} \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs.meta b/Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs.meta new file mode 100644 index 00000000..fb9255c5 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum/ResourcesType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 33cc579af96f43cfb384bdea5aafa3b7 +timeCreated: 1678945994 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs b/Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs new file mode 100644 index 00000000..bdedad4a --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs @@ -0,0 +1,19 @@ +public enum ServerTypeEnum +{ + /// + /// 无 + /// + None = 0, + /// + /// 内网 + /// + Intranet = 1, + /// + /// 外网 + /// + Extranet = 2, + /// + /// 正式服 + /// + Formal = 3 +} \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs.meta b/Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs.meta new file mode 100644 index 00000000..136851cc --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Enum/ServerTypeEnum.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e4e936a6b106467db84d9e043d174926 +timeCreated: 1678945994 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Framework.meta b/Assets/TEngine/Runtime/GameSettings/Framework.meta new file mode 100644 index 00000000..0d11b932 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Framework.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ef80ca1c867d4deaa8d0dbe9d3cbabff +timeCreated: 1678945935 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs b/Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs new file mode 100644 index 00000000..19bd0351 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs @@ -0,0 +1,200 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public enum UpdateType +{ + None = 0, + //底包更新 + PackageUpdate = 1, + //资源更新 + ResourceUpdate = 2, +} + +public enum UpdateStyle +{ + None = 0, + Froce = 1, //强制 + Optional = 2,//非强制 +} + +public enum UpdateNotice +{ + None = 0, + Notice = 1, //提示 + NoNotice = 2,//非提示 +} + +public enum GameStatus +{ + First = 0, + AssetLoad = 1 +} + +/// +/// 资源存放地 +/// +[Serializable] +public class ResourcesArea +{ + [Tooltip("资源管理类型")] [SerializeField] private string m_ResAdminType = "Default"; + + public string ResAdminType + { + get { return m_ResAdminType; } + } + + [Tooltip("资源管理编号")] [SerializeField] private string m_ResAdminCode = "0"; + + public string ResAdminCode + { + get { return m_ResAdminCode; } + } + + [SerializeField] private ServerTypeEnum m_ServerType = ServerTypeEnum.Intranet; + + public ServerTypeEnum ServerType + { + get { return m_ServerType; } + } + + [Tooltip("是否在构建资源的时候清理上传到服务端目录的老资源")] [SerializeField] + private bool m_CleanCommitPathRes = true; + + public bool CleanCommitPathRes + { + get { return m_CleanCommitPathRes; } + } + + [Tooltip("内网地址")] [SerializeField] private string m_InnerResourceSourceUrl = "http://127.0.0.1:8088"; + + public string InnerResourceSourceUrl + { + get { return m_InnerResourceSourceUrl; } + } + + [Tooltip("外网地址")] [SerializeField] private string m_ExtraResourceSourceUrl = "http://127.0.0.1:8088"; + + public string ExtraResourceSourceUrl + { + get { return m_ExtraResourceSourceUrl; } + } + + [Tooltip("正式地址")] [SerializeField] private string m_FormalResourceSourceUrl = "http://127.0.0.1:8088"; + + public string FormalResourceSourceUrl + { + get { return m_FormalResourceSourceUrl; } + } +} + +[Serializable] +public class ServerIpAndPort +{ + public string ServerName; + public string Ip; + public int Port; +} + +[Serializable] +public class ServerChannelInfo +{ + public string ChannelName; + public string CurUseServerName; + public List ServerIpAndPorts; +} + +[Serializable] +public class FrameworkGlobalSettings +{ + [SerializeField] [Tooltip("脚本作者名")] private string m_ScriptAuthor = "Default"; + + public string ScriptAuthor + { + get { return m_ScriptAuthor; } + } + + [SerializeField] [Tooltip("版本")] private string m_ScriptVersion = "0.1"; + + public string ScriptVersion + { + get { return m_ScriptVersion; } + } + + [SerializeField] private AppStageEnum m_AppStage = AppStageEnum.Debug; + + public AppStageEnum AppStage + { + get { return m_AppStage; } + } + + // // 资源更新类型 + // public UpdateType UpdateType = UpdateType.PackageUpdate; + // + // // 更新是否强制 + // public UpdateStyle UpdateStyle = UpdateStyle.Froce; + // + // // 更新提示类型 + // public UpdateNotice UpdateNotice = UpdateNotice.Notice; + + [Header("Font")] [SerializeField] private string m_DefaultFont = "Arial"; + public string DefaultFont => m_DefaultFont; + + [Header("Resources")] [Tooltip("资源存放地")] [SerializeField] + private ResourcesArea m_ResourcesArea; + + public ResourcesArea ResourcesArea + { + get { return m_ResourcesArea; } + } + + [Header("SpriteCollection")] [SerializeField] + private string m_AtlasFolder = "Assets/AssetRaw/Atlas"; + + public string AtlasFolder + { + get { return m_AtlasFolder; } + } + + [Header("Hotfix")] [SerializeField] + private string m_ResourceVersionFileName = "ResourceVersion.txt"; + + public string ResourceVersionFileName + { + get { return m_ResourceVersionFileName; } + } + + public string CheckVersionUrl = "http://127.0.0.1/Resources/{0}Version.txt"; + public string WindowsAppUrl = "http://127.0.0.1"; + public string MacOSAppUrl = "http://127.0.0.1"; + public string IOSAppUrl = "http://127.0.0.1"; + public string AndroidAppUrl = "http://127.0.0.1"; + [Header("Server")] [SerializeField] private string m_CurUseServerChannel; + + public string CurUseServerChannel + { + get => m_CurUseServerChannel; + } + + [SerializeField] private List m_ServerChannelInfos; + + public List ServerChannelInfos + { + get => m_ServerChannelInfos; + } + + [Header("Config")] [Tooltip("是否读取本地表 UnityEditor 下起作用")] [SerializeField] + private bool m_IsReadLocalConfigInEditor = true; + + public bool ReadLocalConfigInEditor + { + get { return m_IsReadLocalConfigInEditor; } + } + + [SerializeField] private string m_ConfigFolderName = "Assets/AssetRaw/Configs/"; + + public string ConfigFolderName + { + get { return m_ConfigFolderName; } + } +} \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs.meta b/Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs.meta new file mode 100644 index 00000000..99a04fd3 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/Framework/FrameworkGlobalSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3eb9df088d254feaa49d19bad18cec8b +timeCreated: 1678945935 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/HybridCLR.meta b/Assets/TEngine/Runtime/GameSettings/HybridCLR.meta new file mode 100644 index 00000000..124caf4f --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/HybridCLR.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 692f2f21aeac40feb1bbddd81fbc84b5 +timeCreated: 1678945935 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs b/Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs new file mode 100644 index 00000000..fb59b286 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; + +/// +/// HybridCLRCustomGlobalSettings. +/// +[Serializable] +public class HybridCLRCustomGlobalSettings +{ + [Header("Auto sync with [HybridCLRGlobalSettings]")] + [Tooltip("You should modify the file form file path [Assets/CustomHybridCLR/Settings/HybridCLRGlobalSettings.asset]")] + [SerializeField] + private bool m_Enable = false; + + public bool Enable + { + get { return m_Enable; } + set { m_Enable = value; } + } + + [SerializeField] private bool m_Gitee = true; + + public bool Gitee + { + get { return m_Gitee; } + set { m_Gitee = value; } + } + + [Header("Auto sync with [HybridCLRGlobalSettings]")] [Tooltip("You should modify the file form file path [Assets/CustomHybridCLR/Settings/HybridCLRGlobalSettings.asset]")] + public List HotUpdateAssemblies; + + [Header("Need manual setting!")] public List AOTMetaAssemblies; + + /// + /// Dll of main business logic assembly + /// + public string LogicMainDllName = "xxx.dll"; + + /// + /// 程序集文本资产打包Asset后缀名 + /// + public string AssemblyTextAssetExtension = ".bytes"; + + /// + /// 程序集文本资产资源目录 + /// + public string AssemblyTextAssetPath = "Assets/AssetRaw/DLL"; + + /// + /// Resources HybridCLRGlobalSettings Dir + /// + public string HybridCLRGlobalSettings = "Settings/HybridCLRGlobalSettings"; +} \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs.meta b/Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs.meta new file mode 100644 index 00000000..3ef0916e --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/HybridCLR/HybridCLRCustomGlobalSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 88b6465202d847c08f39cf6200f0777b +timeCreated: 1678945935 \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs b/Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs new file mode 100644 index 00000000..dc052a82 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs @@ -0,0 +1,200 @@ +using System; +using System.Collections.Generic; +using System.IO; +using TEngine; +using UnityEngine; + +public static class SettingsUtils +{ + private static readonly string GlobalSettingsPath = $"TEngineGlobalSettings"; + private static TEngineSettings _globalSettings; + + public static TEngineSettings GlobalSettings + { + get + { + if (_globalSettings == null) + { + _globalSettings = GetSingletonAssetsByResources(GlobalSettingsPath); + } + + return _globalSettings; + } + } + + public static FrameworkGlobalSettings FrameworkGlobalSettings => GlobalSettings.FrameworkGlobalSettings; + + public static HybridCLRCustomGlobalSettings HybridCLRCustomGlobalSettings => GlobalSettings.BybridCLRCustomGlobalSettings; + + public static ResourcesArea ResourcesArea => GlobalSettings.FrameworkGlobalSettings.ResourcesArea; + + public static void SetHybridCLRHotUpdateAssemblies(List hotUpdateAssemblies) + { + HybridCLRCustomGlobalSettings.HotUpdateAssemblies = hotUpdateAssemblies; + } + + public static void SetHybridCLRAOTMetaAssemblies(List aOTMetaAssemblies) + { + HybridCLRCustomGlobalSettings.AOTMetaAssemblies = aOTMetaAssemblies; + } + + + public static string GetAppUpdateUrl() + { + string url = null; +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + url = FrameworkGlobalSettings.WindowsAppUrl; +#elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX + url = FrameworkGlobalSettings.MacOSAppUrl; +#elif UNITY_IOS + url = FrameworkGlobalSettings.IOSAppUrl; +#elif UNITY_ANDROID + url = FrameworkGlobalSettings.AndroidAppUrl; +#endif + return url; + } + + public static string GetResDownLoadPath(string fileName = "") + { + return Path.Combine(CompleteDownLoadPath, $"{ResourcesArea.ResAdminType}_{ResourcesArea.ResAdminCode}", GetPlatformName(), fileName).Replace("\\", "/"); + } + + public static string CompleteDownLoadPath + { + get + { + string url = ""; + if (ResourcesArea.ServerType == ServerTypeEnum.Extranet) + { + url = ResourcesArea.ExtraResourceSourceUrl; + } + else if (ResourcesArea.ServerType == ServerTypeEnum.Formal) + { + url = ResourcesArea.FormalResourceSourceUrl; + } + else + { + url = ResourcesArea.InnerResourceSourceUrl; + } + + return url; + } + } + + private static ServerIpAndPort FindServerIpAndPort(string channelName = "") + { + if (string.IsNullOrEmpty(channelName)) + { + channelName = FrameworkGlobalSettings.CurUseServerChannel; + } + + foreach (var serverChannelInfo in FrameworkGlobalSettings.ServerChannelInfos) + { + if (serverChannelInfo.ChannelName.Equals(channelName)) + { + foreach (var serverIpAndPort in serverChannelInfo.ServerIpAndPorts) + { + if (serverIpAndPort.ServerName.Equals(serverChannelInfo.CurUseServerName)) + { + return serverIpAndPort; + } + } + } + } + + return null; + } + + public static string GetServerIp(string channelName = "") + { + ServerIpAndPort serverIpAndPort = FindServerIpAndPort(channelName); + if (serverIpAndPort != null) + { + return serverIpAndPort.Ip; + } + + return string.Empty; + } + + public static int GetServerPort(string channelName = "") + { + ServerIpAndPort serverIpAndPort = FindServerIpAndPort(channelName); + if (serverIpAndPort != null) + { + return serverIpAndPort.Port; + } + + return 0; + } + + private static T GetSingletonAssetsByResources(string assetsPath) where T : ScriptableObject, new() + { + string assetType = typeof(T).Name; +#if UNITY_EDITOR + string[] globalAssetPaths = UnityEditor.AssetDatabase.FindAssets($"t:{assetType}"); + if (globalAssetPaths.Length > 1) + { + foreach (var assetPath in globalAssetPaths) + { + Debug.LogError($"Could not had Multiple {assetType}. Repeated Path: {UnityEditor.AssetDatabase.GUIDToAssetPath(assetPath)}"); + } + + throw new Exception($"Could not had Multiple {assetType}"); + } +#endif + T customGlobalSettings = Resources.Load(assetsPath); + if (customGlobalSettings == null) + { + Log.Error($"Could not found {assetType} asset,so auto create:{assetsPath}."); + return null; + } + + return customGlobalSettings; + } + + /// + /// 平台名字 + /// + /// + public static string GetPlatformName() + { +#if UNITY_ANDROID + return "Android"; +#elif UNITY_IOS + return "IOS"; +#else + switch (Application.platform) + { + case RuntimePlatform.WindowsEditor: + return "Windows64"; + case RuntimePlatform.WindowsPlayer: + return "Windows64"; + + case RuntimePlatform.OSXEditor: + case RuntimePlatform.OSXPlayer: + return "MacOS"; + + case RuntimePlatform.IPhonePlayer: + return "IOS"; + + case RuntimePlatform.Android: + return "Android"; + default: + throw new System.NotSupportedException(string.Format("Platform '{0}' is not supported.", + Application.platform.ToString())); + } +#endif + } + + public static string GetConfigAsset(string assetName) + { + return GlobalSettings.FrameworkGlobalSettings.ConfigFolderName + assetName; + } + + public static string GetDictionaryAsset(string assetName, bool fromBytes) + { + // return Utility.Text.Format("Assets/GameMain/Localization/{0}/Dictionaries/{1}.{2}", + // GameEntry.GetModule().Language.ToString(), assetName, fromBytes ? "bytes" : "xml"); + return string.Empty; + } +} \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs.meta b/Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs.meta new file mode 100644 index 00000000..e802b670 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/SettingsUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 921c67d24bf14d74099388b877f3d3a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs b/Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs new file mode 100644 index 00000000..a07293c4 --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +[CreateAssetMenu(fileName = "TEngineGlobalSettings", menuName = "TEngine/TEngineSettings")] +public class TEngineSettings : ScriptableObject +{ + [Header("Framework")] [SerializeField] private FrameworkGlobalSettings m_FrameworkGlobalSettings; + + public FrameworkGlobalSettings FrameworkGlobalSettings + { + get { return m_FrameworkGlobalSettings; } + } + + [Header("HybridCLR")] [SerializeField] private HybridCLRCustomGlobalSettings m_BybridCLRCustomGlobalSettings; + + public HybridCLRCustomGlobalSettings BybridCLRCustomGlobalSettings + { + get { return m_BybridCLRCustomGlobalSettings; } + } +} diff --git a/Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs.meta b/Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs.meta new file mode 100644 index 00000000..2a21929c --- /dev/null +++ b/Assets/TEngine/Runtime/GameSettings/TEngineSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 577471f3ecd1ec94b8a0d67218386f4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: