From 050bf5e9c88e9eef17e6f58f2c3876c81a38236a Mon Sep 17 00:00:00 2001 From: Le Duc Anh Date: Sat, 21 Feb 2026 23:33:08 +0700 Subject: [PATCH] v --- Assets/PerfectWorld/Scene/Bootstrap.unity | 4 +- .../Scripts/Common/CameraProvider.cs | 17 +++ .../Scripts/Common/CameraProvider.cs.meta | 2 + Assets/PerfectWorld/Scripts/Common/Logger.cs | 2 +- .../Scripts/Common/LookAtCamera.cs | 3 +- Assets/PerfectWorld/Scripts/Move/CECPlayer.cs | 2 +- .../Scripts/World/AddressableObject.cs | 8 +- .../Scripts/World/LitModelHolder.cs | 140 ++++++++++-------- Assets/Scenes/a61.unity | 4 +- Assets/Scripts/CECGameRun.cs | 2 + Assets/Scripts/CECHostPlayer.cs | 105 ++++++------- Assets/Scripts/CECUIManager.cs | 2 +- ProjectSettings/ProjectSettings.asset | 2 +- ProjectSettings/QualitySettings.asset | 6 +- 14 files changed, 172 insertions(+), 127 deletions(-) create mode 100644 Assets/PerfectWorld/Scripts/Common/CameraProvider.cs create mode 100644 Assets/PerfectWorld/Scripts/Common/CameraProvider.cs.meta diff --git a/Assets/PerfectWorld/Scene/Bootstrap.unity b/Assets/PerfectWorld/Scene/Bootstrap.unity index 69bf31a50d..9918627030 100644 --- a/Assets/PerfectWorld/Scene/Bootstrap.unity +++ b/Assets/PerfectWorld/Scene/Bootstrap.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0c57d8d96f20a7602e9c9af036ccd27adccf9d08ecbcd6f60bec0ba4e78e5e2 -size 281532 +oid sha256:60c9fc32910746f134c7ade2390c674afb51eae2d258e8292b0bb9e817d02732 +size 282839 diff --git a/Assets/PerfectWorld/Scripts/Common/CameraProvider.cs b/Assets/PerfectWorld/Scripts/Common/CameraProvider.cs new file mode 100644 index 0000000000..fd7ef2f26d --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Common/CameraProvider.cs @@ -0,0 +1,17 @@ +using Unity.Cinemachine; +using UnityEngine; + +namespace BrewMonster.Scripts +{ + public class CameraProvider : MonoSingleton + { + + [SerializeField]private CinemachineBrain _cinemachineBrain; + public CinemachineBrain CinemachineBrain + { + get => _cinemachineBrain; + private set => _cinemachineBrain = value; + } + + } +} diff --git a/Assets/PerfectWorld/Scripts/Common/CameraProvider.cs.meta b/Assets/PerfectWorld/Scripts/Common/CameraProvider.cs.meta new file mode 100644 index 0000000000..076a9889fc --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Common/CameraProvider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 536ca7dcb1b8e4e0fae1bb97ef326ed3 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Common/Logger.cs b/Assets/PerfectWorld/Scripts/Common/Logger.cs index 79cc5af3fa..11e092e00f 100644 --- a/Assets/PerfectWorld/Scripts/Common/Logger.cs +++ b/Assets/PerfectWorld/Scripts/Common/Logger.cs @@ -1,4 +1,4 @@ -// #define ENALBE_LOGGING +#define ENALBE_LOGGING using UnityEngine; namespace BrewMonster diff --git a/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs b/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs index c6eb6a94ab..d682d7bfb9 100644 --- a/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs +++ b/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs @@ -1,3 +1,4 @@ +using BrewMonster.Scripts; using Unity.Cinemachine; using UnityEngine; @@ -21,7 +22,7 @@ public class LookAtCamera : MonoBehaviour { if (targetCamera == null) { - var brain = FindFirstObjectByType(); + var brain = CameraProvider.Instance.CinemachineBrain; if (brain != null) targetCamera = brain.OutputCamera; if (targetCamera == null && Camera.main != null) diff --git a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs index 88312aedc8..2fc72a6358 100644 --- a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs @@ -112,7 +112,7 @@ namespace BrewMonster int m_iBuddyId; int m_idCandBuddy; // ID of candidate buddy EC_ManPlayer m_pPlayerMan => EC_ManMessageMono.Instance?.GetECManPlayer; // Player manager - protected Transform playerTransform => transform; + protected Transform playerTransform => _objectTransform ??= transform; public MOVECONST m_MoveConst; // Const used when moving control public Move_Mode m_MoveMode; diff --git a/Assets/PerfectWorld/Scripts/World/AddressableObject.cs b/Assets/PerfectWorld/Scripts/World/AddressableObject.cs index 065876d8c5..9b26f28a11 100644 --- a/Assets/PerfectWorld/Scripts/World/AddressableObject.cs +++ b/Assets/PerfectWorld/Scripts/World/AddressableObject.cs @@ -11,17 +11,19 @@ public class AddressableObject : MonoBehaviour public string assetPath; private GameObject _instance; - private bool _isLoading; - private bool _isLoaded; + public bool _isLoading; + public bool _isLoaded; private int _loadRequestId; public bool IsLoaded => _isLoaded; public bool IsLoading => _isLoading; public Vector3 ObjectPosition; + public Vector3 ObjectPositionOxz; void Awake() { ObjectPosition = transform.position; + ObjectPositionOxz = new Vector3(ObjectPosition.x, 0, ObjectPosition.z); } public async UniTask LoadAsset() @@ -74,12 +76,12 @@ public class AddressableObject : MonoBehaviour // make the loading request invalid. _loadRequestId++; _isLoading = false; + _isLoaded = false; if (_instance != null) { Destroy(_instance); _instance = null; - _isLoaded = false; } else if (transform.childCount > 0) { diff --git a/Assets/PerfectWorld/Scripts/World/LitModelHolder.cs b/Assets/PerfectWorld/Scripts/World/LitModelHolder.cs index 2af088368b..86745138d5 100644 --- a/Assets/PerfectWorld/Scripts/World/LitModelHolder.cs +++ b/Assets/PerfectWorld/Scripts/World/LitModelHolder.cs @@ -35,9 +35,10 @@ public class LitModelHolder : MonoSingleton private HashSet _loadedObjects = new HashSet(); private List _objectsToUnload = new List(); - private Vector3 _lastHostPos; + private Vector3 _lastHostPosOxz; private bool _hasLastHostPos = false; private Vector3 _currentHostPos; + private Vector3 _currentHostPosOxz; private bool _hostPosReady = false; private AddressableObject _currentObjectToCheck; // the object that we're currently checking for loading/unloading. private bool _needToProcessLoadAndUnload = false; @@ -51,6 +52,8 @@ public class LitModelHolder : MonoSingleton #region Unity Lifecycle protected override async void Initialize() { + _currentHostPos = Vector3.zero; + _currentHostPosOxz = Vector3.zero; await StartStreamingProcess(); } @@ -110,19 +113,19 @@ public class LitModelHolder : MonoSingleton // Wait until Addressables are initialized. while (!AddressableManager.Instance.IsInitialized()) { - await UniTask.DelayFrame(1, cancellationToken: destroyToken); + await Task.Delay(100, destroyToken); } while (_hostPlayer == null) { _hostPlayer = GetHostPlayer(); - await UniTask.Delay(100); + await Task.Delay(100, destroyToken); continue; } while (!_hostPlayer.IsAllResReady()) { - await UniTask.Delay(100); + await Task.Delay(100, destroyToken); continue; } @@ -130,9 +133,9 @@ public class LitModelHolder : MonoSingleton await LoadObjectBaseOnDistance(destroyToken); // Start distance-based streaming loop. This will be running continuously in the background. - UniTask.RunOnThreadPool(() => + UniTask.RunOnThreadPool(async () => { - StreamByDistanceLoop(destroyToken : destroyToken); + await StreamByDistanceLoop(destroyToken : destroyToken); } ).Forget(); } @@ -150,8 +153,6 @@ public class LitModelHolder : MonoSingleton _unloadDistance = _loadImmediateDistance; } - float immediateSqr = _loadImmediateDistance * _loadImmediateDistance; - while (_hostPlayer == null) { _hostPlayer = GetHostPlayer(); @@ -160,45 +161,37 @@ public class LitModelHolder : MonoSingleton continue; } - await UniTask.DelayFrame(1); // wait for the host player to be initialized. + await Task.Delay(100, destroyToken); // wait for the host player to be initialized. + + _currentHostPosOxz = _hostPlayer.GetPosVector3(); + _currentHostPosOxz.y = 0; + LoadAllObjectsNearPosition(_currentHostPosOxz, destroyToken); + } + + /// + /// This function will load all the objects that are close to the host player immediately.

