diff --git a/UnityProject/Assets/GameScripts/Main/Launcher/Resources/AssetLoad/UILoadUpdate.prefab b/UnityProject/Assets/GameScripts/Main/Launcher/Resources/AssetLoad/UILoadUpdate.prefab index 75dd2abf..3cd28489 100644 --- a/UnityProject/Assets/GameScripts/Main/Launcher/Resources/AssetLoad/UILoadUpdate.prefab +++ b/UnityProject/Assets/GameScripts/Main/Launcher/Resources/AssetLoad/UILoadUpdate.prefab @@ -175,11 +175,11 @@ MonoBehaviour: m_SelectOnRight: {fileID: 0} m_Transition: 1 m_Colors: - m_NormalColor: {r: 0.9450981, g: 0.6392157, b: 0.25490198, a: 1} + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_DisabledColor: {r: 0.94509804, g: 0.6392157, b: 0.25490198, a: 1} m_ColorMultiplier: 1 m_FadeDuration: 0.1 m_SpriteState: @@ -193,12 +193,12 @@ MonoBehaviour: m_PressedTrigger: Pressed m_SelectedTrigger: Selected m_DisabledTrigger: Disabled - m_Interactable: 1 + m_Interactable: 0 m_TargetGraphic: {fileID: 4296679187938450242} m_HandleRect: {fileID: 3254196395727856927} m_Direction: 0 m_Value: 0 - m_Size: 1 + m_Size: 0 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: diff --git a/UnityProject/Assets/GameScripts/Main/Launcher/Scripts/UI/UILoadUpdate.cs b/UnityProject/Assets/GameScripts/Main/Launcher/Scripts/UI/UILoadUpdate.cs index c33a90ff..214048ae 100644 --- a/UnityProject/Assets/GameScripts/Main/Launcher/Scripts/UI/UILoadUpdate.cs +++ b/UnityProject/Assets/GameScripts/Main/Launcher/Scripts/UI/UILoadUpdate.cs @@ -5,11 +5,11 @@ using Version = TEngine.Version; namespace GameMain { - [Window(UILayer.UI, fromResources: true, location: "AssetLoad/UILoadUpdate",fullScreen:true)] + [Window(UILayer.UI, fromResources: true, location: "AssetLoad/UILoadUpdate", fullScreen: true)] public class UILoadUpdate : UIWindow { private Scrollbar m_scrollbarProgress; - + #region 脚本工具生成的代码 private Image m_imgBackGround; private Text m_textDesc; @@ -41,12 +41,16 @@ namespace GameMain protected override void RegisterEvent() { base.RegisterEvent(); - AddUIEvent(RuntimeId.ToRuntimeId("RefreshVersion"),RefreshVersion); + AddUIEvent(RuntimeId.ToRuntimeId("RefreshVersion"), RefreshVersion); } protected override void OnRefresh() { base.OnRefresh(); + if (base.userDatas.Length > 0 && base.userDatas[0] != null) + { + m_textDesc.text = base.userDatas[0].ToString(); //获取更新内容,由ProcedureDownloadFile -> OnDownloadProgressCallback 传递 + } } #region 事件 diff --git a/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureDownloadFile.cs b/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureDownloadFile.cs index cf5b6cf7..277c1b9c 100644 --- a/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureDownloadFile.cs +++ b/UnityProject/Assets/GameScripts/Main/Procedure/ProcedureDownloadFile.cs @@ -7,36 +7,43 @@ using Utility = TEngine.Utility; namespace GameMain { - public class ProcedureDownloadFile:ProcedureBase + public class ProcedureDownloadFile : ProcedureBase { public override bool UseNativeDialog { get; } - + private ProcedureOwner _procedureOwner; private float _lastUpdateDownloadedSize; + private float _totalSpeed; + private int _speedSampleCount; + private float CurrentSpeed { get { - float interval = GameTime.deltaTime; + float interval = Math.Max(GameTime.deltaTime, 0.01f); // 防止deltaTime过小 var sizeDiff = GameModule.Resource.Downloader.CurrentDownloadBytes - _lastUpdateDownloadedSize; _lastUpdateDownloadedSize = GameModule.Resource.Downloader.CurrentDownloadBytes; - var speed = (float)Math.Floor(sizeDiff / interval); - return speed; + var speed = sizeDiff / interval; + + // 使用滑动窗口计算平均速度 + _totalSpeed += speed; + _speedSampleCount++; + return _totalSpeed / _speedSampleCount; } } - + protected override void OnEnter(ProcedureOwner procedureOwner) { _procedureOwner = procedureOwner; - + Log.Info("开始下载更新文件!"); - - UILoadMgr.Show(UIDefine.UILoadUpdate,$"开始下载更新文件..."); - + + UILoadMgr.Show(UIDefine.UILoadUpdate, "开始下载更新文件..."); + BeginDownload().Forget(); } - + private async UniTaskVoid BeginDownload() { var downloader = GameModule.Resource.Downloader; @@ -57,35 +64,39 @@ namespace GameMain private void OnDownloadErrorCallback(string fileName, string error) { UILoadTip.ShowMessageBox($"Failed to download file : {fileName}", MessageShowType.TwoButton, - LoadStyle.StyleEnum.Style_Default - , () => { ChangeState(_procedureOwner); }, UnityEngine.Application.Quit); + LoadStyle.StyleEnum.Style_Default, + () => { ChangeState(_procedureOwner); }, UnityEngine.Application.Quit); } private void OnDownloadProgressCallback(int totalDownloadCount, int currentDownloadCount, long totalDownloadBytes, long currentDownloadBytes) { string currentSizeMb = (currentDownloadBytes / 1048576f).ToString("f1"); string totalSizeMb = (totalDownloadBytes / 1048576f).ToString("f1"); - // UILoadMgr.Show(UIDefine.UILoadUpdate,$"{currentDownloadCount}/{totalDownloadCount} {currentSizeMb}MB/{totalSizeMb}MB"); - string descriptionText = Utility.Text.Format("正在更新,已更新{0},总更新{1},已更新大小{2},总更新大小{3},更新进度{4},当前网速{5}/s", - currentDownloadCount.ToString(), - totalDownloadCount.ToString(), - Utility.File.GetByteLengthString(currentDownloadBytes), - Utility.File.GetByteLengthString(totalDownloadBytes), - GameModule.Resource.Downloader.Progress, - Utility.File.GetLengthString((int)CurrentSpeed)); - LoadUpdateLogic.Instance.DownProgressAction?.Invoke(GameModule.Resource.Downloader.Progress); - UILoadMgr.Show(UIDefine.UILoadUpdate,descriptionText); + float progressPercentage = GameModule.Resource.Downloader.Progress * 100; + string speed = Utility.File.GetLengthString((int)CurrentSpeed); - int needTime = 0; - if (CurrentSpeed > 0) - { - needTime = (int)((totalDownloadBytes - currentDownloadBytes) / CurrentSpeed); - } - - TimeSpan ts = new TimeSpan(0, 0, needTime); - string timeStr = ts.ToString(@"mm\:ss"); - string updateProgress = Utility.Text.Format("剩余时间 {0}({1}/s)", timeStr, Utility.File.GetLengthString((int)CurrentSpeed)); - Log.Info(updateProgress); + string line1 = Utility.Text.Format("正在更新,已更新 {0}/{1} ({2:F2}%)", currentDownloadCount, totalDownloadCount, progressPercentage); + string line2 = Utility.Text.Format("已更新大小 {0}MB/{1}MB", currentSizeMb, totalSizeMb); + string line3 = Utility.Text.Format("当前网速 {0}/s,剩余时间 {1}", speed, GetRemainingTime(totalDownloadBytes, currentDownloadBytes, CurrentSpeed)); + + LoadUpdateLogic.Instance.DownProgressAction?.Invoke(GameModule.Resource.Downloader.Progress); + UILoadMgr.Show(UIDefine.UILoadUpdate, $"{line1}\n{line2}\n{line3}"); + + Log.Info($"{line1} {line2} {line3}"); } + + private string GetRemainingTime(long totalBytes, long currentBytes, float speed) + { + int needTime = 0; + if (speed > 0) + { + needTime = (int)((totalBytes - currentBytes) / speed); + } + TimeSpan ts = new TimeSpan(0, 0, needTime); + return ts.ToString(@"mm\:ss"); + } + + + } -} \ No newline at end of file +}