1
This commit is contained in:
@@ -3184,6 +3184,7 @@ MonoBehaviour:
|
||||
btn_ChangeTurret: {fileID: 2489664132425475855}
|
||||
btn_TuiChu: {fileID: 780773369580813426}
|
||||
btn_Setting: {fileID: 4961327186688897109}
|
||||
btn_ChangeRoom: {fileID: 4081004395951680277}
|
||||
mySitAnim: {fileID: 880553518363789260}
|
||||
toggle_Lock: {fileID: 7956581350814959936}
|
||||
toggle_Three: {fileID: 911966240696267575}
|
||||
@@ -8553,6 +8554,18 @@ RectTransform:
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 8339597464346707846}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &4081004395951680277 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 5412922497758899347, guid: 87a141ee6b07c324b91593c88bd1db9c,
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 8339597464346707846}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &4961327186688897109 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 3991912750857467859, guid: 87a141ee6b07c324b91593c88bd1db9c,
|
||||
|
||||
@@ -809,18 +809,25 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
#region 资源加载模块
|
||||
public async void LoadResources()
|
||||
{
|
||||
// ⭐ 切换房间:隐藏新面板自带的进度条,继续用离房时留下的合并进度条
|
||||
// (挂在 uiRoot、盖在最上层),避免"退出+加入"显示两条进度条
|
||||
if (_changeRoomBar != null)
|
||||
{
|
||||
if (JinDuTiao != null) JinDuTiao.Hide();
|
||||
_changeRoomBar.transform.SetAsLastSibling();
|
||||
}
|
||||
CreateFishManager.Instance.isResources = false;
|
||||
// ⭐ 重置卸载标记,下次进入可重新加载
|
||||
_resourcesUnloaded = false;
|
||||
await AudioResourcesData.LoadAudioGame();
|
||||
|
||||
JinDuTiao.SetProgress(0.2f);
|
||||
SetLoadProgress(0.2f);
|
||||
await MonsterMoveLine.LoadBezier();
|
||||
|
||||
JinDuTiao.SetProgress(0.4f);
|
||||
SetLoadProgress(0.4f);
|
||||
await FishResourcesData.LoadFishAssetsData();
|
||||
|
||||
JinDuTiao.SetProgress(0.6f);
|
||||
SetLoadProgress(0.6f);
|
||||
|
||||
await Addressables.LoadAssetsAsync<AudioClip>("Audio", clip =>
|
||||
{
|
||||
@@ -828,13 +835,13 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
bulletClip = clip;
|
||||
}).Task;
|
||||
|
||||
JinDuTiao.SetProgress(0.8f);
|
||||
SetLoadProgress(0.8f);
|
||||
await Task.Delay(100);
|
||||
|
||||
|
||||
CreateFishManager.Instance.EnterRoom(gameType);
|
||||
CreateFishManager.Instance.isResources = true;
|
||||
JinDuTiao.SetProgress(0.9f);
|
||||
SetLoadProgress(0.9f);
|
||||
|
||||
|
||||
// ⭐ 鱼创建由服务端 OnFishSpawn 事件统一下发,客户端无需房主出鱼/请求同步。
|
||||
@@ -859,10 +866,14 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
}
|
||||
await Task.Delay(2000);
|
||||
|
||||
JinDuTiao.SetProgress(1);
|
||||
SetLoadProgress(1);
|
||||
await Task.Delay(300);
|
||||
|
||||
JinDuTiao.Hide();
|
||||
// ⭐ 切换房间:合并进度条走完 → 隐藏并销毁;平时隐藏面板自己的进度条
|
||||
if (_changeRoomBar != null)
|
||||
ClearChangeRoomBar();
|
||||
else if (JinDuTiao != null)
|
||||
JinDuTiao.Hide();
|
||||
}
|
||||
|
||||
public async void UnLoadResources()
|
||||
@@ -926,16 +937,16 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
{
|
||||
if (JinDuTiao != null) JinDuTiao.Show();
|
||||
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(0.2f);
|
||||
SetUnloadProgress(0.2f);
|
||||
await FishResourcesData.UnLoadFishAssetsData();
|
||||
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(0.4f);
|
||||
SetUnloadProgress(0.4f);
|
||||
await AudioResourcesData.UnLoadAudioGame();
|
||||
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(0.6f);
|
||||
SetUnloadProgress(0.6f);
|
||||
await MonsterMoveLine.UnLoadBezier();
|
||||
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(0.8f);
|
||||
SetUnloadProgress(0.8f);
|
||||
await Task.Delay(100);
|
||||
|
||||
CreateFishManager.Instance.ExitRoom();
|
||||
@@ -943,7 +954,7 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// ⭐ 清空子弹池 + 特效池(鱼池已在 UnLoadFishAssetsData 内清理)
|
||||
BulletPool.Instance.ClearAll();
|
||||
EffectPool.Instance.ClearAll();
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(0.9f);
|
||||
SetUnloadProgress(0.9f);
|
||||
|
||||
// ⭐ 卡在 0.9 等待 socket 返回 LeaveRoomResult
|
||||
// - socket 已早返回(比卸载快) → 在 0.9 再等 1 秒(美观)后变 1
|
||||
@@ -987,9 +998,19 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// 标记已卸载,OnHide 跳过重复卸载
|
||||
_resourcesUnloaded = true;
|
||||
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(1);
|
||||
await Task.Delay(300);
|
||||
if (JinDuTiao != null) JinDuTiao.Hide();
|
||||
if (_isChangeRoom)
|
||||
{
|
||||
// ⭐ 切换房间:进度条停在卸载段末尾(合并进度条45%)不隐藏,
|
||||
// 由 finally 挪到 uiRoot 后继续给"换房+加入加载段"使用 → 整个切换只有一条进度条
|
||||
SetUnloadProgress(1);
|
||||
await Task.Delay(300);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (JinDuTiao != null) JinDuTiao.SetProgress(1);
|
||||
await Task.Delay(300);
|
||||
if (JinDuTiao != null) JinDuTiao.Hide();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1000,20 +1021,34 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
// ⭐ 无论中间是否异常,都必须关闭 GamePanel
|
||||
// 否则 GamePanel 留在 panels 字典里,下次进入游戏时 Get 返回非 null 导致无法创建新面板
|
||||
_leaveRoomResponseTcs = null;
|
||||
if (JinDuTiao != null)
|
||||
{
|
||||
try { JinDuTiao.Hide(); } catch { }
|
||||
}
|
||||
if (_isChangeRoom)
|
||||
{
|
||||
// ⭐ 切换房间:不回大厅,关闭当前游戏面板(OnHide 卸载场景/关socket),
|
||||
// 然后重新走一遍加入房间流程(QuickJoin → 连新房socket → JoinRoom → RoomJoinNotice 重建面板)
|
||||
// ⭐ 切换房间:不回大厅。先把进度条从旧面板挪到 uiRoot(旧面板销毁时不带走它),
|
||||
// 新面板 LoadResources 继续用它走完"换房+加载段"→ 退出+加入合并为一条进度条;
|
||||
// 然后关闭当前游戏面板(OnHide 卸载场景/关socket)并重新走加入房间流程
|
||||
_isChangeRoom = false;
|
||||
if (JinDuTiao != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
JinDuTiao.transform.SetParent(UIManager.Instance.uiRoot, false);
|
||||
JinDuTiao.transform.SetAsLastSibling();
|
||||
_changeRoomBar = JinDuTiao;
|
||||
}
|
||||
catch (Exception barEx)
|
||||
{
|
||||
Debug.LogError($"[ChangeRoom] 合并进度条转移异常: {barEx}");
|
||||
}
|
||||
}
|
||||
UIManager.Instance.Close(PanelType);
|
||||
StartChangeRoomJoin();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (JinDuTiao != null)
|
||||
{
|
||||
try { JinDuTiao.Hide(); } catch { }
|
||||
}
|
||||
// 进入 home 界面(关闭当前游戏面板)
|
||||
switch (GameManager.Instance.gameData.currGameType)
|
||||
{
|
||||
@@ -1064,6 +1099,50 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
/// <summary>正在切换房间(离房完成后不回大厅,直接重新快速加入新房间)</summary>
|
||||
private bool _isChangeRoom = false;
|
||||
|
||||
/// <summary>
|
||||
/// 切换房间共享进度条:离房时从旧面板挪到 uiRoot(不随旧面板销毁),
|
||||
/// 新面板 LoadResources 继续用它,把"退出卸载 + 换房 + 加入加载"合并成一条进度条:
|
||||
/// 卸载段 0~45% → 网络段(QuickJoin/连socket/JoinRoom) 45~55% → 加载段 55~100%。
|
||||
/// null 表示非切换房间流程(走面板自己的 JinDuTiao)。
|
||||
/// </summary>
|
||||
private static ProgressBar _changeRoomBar;
|
||||
|
||||
/// <summary>卸载段进度写入:切换房间时映射到合并进度条前半段(0~45%),平时直接写面板进度条</summary>
|
||||
private void SetUnloadProgress(float p)
|
||||
{
|
||||
if (JinDuTiao == null) return;
|
||||
JinDuTiao.SetProgress(_isChangeRoom ? p * 0.45f : p);
|
||||
}
|
||||
|
||||
/// <summary>加载段进度写入:切换房间时映射到合并进度条后半段(55~100%),平时直接写面板进度条</summary>
|
||||
private void SetLoadProgress(float p)
|
||||
{
|
||||
if (_changeRoomBar != null)
|
||||
_changeRoomBar.SetProgress(0.55f + p * 0.45f);
|
||||
else if (JinDuTiao != null)
|
||||
JinDuTiao.SetProgress(p);
|
||||
}
|
||||
|
||||
/// <summary>写切换房间合并进度条(网络段:QuickJoin返回/JoinRoom已发送)</summary>
|
||||
private static void SetChangeRoomBarProgress(float p)
|
||||
{
|
||||
if (_changeRoomBar != null) _changeRoomBar.SetProgress(p);
|
||||
}
|
||||
|
||||
/// <summary>隐藏并销毁切换房间合并进度条(加载完成或切房失败时调用)</summary>
|
||||
private static void ClearChangeRoomBar()
|
||||
{
|
||||
if (_changeRoomBar == null) return;
|
||||
var bar = _changeRoomBar;
|
||||
_changeRoomBar = null;
|
||||
try
|
||||
{
|
||||
bar.Hide();
|
||||
if (bar != null) Destroy(bar.gameObject);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换房间入口:复用离房流程(LeaveRoom → 卸载资源 → 关面板),
|
||||
/// 离房完成后由 BeginLeaveRoomUnload 的 finally 重新走加入房间流程。
|
||||
@@ -1081,6 +1160,8 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
/// 重新走加入房间流程(与 UIHome_BY_SelectRoomLevelPanel.OnSelectRoom 快速进入分支完全一致):
|
||||
/// /api/Room/QuickJoin(同场次同等级,服务器分配新房间)→ 连新房 game socket → JoinRoom(-1) 由服务器分配座位,
|
||||
/// 之后服务端推送 RoomJoinNotice → 重新创建游戏面板 + 重载场景,完成切换。
|
||||
/// ⭐ 切房全程共用一条进度条:卸载段0~45%已在离房时走完,这里推进网络段45~55%,
|
||||
/// 剩余加载段55~100%由新面板 LoadResources 继续。
|
||||
/// </summary>
|
||||
private void StartChangeRoomJoin()
|
||||
{
|
||||
@@ -1091,14 +1172,19 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
|
||||
{
|
||||
if (resp == null || string.IsNullOrEmpty(resp.roomId))
|
||||
{
|
||||
// ⭐ 快速加入失败 → 回大厅,避免卡在无界面状态
|
||||
// ⭐ 快速加入失败 → 清理合并进度条并回大厅,避免卡在无界面状态
|
||||
UIManager.Instance.ShowBoardError("切换房间失败,请稍后重试");
|
||||
ClearChangeRoomBar();
|
||||
UIManager.Instance.ShowAsync(UIPanel.HomeMainPanel, GameManager.Instance.gameData.currGameType);
|
||||
return;
|
||||
}
|
||||
// 合并进度条:已拿到新房间(网络段 50%)
|
||||
SetChangeRoomBarProgress(0.5f);
|
||||
// 用 QuickJoin 返回的 webSocketUrl 直接连新房 game socket,然后 JoinRoom(-1) 让服务器分配座位
|
||||
GameManager.Instance.StartGameQuickJoin(resp.webSocketUrl, () =>
|
||||
{
|
||||
// 合并进度条:JoinRoom 已发送(网络段 55%,加载段起点)
|
||||
SetChangeRoomBarProgress(0.55f);
|
||||
WebSocketSendList.JoinRoom(resp.roomId, GameManager.Instance.user.id, -1);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user