+ /// Use this once at the beginning of the game. Or when player is revived/GOTO/Teleported. + ///
+ /// + private void LoadAllObjectsNearPosition(Vector3 targetPosition, CancellationToken destroyToken) + { + if (addressableObjects == null || addressableObjects.Length == 0) + { + return; + } + + if (_unloadDistance < _loadImmediateDistance) + { + _unloadDistance = _loadImmediateDistance; + } + + float immediateSqr = _loadImmediateDistance * _loadImmediateDistance; + float paddingSqr = _unloadDistance * _unloadDistance; List objectsToLoad = new List(); + targetPosition.y = 0; // only consider Oxz plane // go through all the objects, check for the immediateSqr and load the objects that are in the range. - for (int i = 0; i < addressableObjects.Length; i++) - { - AddressableObject obj = addressableObjects[i]; - if (obj == null) - { - continue; - } - float distSqr = (obj.transform.position - _hostPlayer.transform.position).sqrMagnitude; - if (distSqr <= immediateSqr) - { - obj.LoadAsset().Forget(); - objectsToLoad.Add(obj); - } - } - - if (objectsToLoad.Count > 0) - { - // wait until all the objects are loaded. - bool allLoaded = false; - while (!allLoaded) - { - allLoaded = true; - for (int i = 0; i < objectsToLoad.Count; i++) - { - if (!objectsToLoad[i].IsLoaded && !objectsToLoad[i].IsLoading) - { - allLoaded = false; - break; - } - } - await UniTask.DelayFrame(1, cancellationToken: destroyToken); - } - - BMLogger.Log("[LitModelHolder] All objects are loaded."); - } + TickStreaming(targetPosition, immediateSqr, paddingSqr, destroyToken); } @@ -229,7 +222,7 @@ public class LitModelHolder : MonoSingleton if (_hasLastHostPos) { - if ((_currentHostPos - _lastHostPos).sqrMagnitude < minMoveSqr) + if ((_currentHostPosOxz - _lastHostPosOxz).sqrMagnitude < minMoveSqr) { await Task.Delay(intervalMs, destroyToken); continue; @@ -237,9 +230,9 @@ public class LitModelHolder : MonoSingleton } _hasLastHostPos = true; - _lastHostPos = _currentHostPos; - - await TickStreaming(_currentHostPos, immediateSqr, paddingSqr, destroyToken); + _lastHostPosOxz = _currentHostPosOxz; + + TickStreaming(_currentHostPosOxz, immediateSqr, paddingSqr, destroyToken); await Task.Delay(intervalMs, destroyToken); } @@ -251,7 +244,7 @@ public class LitModelHolder : MonoSingleton /// Go through all the objects and check if they are in the immediate loading range or padding range. /// /// - private async UniTask TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, CancellationToken destroyToken) + private void TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, CancellationToken destroyToken) { if (addressableObjects == null || addressableObjects.Length == 0) { @@ -268,15 +261,14 @@ public class LitModelHolder : MonoSingleton continue; } - if (_loadedObjects.Contains(_currentObjectToCheck)) - { - continue; - } - - float distSqr = (_currentObjectToCheck.ObjectPosition - hostPos).sqrMagnitude; + float distSqr = (_currentObjectToCheck.ObjectPositionOxz - hostPos).sqrMagnitude; if (distSqr <= immediateSqr) { + if (_currentObjectToCheck.IsLoaded || _currentObjectToCheck.IsLoading) + { + continue; + } if (!_candidatesForLoading.ContainsKey(_currentObjectToCheck)) { _candidatesForLoading[_currentObjectToCheck] = _realTimeSinceStartUp; @@ -286,7 +278,10 @@ public class LitModelHolder : MonoSingleton { if (_currentObjectToCheck.IsLoaded || _currentObjectToCheck.IsLoading) { - _objectsToUnload.Add(_currentObjectToCheck); + if (!_objectsToUnload.Contains(_currentObjectToCheck)) + { + _objectsToUnload.Add(_currentObjectToCheck); + } } } } @@ -299,11 +294,8 @@ public class LitModelHolder : MonoSingleton // load the objects that are in the loading range long enough. (_candidateWaitTimeSeconds) foreach (var kvp in _candidatesForLoading) { - if (kvp.Value < _realTimeSinceStartUp - _candidateWaitTimeSeconds) - { - kvp.Key.LoadAsset().Forget(); - _loadedObjects.Add(kvp.Key); - } + kvp.Key.LoadAsset().Forget(); + _loadedObjects.Add(kvp.Key); } // remove the loaded objects from the candidates for loading list. foreach (var obj in _loadedObjects) @@ -335,13 +327,37 @@ public class LitModelHolder : MonoSingleton _hostPlayer = GetHostPlayer(); if (_hostPlayer != null) { - _currentHostPos = _hostPlayer.transform.position; + _currentHostPosOxz = _hostPlayer.GetPosVector3(false); + _currentHostPosOxz.y = 0; _hostPosReady = true; } } #endregion +#region Public Functions + public async UniTask LoadAllObjectsNearTargetPosition(Vector3 targetPosition = default, bool useHostPlayerPosition = false) + { + if (!useHostPlayerPosition) + { + _currentHostPosOxz = targetPosition; + _currentHostPosOxz.y = 0; + } + else + { + while (_hostPlayer == null) + { + UpdateHostPlayerPosition(); + await Task.Delay(10); + continue; + } + } + + + UniTask.RunOnThreadPool(() => {LoadAllObjectsNearPosition(_currentHostPosOxz, _cts.Token);}).Forget(); + } +#endregion + // Keep this part of the code for the initial setup of the addressable objects. // We have to run this once on every scene. #if UNITY_EDITOR diff --git a/Assets/Scenes/a61.unity b/Assets/Scenes/a61.unity index ade6afb875..494de6f26a 100644 --- a/Assets/Scenes/a61.unity +++ b/Assets/Scenes/a61.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f175b8382ec0686d5bce9ce1d33a04868482bfd6bf28ef42b01356eaba0630f -size 196281143 +oid sha256:8afbdb17249969e64a11fbda64cda8d83eebcc9fa65a12a47dfa60670304a597 +size 196460134 diff --git a/Assets/Scripts/CECGameRun.cs b/Assets/Scripts/CECGameRun.cs index 77d52abbe6..5c511f6dcb 100644 --- a/Assets/Scripts/CECGameRun.cs +++ b/Assets/Scripts/CECGameRun.cs @@ -76,6 +76,8 @@ public partial class CECGameRun public void Init() { #if !UNITY_EDITOR + Debug.unityLogger.logEnabled = false; + QualitySettings.vSyncCount = 0; Application.targetFrameRate = 60; #endif instance = this; diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 193fa3cb21..8c2f04b5cf 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -564,71 +564,71 @@ namespace BrewMonster //Debug.LogError("HoangDev : ProcessMessageProcessMessageProcessMessage " + msg); switch (msg) { - case int value when value == EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_IVTRINFO: + case EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break; + case EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break; + case EC_MsgDef.MSG_HST_IVTRINFO: { OnMsgHstIvtrInfo(Msg); break; } - case int value when value == EC_MsgDef.MSG_HST_OWNITEMINFO: + case EC_MsgDef.MSG_HST_OWNITEMINFO: { OnMsgHstOwnItemInfo(Msg); break; } - case int value when value == EC_MsgDef.MSG_HST_TASKDATA: + case EC_MsgDef.MSG_HST_TASKDATA: { OnMsgHstTaskData(Msg).Forget(); //Debug.LogError("[Dat]- OnMsgHstTaskData"); break; } - case int value when value == EC_MsgDef.MSG_HST_ITEMOPERATION: + case EC_MsgDef.MSG_HST_ITEMOPERATION: OnMsgHstItemOperation(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_PICKUPITEM: + case EC_MsgDef.MSG_HST_PICKUPITEM: OnMsgHstPickupItem(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_PRODUCEITEM: + case EC_MsgDef.MSG_HST_PRODUCEITEM: OnMsgHstProduceItem(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_SELTARGET: + case EC_MsgDef.MSG_HST_SELTARGET: OnMsgHstSelTarget(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_USEITEM: + case EC_MsgDef.MSG_HST_USEITEM: OnMsgHstUseItem(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_STARTATTACK: OnMsgHstStartAttack(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_STOPATTACK: OnMsgHstStopAttack(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_SKILLRESULT: OnMsgHstSkillResult(Msg); break; - case int value when value == EC_MsgDef.MSG_PM_CASTSKILL: OnMsgPlayerCastSkill(Msg); break; - case int value when value == EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break; + case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break; + case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break; + case EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break; + case EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break; + case EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break; + case EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break; + case EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break; + case EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break; + case EC_MsgDef.MSG_HST_STARTATTACK: OnMsgHstStartAttack(Msg); break; + case EC_MsgDef.MSG_HST_STOPATTACK: OnMsgHstStopAttack(Msg); break; + case EC_MsgDef.MSG_HST_SKILLRESULT: OnMsgHstSkillResult(Msg); break; + case EC_MsgDef.MSG_PM_CASTSKILL: OnMsgPlayerCastSkill(Msg); break; + case EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break; - case int value when value == EC_MsgDef.MSG_PM_PLAYERDOEMOTE: OnMsgPlayerDoEmote(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_TARGETISFAR: OnMsgHstTargetIsFar(Msg); break; - case int value when value == EC_MsgDef.MSG_PM_PLAYERGATHER: OnMsgPlayerGather(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_SETCOOLTIME: OnMsgHstSetCoolTime(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_LEARNSKILL: OnMsgHstLearnSkill(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE: OnMsgComboSkillPrepare(Msg); break; - case int value when value == EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break; - case int value when value == EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break; - case int value when value == EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break; + case EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break; + case EC_MsgDef.MSG_PM_PLAYERDOEMOTE: OnMsgPlayerDoEmote(Msg); break; + case EC_MsgDef.MSG_HST_TARGETISFAR: OnMsgHstTargetIsFar(Msg); break; + case EC_MsgDef.MSG_PM_PLAYERGATHER: OnMsgPlayerGather(Msg); break; + case EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break; + case EC_MsgDef.MSG_HST_SETCOOLTIME: OnMsgHstSetCoolTime(Msg); break; + case EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break; + case EC_MsgDef.MSG_HST_LEARNSKILL: OnMsgHstLearnSkill(Msg); break; + case EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE: OnMsgComboSkillPrepare(Msg); break; + case EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break; + case EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break; + case EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break; + case EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break; + case EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break; + case EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break; + case EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break; + case EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break; + case EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break; + case EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break; } /*if (bActionStartSkill) @@ -1044,7 +1044,7 @@ namespace BrewMonster switch (Convert.ToInt32(Msg.dwParam2)) { - case int value2 when value2 == CommandID.OBJECT_CAST_SKILL: + case CommandID.OBJECT_CAST_SKILL: { cmd_object_cast_skill pCmd = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1); @@ -1109,7 +1109,7 @@ namespace BrewMonster } break; } - case int value2 when value2 == CommandID.SKILL_PERFORM: + case CommandID.SKILL_PERFORM: { // Skill perform // 技能执行 @@ -1129,7 +1129,7 @@ namespace BrewMonster break; } - case int value2 when value2 == CommandID.HOST_STOP_SKILL: + case CommandID.HOST_STOP_SKILL: { m_pPrepSkill = null; @@ -1166,7 +1166,7 @@ namespace BrewMonster m_idCurSkillTarget = 0; break; } - case int value2 when value2 == CommandID.SELF_SKILL_INTERRUPTED: + case CommandID.SELF_SKILL_INTERRUPTED: { // Skill interrupted // 技能被打断 @@ -1213,7 +1213,7 @@ namespace BrewMonster CECAutoPolicy.GetInstance().SendEvent_SkillInterrupt(skill_id); break; } - case int value2 when value2 == CommandID.OBJECT_CAST_INSTANT_SKILL: + case CommandID.OBJECT_CAST_INSTANT_SKILL: { // Cast instant skill // 施放即时技能 @@ -1236,7 +1236,7 @@ namespace BrewMonster bActionStartSkill = true; break; } - case int value2 when value2 == CommandID.OBJECT_CAST_POS_SKILL: + case CommandID.OBJECT_CAST_POS_SKILL: { // Cast position skill (target position instead of target object) // 施放位置技能(目标位置而不是目标对象) @@ -1361,7 +1361,7 @@ namespace BrewMonster bActionStartSkill = true; break; } - case int value2 when value2 == CommandID.PLAYER_CAST_RUNE_SKILL: + case CommandID.PLAYER_CAST_RUNE_SKILL: { // Cast rune skill (item skill) // 施放符文技能(物品技能) @@ -1424,7 +1424,7 @@ namespace BrewMonster Debug.Log($"Cast rune skill({m_pCurSkill.GetSkillID()})"); break; } - case int value2 when value2 == CommandID.PLAYER_CAST_RUNE_INSTANT_SKILL: + case CommandID.PLAYER_CAST_RUNE_INSTANT_SKILL: { // Cast instant rune skill // 施放即时符文技能 @@ -1452,7 +1452,7 @@ namespace BrewMonster bActionStartSkill = true; break; } - case int value2 when value2 == CommandID.ERROR_MESSAGE: + case CommandID.ERROR_MESSAGE: bDoOtherThing = true; break; @@ -3032,7 +3032,7 @@ namespace BrewMonster // 调用 Goto 方法来正确处理传送 if (!Goto(idInst, vPos, iLine)) { - Debug.LogError($"OnMsgHstGoto: Failed to teleport to instance {idInst}"); + BMLogger.LogError($"OnMsgHstGoto: Failed to teleport to instance {idInst}"); return; } } @@ -3088,6 +3088,7 @@ namespace BrewMonster // 如果可用则更新相机 // UpdateFollowCamera(false, 10); // Uncomment if UpdateFollowCamera method exists + LitModelHolder.Instance.LoadAllObjectsNearTargetPosition(vPos).Forget(); return true; } diff --git a/Assets/Scripts/CECUIManager.cs b/Assets/Scripts/CECUIManager.cs index 3f1c26f183..129f7648ac 100644 --- a/Assets/Scripts/CECUIManager.cs +++ b/Assets/Scripts/CECUIManager.cs @@ -55,7 +55,7 @@ public class CECUIManager : MonoSingleton } private void Update() { - _fpsText.text = $"{Mathf.RoundToInt(1f / Time.deltaTime)}"; + // _fpsText.text = $"{Mathf.RoundToInt(1f / Time.deltaTime)}"; if (m_pDlgQuickBar1 != null) { m_pDlgQuickBar1.UpdateShortcuts(); } } diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 22d4f94362..bd02b9c045 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -69,7 +69,7 @@ PlayerSettings: disableDepthAndStencilBuffers: 0 androidStartInFullscreen: 1 androidRenderOutsideSafeArea: 1 - androidUseSwappy: 1 + androidUseSwappy: 0 androidBlitType: 0 androidResizeableActivity: 1 androidDefaultWindowWidth: 1920 diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 6fbd599cad..85e6b6e8f0 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -60,4 +60,8 @@ QualitySettings: excludedTargetPlatforms: - Standalone m_TextureMipmapLimitGroupNames: [] - m_PerPlatformDefaultQuality: {} + m_PerPlatformDefaultQuality: + Android: 0 + Standalone: 0 + VisionOS: 0 + iPhone: 0