ProcedureLaunch.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using GameFramework.Localization;
  8. using System;
  9. using UnityGameFramework.Runtime;
  10. using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;
  11. namespace MetaClient
  12. {
  13. public class ProcedureLaunch : ProcedureBase
  14. {
  15. public override bool UseNativeDialog
  16. {
  17. get
  18. {
  19. return true;
  20. }
  21. }
  22. protected override void OnEnter(ProcedureOwner procedureOwner)
  23. {
  24. base.OnEnter(procedureOwner);
  25. // 构建信息:发布版本时,把一些数据以 Json 的格式写入 Assets/GameMain/Configs/BuildInfo.txt,供游戏逻辑读取
  26. GameEntry.BuiltinData.InitBuildInfo();
  27. // 语言配置:设置当前使用的语言,如果不设置,则默认使用操作系统语言
  28. InitLanguageSettings();
  29. // 变体配置:根据使用的语言,通知底层加载对应的资源变体
  30. InitCurrentVariant();
  31. // 声音配置:根据用户配置数据,设置即将使用的声音选项
  32. InitSoundSettings();
  33. // 默认字典:加载默认字典文件 Assets/GameMain/Configs/DefaultDictionary.xml
  34. // 此字典文件记录了资源更新前使用的各种语言的字符串,会随 App 一起发布,故不可更新
  35. GameEntry.BuiltinData.InitDefaultDictionary();
  36. }
  37. protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
  38. {
  39. base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
  40. // 运行一帧即切换到 Splash 展示流程
  41. ChangeState<ProcedureSplash>(procedureOwner);
  42. }
  43. private void InitLanguageSettings()
  44. {
  45. if (GameEntry.Base.EditorResourceMode && GameEntry.Base.EditorLanguage != Language.Unspecified)
  46. {
  47. // 编辑器资源模式直接使用 Inspector 上设置的语言
  48. return;
  49. }
  50. Language language = GameEntry.Localization.Language;
  51. if (GameEntry.Setting.HasSetting(Constant.Setting.Language))
  52. {
  53. try
  54. {
  55. string languageString = GameEntry.Setting.GetString(Constant.Setting.Language);
  56. language = (Language)Enum.Parse(typeof(Language), languageString);
  57. }
  58. catch
  59. {
  60. }
  61. }
  62. if (language != Language.English
  63. && language != Language.ChineseSimplified
  64. && language != Language.ChineseTraditional
  65. && language != Language.Korean)
  66. {
  67. // 若是暂不支持的语言,则使用英语
  68. language = Language.English;
  69. GameEntry.Setting.SetString(Constant.Setting.Language, language.ToString());
  70. GameEntry.Setting.Save();
  71. }
  72. GameEntry.Localization.Language = language;
  73. Log.Info("Init language settings complete, current language is '{0}'.", language.ToString());
  74. }
  75. private void InitCurrentVariant()
  76. {
  77. if (GameEntry.Base.EditorResourceMode)
  78. {
  79. // 编辑器资源模式不使用 AssetBundle,也就没有变体了
  80. return;
  81. }
  82. string currentVariant = null;
  83. switch (GameEntry.Localization.Language)
  84. {
  85. case Language.English:
  86. currentVariant = "en-us";
  87. break;
  88. case Language.ChineseSimplified:
  89. currentVariant = "zh-cn";
  90. break;
  91. case Language.ChineseTraditional:
  92. currentVariant = "zh-tw";
  93. break;
  94. case Language.Korean:
  95. currentVariant = "ko-kr";
  96. break;
  97. default:
  98. currentVariant = "zh-cn";
  99. break;
  100. }
  101. GameEntry.Resource.SetCurrentVariant(currentVariant);
  102. Log.Info("Init current variant complete.");
  103. }
  104. private void InitSoundSettings()
  105. {
  106. GameEntry.Sound.Mute("Music", GameEntry.Setting.GetBool(Constant.Setting.MusicMuted, false));
  107. GameEntry.Sound.SetVolume("Music", GameEntry.Setting.GetFloat(Constant.Setting.MusicVolume, 0.3f));
  108. GameEntry.Sound.Mute("Sound", GameEntry.Setting.GetBool(Constant.Setting.SoundMuted, false));
  109. GameEntry.Sound.SetVolume("Sound", GameEntry.Setting.GetFloat(Constant.Setting.SoundVolume, 1f));
  110. GameEntry.Sound.Mute("UISound", GameEntry.Setting.GetBool(Constant.Setting.UISoundMuted, false));
  111. GameEntry.Sound.SetVolume("UISound", GameEntry.Setting.GetFloat(Constant.Setting.UISoundVolume, 1f));
  112. Log.Info("Init sound settings complete.");
  113. }
  114. }
  115. }