少年修仙传客户端代码仓库
client_linchunjie
2018-08-22 428206a07225e046b3c60460f3793f04f00b4f96
1646 【前端】境界BossShow中的玩家模型单独加载
2个文件已修改
233 ■■■■ 已修改文件
System/Realm/RealmBossShow.cs 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/UI3DShowHero.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmBossShow.cs
@@ -11,7 +11,12 @@
        [SerializeField, Header("展示时间")] float m_DisplayTime = 15f;
        [SerializeField, Header("特效位置")] Vector3 m_EffectPosition = Vector3.zero;
        UI3DShowHero showHero = new UI3DShowHero();
        GameObject clothesModel;
        Animator clothesAnimator;
        Transform showPoint;
        List<SFXController> closthesSFXList = new List<SFXController>();
        static RealmBossShow m_Instance = null;
        public static RealmBossShow Instance
@@ -134,10 +139,11 @@
            }
            #endregion
            var _hero = showHero.Show(_job, _clothesId, _suitLevel, _weaponId, _wingsId, _secondaryId, m_HeroStage);
            showPoint = m_HeroStage;
            var _hero = ShowHero(_job, _clothesId, _suitLevel, _weaponId, _wingsId, _secondaryId);
            if (_hero != null)
            {
                showHero.SitDown();
                SitDown();
                LayerUtility.SetLayer(m_HeroStage.gameObject, LayerUtility.BossShow, true);
            }
        }
@@ -185,12 +191,202 @@
            showCamera.enabled = false;
            m_Effect.gameObject.SetActive(false);
            transform.localPosition = new Vector3(0, 4000, 5000);
            showHero.Dispose();
            if (m_Effect != null)
            {
                SFXPlayUtility.Instance.Release(m_Effect);
                m_Effect = null;
            }
            for (int i = closthesSFXList.Count - 1; i >= 0; i--)
            {
                if (closthesSFXList[i] != null)
                {
                    Destroy(closthesSFXList[i].gameObject);
                }
            }
            closthesSFXList.Clear();
            if (clothesModel != null)
            {
                Destroy(clothesModel);
                clothesModel = null;
                clothesAnimator = null;
            }
        }
        GameObject ShowHero(int _job, int _clothes, int suitID, int _weaponId, int _wingsId, int _secondaryId)
        {
            PutOnClothes(_job, _clothes, suitID);
            return clothesModel;
        }
        public void SitDown()
        {
            if (clothesModel != null)
            {
                var animator = clothesModel.GetComponent<Animator>();
                animator.Play(GAStaticDefine.State_SitDown);
            }
        }
        public void PutOnClothes(int _job, int itemID, int suitID)
        {
            var newClothes = 0;
            var config = Config.Instance.Get<JobSetupConfig>(_job);
            if (itemID == 0)
            {
                newClothes = config.BaseEquip[0];
            }
            else
            {
                var item = Config.Instance.Get<ItemConfig>(itemID);
                newClothes = item == null ? newClothes = config.BaseEquip[0] : item.ChangeOrd;
            }
            var _prefab = InstanceResourcesLoader.LoadModelRes(newClothes);
            if (!_prefab)
            {
                newClothes = config.BaseEquip[0];
            }
            LoadClothes(newClothes);
            LoadClothesEffect(_job, itemID, suitID);
        }
        private void LoadClothes(int resID)
        {
            var prefab = InstanceResourcesLoader.LoadModelRes(resID);
            if (clothesModel == null)
            {
                clothesModel = Instantiate(prefab, Constants.Special_Hide_Position, Quaternion.identity);
            }
            clothesModel.transform.SetParent(null);
            clothesModel.transform.localScale = Vector3.one;
            LayerUtility.SetLayer(clothesModel, LayerUtility.Player, false);
            var skinnedMeshRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>(true);
            LayerUtility.SetLayer(skinnedMeshRenderer.gameObject, LayerUtility.Player, false);
            clothesModel.SetActive(true);
            clothesModel.transform.SetParentEx(showPoint, Vector3.zero, Quaternion.identity, Vector3.one);
            clothesAnimator = clothesModel.GetComponent<Animator>();
            if (clothesAnimator == null)
            {
                DebugEx.LogErrorFormat("角色资源: {0} 没有动画控制器", resID);
            }
            // 动画状态机修改
            if (clothesAnimator)
            {
                RuntimeAnimatorController _controller = AnimatorControllerLoader.Load(AnimatorControllerLoader.controllerUISuffix, resID);
                clothesAnimator.runtimeAnimatorController = _controller;
                clothesAnimator.enabled = true;
            }
        }
        public void LoadClothesEffect(int job,int clothedID, int suitLevel)
        {
            var _equipModel = ModelCenter.Instance.GetModel<PlayerPackModel>().GetSinglePackModel(PackType.rptEquip);
            if (_equipModel == null)
            {
                if (DTC0309_tagPlayerLoginInfo.equipSuitID > 0)
                {
                    PutOnEffect(DTC0309_tagPlayerLoginInfo.equipSuitID);
                }
                return;
            }
            int _suitCount = 0;
            int _start = (int)RoleEquipType.retHat;
            int _end = (int)RoleEquipType.retShoes;
            ItemModel _itemModel = null;
            _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retClothes);
            if (_itemModel == null)
            {
                return;
            }
            int _rank = _itemModel.chinItemModel.LV;
            for (int i = _start; i <= _end; ++i)
            {
                _itemModel = _equipModel.GetItemModelByIndex(i);
                if (_itemModel == null)
                {
                    continue;
                }
                if (_itemModel.chinItemModel.SuiteiD <= 0)
                {
                    continue;
                }
                if (i == (int)RoleEquipType.retClothes)
                {
                    _rank = _itemModel.chinItemModel.LV;
                }
                var suitModel = ModelCenter.Instance.GetModel<PlayerSuitModel>();
                if (suitModel.suitModelDict.ContainsKey(i))
                {
                    if (suitModel.suitModelDict[i].ContainsKey(1)
                     || suitModel.suitModelDict[i].ContainsKey(2))
                    {
                        if (_itemModel.chinItemModel.LV >= _rank)
                        {
                            _suitCount += 1;
                        }
                    }
                }
            }
            if (_suitCount == 5)
            {
                int _type = 1;
                int _suitEffectID = _type * 1000 + job * 100 + _rank;
                PutOnEffect(_suitEffectID);
            }
        }
        public void PutOnEffect(int id)
        {
            SuitEffectConfig _suitEffect = Config.Instance.Get<SuitEffectConfig>(id);
            // 上特效
            if (_suitEffect != null)
            {
                Transform _parent = null;
                SFXController _sfx = null;
                for (int i = 0; _suitEffect.bindbones != null && i < _suitEffect.bindbones.Length; ++i)
                {
                    if (string.IsNullOrEmpty(_suitEffect.bindbones[i])
                        || _suitEffect.effectIds[i] == 0)
                    {
                        continue;
                    }
                    _parent = clothesModel.transform.GetChildTransformDeeply(_suitEffect.bindbones[i]);
                    if (_parent == null)
                    {
                        Debug.LogErrorFormat("套装: {0} 配置的骨骼节点: {1} 不存在", id, _suitEffect.bindbones[i]);
                        continue;
                    }
                    _sfx = SFXPlayUtility.Instance.PlayBattleEffect(_suitEffect.effectIds[i], _parent);
                    closthesSFXList.Add(_sfx);
                }
            }
        }
    }
}
UI/Common/UI3DShowHero.cs
@@ -50,7 +50,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(weaponModel);
                pool.Release(weaponModel);
                weaponModel = null;
            }
@@ -59,7 +58,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(secondaryId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(secondaryModel);
                pool.Release(secondaryModel);
                secondaryModel.SetActive(true);
                secondaryModel = null;
@@ -69,7 +67,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(wingsId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(wingsModel);
                pool.Release(wingsModel);
                wingsModel = null;
                wingsAnimator = null;
@@ -79,7 +76,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(clothesId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(clothesModel);
                pool.Release(clothesModel);
                clothesModel = null;
                if (clothesAnimator)
@@ -120,7 +116,6 @@
            if (weaponModel)
            {
                ResetModelLayer(weaponModel);
                GameObject prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
                GameObjectPoolManager.Instance.ReleaseGameObject(prefab, weaponModel);
                weaponModel = null;
@@ -225,7 +220,6 @@
            var prefab = InstanceResourcesLoader.LoadModelRes(clothesId);
            var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
            ResetModelLayer(clothesModel);
            pool.Release(clothesModel);
            clothesModel = null;
            if (clothesAnimator != null)
@@ -268,7 +262,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(oldWeapon);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(weaponModel);
                pool.Release(weaponModel);
                weaponModel = null;
            }
@@ -318,7 +311,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(secondaryModel);
                pool.Release(secondaryModel);
                secondaryModel = null;
            }
@@ -333,13 +325,6 @@
                }
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                secondaryModel = pool.Request();
                secondaryModel.layer = LayerUtility.Player;
                SkinnedMeshRenderer _renderer = secondaryModel.GetComponentInChildren<SkinnedMeshRenderer>();
                if (_renderer)
                {
                    _renderer.gameObject.layer = LayerUtility.Player;
                }
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
@@ -372,7 +357,6 @@
            {
                prefab = InstanceResourcesLoader.LoadModelRes(oldWings);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                ResetModelLayer(wingsModel);
                pool.Release(wingsModel);
                wingsModel = null;
            }
@@ -538,19 +522,6 @@
                SFXPlayUtility.Instance.Release(closthesSFXList[i]);
            }
            closthesSFXList.Clear();
        }
        void ResetModelLayer(GameObject _go)
        {
            if (_go != null)
            {
                var skinMeshRender = _go.GetComponentInChildren<SkinnedMeshRenderer>();
                if (skinMeshRender != null)
                {
                    skinMeshRender.gameObject.layer = LayerUtility.Player;
                }
                LayerUtility.SetLayer(_go, LayerUtility.Player, false);
            }
        }
    }