Ejemplo n.º 1
0
 private void OnSkinChanged(SkinInstance si, int nPart)
 {
     if (!Valid)
     {
         return;
     }
     UpdateBindBoneTransform();
 }
Ejemplo n.º 2
0
 public override void SetVisible(bool bVisible, bool ApplyAll = false)
 {
     m_currStateData.Vislble = bVisible;
     if (!SkinInstance.isNullOrEmpry(CurrentSkinInstance))
     {
         SetVisible_Impl(bVisible, CurrentSkinInstance);
     }
 }
Ejemplo n.º 3
0
 protected void InvokeSkinChangedEvent(SkinInstance ins, int nPart)
 {
     if (null == onSkinChanged)
     {
         return;
     }
     onSkinChanged.Invoke(ins, nPart);
 }
Ejemplo n.º 4
0
    public static bool isNullOrEmpry(SkinInstance instance)
    {
        if (null == instance)
        {
            return(true);
        }

        return(!instance.isValid);
    }
Ejemplo n.º 5
0
    private static void BuildTankSkinInstance(Skin sk, GameObject instanceSkin, ref SkinInstance si)
    {
        if (!sk.isValid)
        {
            return;
        }


        return;
    }
Ejemplo n.º 6
0
        private static void OnRelateSkinLoadFinish(Skin sk)
        {
            if (!sk.isValid)
            {
                return;
            }
            SkinInstance go = sk.Instantiate_Main();

            if (go != null)
            {
                SkinManager.CacheSkinInstance(go);
            }
        }
Ejemplo n.º 7
0
        private void ApplyMonsterSkinDataToMachine(MonsterStateMachine machine, SkinInstance instance)
        {
            MonsterSkinConfig SkinConfig = instance.entitySkinConfig as MonsterSkinConfig;

            if (null == SkinConfig)
            {
                Debug.LogError("切换皮肤重大错误-ApplyMonsterSkinDataToMachine");
                return;
            }

            machine.animator = instance.MainAnimator;
            machine.RefershAnimatorDataWhenSkinChangedFinish();
            instance.ReferencedSkinCtrl = this;
        }
Ejemplo n.º 8
0
    public void ApplyOrginalData(SkinInstance instance)
    {
        if (SkinInstance.isNullOrEmpry(instance))
        {
            return;
        }

        Transform mainTrs = instance.GetBonesTransform("Main");

        if (mainTrs)
        {
            mainTrs.localScale = OrginalData.mainBonesScale;
        }
    }
Ejemplo n.º 9
0
    /// <summary>
    /// 是否可以寻找骨骼,因为皮肤属于异步加载逻辑,有可能皮肤没有加载完成,光效已经出来了。对于绑定光效是找不到骨骼的
    /// </summary>
    /// <param name="entityID"></param>
    /// <returns></returns>
    public static bool IsCanFindTransform(int entityID)
    {
        U3D_Render.EntityView ev = EntityFactory.getEntityViewByID(entityID);
        if (U3D_Render.EntityView.isNullOrEmpty(ev))
        {
            return(true);
        }
        BaseStateMachine machine = GetStateMachine(entityID);

        if (!machine)
        {
            return(true);
        }

        return(!SkinInstance.isNullOrEmpry(machine.SkinControl.CurrentSkinInstance));
    }
Ejemplo n.º 10
0
 /// <summary>
 /// 普通血条更新
 /// </summary>
 private void NormalUpdate()
 {
     m_InvalidList.Clear();
     if (null != m_BloodMap)
     {
         foreach (UBlood var in m_BloodMap.Values)
         {
             UBlood     ub   = var;
             EntityView view = ub.Entity;
             if (view == null || !view.IsValid)
             {
                 m_InvalidList.Enqueue(ub);
                 continue;
             }
             //如果实体未激活,或者尚未加载完毕则隐藏血条
             if (SkinInstance.isNullOrEmpry(view.SkinControl.CurrentSkinInstance) || !view.StateMachine.GetVisible())
             {
                 ub.SetEnable(false);
                 if (view.Type == ENTITY_TYPE.TYPE_PLAYER_ROLE)
                 {
                     ub.OnUpdate();
                 }
             }
             else
             {
                 ub.SetEnable(true);
                 //需要更新的血条进行正常更新
                 ub.OnUpdate();
             }
         }
     }
     while (m_InvalidList.Count > 0)
     {
         UBlood ub = m_InvalidList.Dequeue();
         if (bPreWarmBlood)
         {
             CacheBlood(ub);
         }
         else
         {
             DestroyBlood(ub);
         }
     }
     m_InvalidList.Clear();
 }
Ejemplo n.º 11
0
        public async Task BuyCase(int n)
        {
            UserData user = GetUserData(Context.Message.Author.Id);

            if (CSGOConfigs.config.caseprice > user.cash)
            {
                await QuickEmbed($"Insufficient funds! A case costs ``${CSGOConfigs.config.caseprice}``");

                return;
            }
            if (n >= Cases.cases.Length || n < 0)
            {
                await QuickEmbed($"Please enter a number between 0 and {Cases.cases.Length - 1}");

                return;
            }

            Console.WriteLine($"There are {Cases.cases.Length} cases aval");

            user.cash -= CSGOConfigs.config.caseprice;
            SkinInstance skin = Cases.cases[n].OpenCase();

            user.skins.Add(skin);

            ChangeUserData(Context.Message.Author.Id, user);

            var embed = new EmbedBuilder();

            embed.WithDescription($"{Context.Message.Author.Mention} just unboxed a")
            .AddField("---------------", $"**{skin.ToString()}** \n" +
                      $"from a {Cases.cases[n].name}!\n" +
                      $"Value **${skin.worth}**")
            .WithColor(CSGOConfigs.GetColor(skin.skinData.rarity));

            if (skin.skinData.imageURL != "")
            {
                embed.WithImageUrl(skin.skinData.imageURL);
            }


            await ReplyAsync(embed : embed.Build());
        }
Ejemplo n.º 12
0
    public static void UnRegsiterSkinChangedEvent(int entityID, UnityAction <SkinInstance, int> action)
    {
        U3D_Render.EntityView ev = EntityFactory.getEntityViewByID(entityID);
        if (U3D_Render.EntityView.isNullOrEmpty(ev))
        {
            return;
        }
        BaseStateMachine machine = GetStateMachine(entityID);

        if (!machine)
        {
            return;
        }

        if (SkinInstance.isNullOrEmpry(machine.SkinControl.CurrentSkinInstance))
        {
            return;
        }
        machine.SkinControl.UnRegsiterSkinChangedEvent(action);
    }
Ejemplo n.º 13
0
    public void SaveOrginalData(SkinInstance instance)
    {
        if (bGetOrginalData)
        {
            return;
        }
        if (SkinInstance.isNullOrEmpry(instance))
        {
            return;
        }

        bGetOrginalData            = true;
        OrginalData                = new SkinOrginalData();
        OrginalData.mainBonesScale = Vector3.one;
        Transform mainTrs = instance.GetBonesTransform("Main");

        if (mainTrs)
        {
            OrginalData.mainBonesScale = mainTrs.localScale;
        }
    }
Ejemplo n.º 14
0
    public static void DeleteSkin(ref SkinInstance instance)
    {
        if (null == instance)
        {
            return;
        }

        if (instance.nSkinID <= 0)
        {
            return;
        }

        if (!instance.isLoadFinish)
        {
            Debug.LogWarning("异步加载的皮肤,使用了同步卸载接口,可能会出现一些问题:" + instance.nSkinID);
        }
        SkinManager.CacheSkinInstance(instance);

        ReleaseSkin(instance.nSkinID);
        instance = null;
    }
Ejemplo n.º 15
0
    public static void DisableSkinInstance(SkinInstance instance)
    {
        if (null == instance)
        {
            return;
        }
        if (!instance.isValid)
        {
            return;
        }
        Skin sk = null;

        m_SkinMap.TryGetValue(instance.nSkinID, out sk);
        sk.ApplyOrginalData(instance);
        if (instance.playEntityStaticEffect)
        {
            instance.playEntityStaticEffect.Stop();
        }

        if (instance.switchEffectWithHeroDistance)
        {
            instance.switchEffectWithHeroDistance.DisableAll();
        }
        instance.SkinObj.SetActive(false);
        instance.SetVisible(true);            //重置可见性
        instance.SetBindEffectEnabled(false); //重置绑定特效
        BipedIKAnimator anc = instance.SkinObj.GetComponent <BipedIKAnimator>();

        if (anc != null)
        {
            if (anc.goA != null)
            {
                anc.goA.SetActive(false);
            }
            if (anc.goB != null)
            {
                anc.goB.SetActive(false);
            }
        }
    }
Ejemplo n.º 16
0
    public static Transform FindTransformWound(int entityID, string woundName)
    {
        if (string.IsNullOrEmpty(woundName))
        {
            return(null);
        }

        U3D_Render.EntityView ev = EntityFactory.getEntityViewByID(entityID);
        if (null != ev && null != ev.SkinControl)
        {
            SkinInstance si = ev.SkinControl.CurrentSkinInstance;
            if (null != si && null != si.SkinDataObj)
            {
                Transform wound = si.SkinDataObj.FindChild(woundName);
                if (wound != null)
                {
                    return(wound);
                }
            }
        }
        return(null);
    }
Ejemplo n.º 17
0
    public static void CacheSkinInstance(SkinInstance instance)
    {
        if (SkinInstance.isNullOrEmpry(instance))
        {
            return;
        }

        if (instance.isBeCached)
        {
            return;
        }

        instance.isBeCached = true;
        Skin sk = null;

        m_SkinMap.TryGetValue(instance.nSkinID, out sk);
        sk.Main_CacheList.Enqueue(instance);
        if (EntityFactory.SkinCacheGroup != null)
        {
            instance.SkinObj.transform.parent = EntityFactory.SkinCacheGroup.transform;
        }
        DisableSkinInstance(instance);
        instance.SkinObj.transform.localScale    = instance.PrefabScale;
        instance.SkinObj.transform.localPosition = Vector3.zero;
        instance.ReferencedSkinCtrl = null;
        if (instance.bindEffect_A)
        {
            instance.bindEffect_A.ClearEvent();
        }
        if (instance.bindEffect_B)
        {
            instance.bindEffect_B.ClearEvent();
        }
        if (instance.bindSound)
        {
            instance.bindSound.ClearEvent();
        }
    }
Ejemplo n.º 18
0
    public static void BuildSkinInstance(Skin sk, GameObject instanceSkin, ref SkinInstance skinInstance)
    {
        if (!sk.isValid)
        {
            return;
        }
        switch (sk.SkinType)
        {
        case ENTITY_TYPE.TYPE_MONSTER:
            BuildMonsterSkinInstance(sk, instanceSkin, ref skinInstance);
            return;

        case ENTITY_TYPE.TYPE_PLAYER_ROLE:
            BuildPlayerSkinInstance(sk, instanceSkin, ref skinInstance);
            return;

        case ENTITY_TYPE.TYPE_TANK:
            BuildTankSkinInstance(sk, instanceSkin, ref skinInstance);
            return;

        default:
            return;
        }
    }
Ejemplo n.º 19
0
        public async Task Inspect(int index)
        {
            if (index < 0)
            {
                await EnterNonNegativeValue();

                return;
            }
            List <SkinInstance> skins = GetUserData(Context.Message.Author.Id).skins;

            if (index >= skins.Count)
            {
                await QuickEmbed($"Please enter a number between 0 and {skins.Count - 1}");

                return;
            }
            SkinInstance skin = skins[index];

            var e = new EmbedBuilder();

            e.WithDescription($"{Context.Message.Author.Mention}'s **{skin.skinData.weapon} {skin.skinData.name}**")
            .AddField("=======================",
                      $"Value: **${skin.worth}**\n" +
                      $"Float: **{skin.floatValue}**\n" +
                      $"Condition: **{CSGOConfigs.LogCondition(skin.condition)}**\n" +
                      $"Rarity: **{CSGOConfigs.LogRarity(skin.skinData.rarity)}**\n" +
                      $"Stattrak? **{(skin.stattrak? "YES" : "NO")}**\n" +
                      $"ID: **{skin.id}**\n" +
                      $"Description: *{skin.skinData.description}*")
            .WithColor(CSGOConfigs.GetColor(skin.skinData.rarity));
            if (skin.skinData.imageURL != "")
            {
                e.WithImageUrl(skin.skinData.imageURL);
            }
            await ReplyAsync(embed : e.Build());
        }
Ejemplo n.º 20
0
    /// <summary>
    /// 当皮肤已经被改变-消息通知
    /// </summary>
    /// <param name="nSkinID">皮肤ID</param>
    /// <param name="nPart">哪个部位</param>
    protected override void OnSkinChanged(SkinInstance sk, int nPart)
    {
        if (null == sk || !sk.isValid)
        {
            return;
        }
        m_DistanceVisible = true;
        EntityView ev = EntityFactory.getMonsterViewByID(this.entityID);

        ChangeStateMachineParams();
        ChangeCreaturePropety();
        ChangeMask(ev);
        gameObject.name = SkinManager.GetSkinName(sk.nSkinID) + "(entityID:" + entityID + ")";
        base.OnSkinChanged(sk, nPart);

        //关于ward结界类型的特殊处理
        //结界类型的物理盒子放在LayerWard层,用于阻挡指定类型的玩家
        //但是结界有可以选中和不可以选中,
        //这里只将配置的ScreenCastObject改为其他层,那么不可选中的结界不配置ScreenCastObject,就不影响结界后面实体的技能选中,
        //除了ScreenCastObject之外,实体的其他部分仍然为LayerWard,
        //那么hit到了之后LayerWard在判断实体有效性的时候,也将LayerWard加入有效层的范围内,这样就结界的选中就是合法的了。
        if (creature.gameObject.layer == LayerMask.NameToLayer(Config.LayerWard_Enemy))
        {
            if (creaturePropety.ScreenCastObject)
            {
                GameUtil.SetLayer(LayerMask.NameToLayer(Config.LayerMonsterEnemy), creaturePropety.ScreenCastObject, false);
            }
        }
        else if (creature.gameObject.layer == LayerMask.NameToLayer(Config.LayerWard_Friend))
        {
            if (creaturePropety.ScreenCastObject)
            {
                GameUtil.SetLayer(LayerMask.NameToLayer(Config.LayerMonsterFriend), creaturePropety.ScreenCastObject, false);
            }
        }

        goRootTransform = FindTransformEx("Main");

        currentGravity = creaturePropety.downGravity;

        SkinInstance si = SkinControl.CurrentSkinInstance;

        if (si.playEntityStaticEffect)
        {
            si.playEntityStaticEffect.ResetLayer();
            si.playEntityStaticEffect.Stop();
            si.playEntityStaticEffect.Play(ev);
        }
        if (si.switchEffectWithHeroDistance)
        {
            si.switchEffectWithHeroDistance.ResetLayer();
            si.switchEffectWithHeroDistance.SetEntitiyView(ev);
        }
#if !ENABLE_YUNYING_MODE
        if (SkinConfig.OcclusCollider)
        {
            if (!startCheckOcclusCoroutine)
            {
                startCheckOcclusCoroutine = true;
                cor_CheckOcclus           = StartCoroutine(CheckOcclus());
            }
        }
#endif
    }
Ejemplo n.º 21
0
        private void OnSkinLoadFinish(Skin skin)
        {
            if (skin == null)
            {
                return;
            }

            //回调的,跟当前ID不匹配,卸载这个皮肤
            if (skin.nSkinID != currentSkinId)
            {
                if (m_currentLoadedSkinInstance != null)
                {
                    if (m_currentLoadedSkinInstance.isValid)
                    {
                        //看看当前的skininstance是不是与skin的ID一样
                        if (m_currentLoadedSkinInstance.nSkinID == skin.nSkinID)
                        {
                            SkinManager.CacheSkinInstance(m_currentLoadedSkinInstance);
                            m_currentLoadedSkinInstance = null;
                        }
                    }
                }
                RemoveCallBack(skin.nSkinID);
                SkinManager.DeleteSkinAsync(skin.nSkinID, OnSkinLoadFinish, NotReleaseFromCache);
                return;
            }

            //如果已经被裁剪了,卸载这个皮肤
            if (isCull && SkinManager.enabledSkinCull)
            {
                if (m_currentLoadedSkinInstance != null)
                {
                    if (m_currentLoadedSkinInstance.isValid)
                    {
                        //看看当前的skininstance是不是与skin的ID一样
                        if (m_currentLoadedSkinInstance.nSkinID == skin.nSkinID)
                        {
                            SkinManager.CacheSkinInstance(m_currentLoadedSkinInstance);
                            m_currentLoadedSkinInstance = null;
                        }
                    }
                }
                SkinManager.DeleteSkinAsync(skin.nSkinID, OnSkinLoadFinish, NotReleaseFromCache);
                return;
            }


            if (m_currentLoadedSkinInstance != null)
            {
                if (m_currentLoadedSkinInstance.isValid)
                {
                    SkinManager.CacheSkinInstance(m_currentLoadedSkinInstance);
                    RemoveCallBack(m_currentLoadedSkinInstance.nSkinID);
                    SkinManager.DeleteSkinAsync(m_currentLoadedSkinInstance.nSkinID, OnSkinLoadFinish, NotReleaseFromCache);

                    m_currentLoadedSkinInstance = null;
                }
            }

            SkinControlAsyncLoadingObj obj = AllocSkinControlAsyncLoadingObj(skin.nSkinID);

            if (m_ChangeSkinData.ContainsKey(skin.nSkinID))
            {
                obj.loadFinish = true;
            }
            SkinInstance si = skin.Instantiate_Main();

            if (si == null)
            {
                m_currentLoadedSkinInstance = null;
                ClearPersonSkinDataFromMachine(m_machine);
                return;
            }
            GameUtil.SetLayer(m_machine.creature.gameObject.layer, si.SkinObj, true);

            m_currentLoadedSkinInstance = si;
            PersonSkinConfig psp = si.entitySkinConfig as PersonSkinConfig;

            si.SkinObj.transform.parent        = transform;
            si.SkinObj.transform.localPosition = Vector3.zero;
            si.SkinObj.transform.localRotation = Quaternion.identity;
            si.SkinObj.transform.name          = skin.ResSkinObj.AssetName + "-skin" + skin.nSkinID + "_C";;

            if (psp.AttackAnimatorLayer <= 0)
            {
                si.SkinObj_A.transform.parent = transform;
                si.SkinObj_B.transform.parent = transform;
            }

            if (si.SkinObj_A)
            {
                si.SkinObj_A.transform.parent        = transform;
                si.SkinObj_A.transform.localPosition = new Vector3(-1.0f, 0.0f, 0.0f);
                si.SkinObj_A.transform.localRotation = Quaternion.identity;
                si.SkinObj_A.name = skin.ResSkinObj.AssetName + "-skin" + skin.nSkinID + "_A";
            }

            if (si.SkinObj_B)
            {
                si.SkinObj_B.transform.parent        = transform;
                si.SkinObj_B.transform.localPosition = new Vector3(-1.0f, 0.0f, 0.0f);
                si.SkinObj_B.transform.localRotation = Quaternion.identity;
                si.SkinObj_B.name = skin.ResSkinObj.AssetName + "-skin" + skin.nSkinID + "_A";
            }

            foreach (RenderVisibleHelper skre in si.VisibleHelperList)
            {
                skre.hostSkin = null;
            }

            foreach (RenderVisibleHelper skre in si.VisibleHelperList)
            {
                skre.hostSkin = this;
            }

            ApplyStateData(m_currStateData);
            ApplyPersonSkinDataToMachine(m_machine, si);
        }
Ejemplo n.º 22
0
        private void OnSkinLoadFinish(Skin skin)
        {
            if (skin == null)
            {
                return;
            }
            //回调的,跟当前ID不匹配,卸载这个皮肤
            if (skin.nSkinID != currentSkinId)
            {
                if (m_currentLoadedSkinInstance != null)
                {
                    if (m_currentLoadedSkinInstance.isValid)
                    {
                        //看看当前的skininstance是不是与skin的ID一样
                        if (m_currentLoadedSkinInstance.nSkinID == skin.nSkinID)
                        {
                            SkinManager.CacheSkinInstance(m_currentLoadedSkinInstance);
                            m_currentLoadedSkinInstance = null;
                        }
                    }
                }
                RemoveCallBack(skin.nSkinID);
                SkinManager.DeleteSkinAsync(skin.nSkinID, OnSkinLoadFinish);
                return;
            }

            if (m_currentLoadedSkinInstance != null)
            {
                if (m_currentLoadedSkinInstance.isValid)
                {
                    SkinManager.CacheSkinInstance(m_currentLoadedSkinInstance);
                    RemoveCallBack(m_currentLoadedSkinInstance.nSkinID);
                    SkinManager.DeleteSkinAsync(m_currentLoadedSkinInstance.nSkinID, OnSkinLoadFinish);

                    m_currentLoadedSkinInstance = null;
                }
            }
            SkinControlAsyncLoadingObj obj = AllocSkinControlAsyncLoadingObj(skin.nSkinID);

            if (m_ChangeSkinData.ContainsKey(skin.nSkinID))
            {
                obj.loadFinish = true;
            }

            SkinInstance si = skin.Instantiate_Main();

            if (si == null)
            {
                m_currentLoadedSkinInstance = null;
                ClearMonsterSkinDataFromMachine(m_machine);
                return;
            }
            GameObject go = si.SkinObj;

            GameUtil.SetLayer(m_machine.creature.gameObject.layer, go, true);
            m_currentLoadedSkinInstance = si;
            go.transform.parent         = m_machine.creature;
            go.transform.localPosition  = Vector3.zero;
            go.transform.localRotation  = Quaternion.identity;
            go.name = skin.ResSkinObj.AssetName + "-skin" + skin.nSkinID;

            go = null;

            ApplyStateData(m_currStateData);
            ApplyMonsterSkinDataToMachine(m_machine, si);
        }
Ejemplo n.º 23
0
    private static void BuildMonsterSkinInstance(Skin skin, GameObject instanceSkin, ref SkinInstance si)
    {
        if (!skin.isValid)
        {
            return;
        }

        if (null == si)
        {
            si           = new SkinInstance();
            si.m_nSkinID = skin.nSkinID;
        }

        si.m_SkinType = skin.SkinType;
        Transform SkinDataObj = instanceSkin.transform.FindChild("SkinDataObj");

        SkinDataObj.localPosition = Vector3.zero;
        SkinDataObj.localRotation = Quaternion.identity;
        SkinDataObj.localScale    = Vector3.one;
        MonsterSkinConfig msp = SkinDataObj.GetComponent <MonsterSkinConfig>();

        si.m_SkinDataObj = SkinDataObj;
        if (msp.ColliderShape)
        {
            msp.StandradColliderShapeSize = msp.ColliderShape.transform.localScale;
        }

        if (msp.OcclusCollider)
        {
            msp.OcclusCollider.isTrigger = true;
            msp.gameObject.layer         = LayerMask.NameToLayer(Config.LayerWater);
        }

        si.m_entitySkinConfig = msp;
        si.m_SkinObj          = instanceSkin;
        si.m_creatureProperty = SkinDataObj.GetComponent <CreatureProperty>();
        si.m_ConfigScale      = skin.fSkinScale;
        si.m_PrefabScale      = instanceSkin.transform.localScale;
        if (!skin.isStaticSkin)
        {
            si.m_MainAnimator = instanceSkin.GetComponent <Animator>();
        }

        bool enableAnimator = true;

        if (msp.BodyNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = msp.BodyRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                msp.BodyRender = MakeBakeMeshRender(smr, nod);
                enableAnimator = false;
            }
        }

        if (msp.RightWeaponNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = msp.RightWeaponRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                msp.RightWeaponRender = MakeBakeMeshRender(smr, nod);
                enableAnimator        = false;
            }
        }
        if (msp.LeftWeaponNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = msp.LeftWeaponRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                msp.LeftWeaponRender = MakeBakeMeshRender(smr, nod);
                enableAnimator       = false;
            }
        }

        if (msp.BackBodyNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = msp.BackBodyRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                msp.BackBodyRender = MakeBakeMeshRender(smr, nod);
                enableAnimator     = false;
            }
        }

        if (!skin.isStaticSkin)
        {
            if (!enableAnimator)
            {
                si.MainAnimator.enabled = false;
                si.m_MainAnimator       = null;
            }
        }

        si.m_switchEffectWithHeroDistance = SkinDataObj.GetComponent <Effect.SwitchEffectWithHeroDistance>();
        si.m_playEntityStaticEffect       = SkinDataObj.GetComponent <Effect.Effect_PlayEntityStaticEffect>();

        si.SkinnedMeshRenderList.AddRange(instanceSkin.GetComponentsInChildren <SkinnedMeshRenderer>());
        si.MeshRenderList.AddRange(instanceSkin.GetComponentsInChildren <MeshRenderer>());


        int length = si.SkinnedMeshRenderList.Count;

        //移除skindataobj下的物体
        for (int k = 0; k < length; k++)
        {
            si.SkinnedMeshRenderList[k].motionVectors        = false;
            si.SkinnedMeshRenderList[k].skinnedMotionVectors = false;
            Transform t = si.SkinnedMeshRenderList[k].transform;
            if (t.IsChildOf(SkinDataObj.transform))
            {
                si.SkinnedMeshRenderList.RemoveAt(k);
            }
            else
            {
                si.AllRenders.Add(si.SkinnedMeshRenderList[k]);
            }
        }

        length = si.MeshRenderList.Count;
        //移除skindataobj下的物体
        for (int k = 0; k < length; k++)
        {
            si.MeshRenderList[k].motionVectors = false;
            Transform t = si.MeshRenderList[k].transform;
            if (t.IsChildOf(SkinDataObj.transform))
            {
                si.MeshRenderList.RemoveAt(k);
            }
            else
            {
                si.AllRenders.Add(si.MeshRenderList[k]);
            }
        }

        //必须放到最后
        if (si.playEntityStaticEffect)
        {
            si.playEntityStaticEffect.Init();
        }
        si.Init();
        return;
    }
Ejemplo n.º 24
0
 /// <summary>
 /// 模型加载完成初始化回调
 /// </summary>
 /// <param name="sk"></param>
 /// <param name="nPart"></param>
 protected void OnSkinChanged(SkinInstance sk, int nPart)
 {
     m_SkinControl.UnRegsiterSkinChangedEvent(OnSkinChanged);
     OnSkinChangedLoacl();
 }
Ejemplo n.º 25
0
    private static void BuildPlayerSkinInstance(Skin skin, GameObject instanceSkin, ref SkinInstance si)
    {
        if (!skin.isValid)
        {
            return;
        }
        if (null == si)
        {
            si           = new SkinInstance();
            si.m_nSkinID = skin.nSkinID;
        }
        si.m_SkinType = skin.SkinType;
        Transform SkinDataObj = instanceSkin.transform.FindChild("SkinDataObj");

        SkinDataObj.localPosition = Vector3.zero;
        SkinDataObj.localRotation = Quaternion.identity;
        SkinDataObj.localScale    = Vector3.one;
        PersonSkinConfig psc = SkinDataObj.GetComponent <PersonSkinConfig>();

        si.m_SkinDataObj                 = SkinDataObj;
        si.m_SkinObj                     = instanceSkin;
        si.m_characterController         = SkinDataObj.GetComponent <CharacterController>();
        si.m_characterController.enabled = false;
        si.m_entitySkinConfig            = psc;
        si.m_cameraProperty              = SkinDataObj.GetComponent <CameraProperty>();
        if (psc.AttackAnimatorLayer > 0)
        {
            si.m_MainAnimator = instanceSkin.GetComponent <Animator>();
            si.m_AnimatorB    = si.MainAnimator;

            si.m_overrideController      = new AnimatorOverrideController();
            si.orginalAnimatorController = si.MainAnimator.runtimeAnimatorController;
            si.overrideController.runtimeAnimatorController = si.orginalAnimatorController;

            si.MainAnimator.runtimeAnimatorController = si.overrideController;
        }
        else
        {
            Debug.LogError("BuildPlayerSkinInstance--- psc.AttackAnimatorLayer <= 0");
        }
        //else
        //{
        //    Debug.Log("--------------皮肤调试信息-----------------------" + instanceSkin.name);
        //    GameObject goa = CreateSkinObject(skin, false, psc.controllerA);
        //    GameObject gob = CreateSkinObject(skin, false, psc.controllerB);

        //    Transform skina = goa.transform.FindChild("SkinDataObj");
        //    if (skina != null)
        //    {
        //        var temp = skina.gameObject;
        //        ResNode.DestroyRes(ref temp);
        //    }

        //    Transform skinb = gob.transform.FindChild("SkinDataObj");
        //    if (skinb != null)
        //    {
        //        var temp = skinb.gameObject;
        //        ResNode.DestroyRes(ref temp);
        //    }

        //    Renderer[] rsa = goa.GetComponentsInChildren<Renderer>();
        //    foreach (Renderer ra in rsa)
        //    {
        //        var temp = ra;
        //        ResNode.DestroyRes(ref temp);
        //    }

        //    Renderer[] rsb = gob.GetComponentsInChildren<Renderer>();
        //    foreach (Renderer rb in rsb)
        //    {
        //        var temp = rb;
        //        ResNode.DestroyRes(ref temp);
        //    }

        //    si.MainAnimator = goa.GetComponent<Animator>();

        //    si.AnimatorB = gob.GetComponent<Animator>();

        //    Animator anoldc = instanceSkin.GetComponent<Animator>();
        //    if (anoldc != null)
        //    {
        //        ResNode.DestroyRes(ref anoldc);
        //    }

        //    si.bipedIKAnimator = instanceSkin.AddComponent<BipedIKAnimator>();
        //    si.bipedIKAnimator.goA = goa;
        //    si.bipedIKAnimator.goB = gob;
        //    si.bipedIKAnimator.Build();

        //    si.SkinObj_A = goa;
        //    si.SkinObj_B = gob;
        //}

        si.MainAnimator.applyRootMotion = false;
        si.MainAnimator.cullingMode     = AnimatorCullingMode.AlwaysAnimate;//有的动作会飞出屏幕,所以需要这个

        si.AnimatorB.applyRootMotion = false;
        // si.AnimatorB.cullingMode = AnimatorCullingMode.AlwaysAnimate;

        si.m_bindSound    = instanceSkin.AddComponent <BindSound>();
        si.m_bindEffect_A = instanceSkin.AddComponent <BindEffect>();

        if (si.SkinObj_B)
        {
            si.m_bindEffect_B = si.SkinObj_B.AddComponent <BindEffect>();
        }
        else
        {
            si.m_bindEffect_B = instanceSkin.AddComponent <BindEffect>();
        }
        if (psc.weaponObject)
        {
            si.m_weaponAnimator = psc.weaponObject.GetComponent <Animator>();
        }
        if (psc.weaponObject2)
        {
            si.m_weaponAnimator2 = psc.weaponObject2.GetComponent <Animator>();
        }

        si.m_creatureProperty = SkinDataObj.GetComponent <CreatureProperty>();
        si.m_sidekickEntity   = SkinDataObj.GetComponent <SidekickEntity>();
        if (si.sidekickEntity)
        {
            si.sidekickEntity.init();
        }
        si.m_ConfigScale = skin.fSkinScale;
        si.m_PrefabScale = instanceSkin.transform.localScale;

        if (psc.BodyNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = psc.BodyRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                psc.BodyRender = MakeBakeMeshRender(smr, nod);
            }
        }

        if (psc.RightWeaponNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = psc.RightWeaponRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                psc.RightWeaponRender = MakeBakeMeshRender(smr, nod);
            }
        }
        if (psc.LeftWeaponNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = psc.LeftWeaponRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                psc.LeftWeaponRender = MakeBakeMeshRender(smr, nod);
            }
        }

        if (psc.BackBodyNeedToBakeMesh)
        {
            SkinnedMeshRenderer smr = psc.BackBodyRender as SkinnedMeshRenderer;
            BakeMeshNode        nod = BakeMesh(smr);
            if (null != nod)
            {
                skin.AllBakeMesh.Add(nod);
                psc.BackBodyRender = MakeBakeMeshRender(smr, nod);
            }
        }

        si.m_characterShadow = instanceSkin.AddComponent <CharacterShadow>();

        si.m_characterShadow.Bake(instanceSkin.transform, psc.BodyRender);
        si.m_characterShadow.Init(Initialize.mainCam);
        //si.m_characterShadow.enabled = false;

        si.m_switchEffectWithHeroDistance = SkinDataObj.GetComponent <Effect.SwitchEffectWithHeroDistance>();
        si.m_playEntityStaticEffect       = SkinDataObj.GetComponent <Effect.Effect_PlayEntityStaticEffect>();

        si.SkinnedMeshRenderList.AddRange(instanceSkin.GetComponentsInChildren <SkinnedMeshRenderer>());
        si.MeshRenderList.AddRange(instanceSkin.GetComponentsInChildren <MeshRenderer>());

        foreach (SkinnedMeshRenderer skr in si.SkinnedMeshRenderList)
        {
            RenderVisibleHelper vb = skr.gameObject.AddComponent <RenderVisibleHelper>();
            si.VisibleHelperList.Add(vb);
        }

        int length = si.SkinnedMeshRenderList.Count;

        //移除skindataobj下的物体
        for (int k = 0; k < length; k++)
        {
            si.SkinnedMeshRenderList[k].motionVectors        = false;
            si.SkinnedMeshRenderList[k].skinnedMotionVectors = false;
            Transform t = si.SkinnedMeshRenderList[k].transform;
            if (t.IsChildOf(SkinDataObj.transform))
            {
                si.SkinnedMeshRenderList.RemoveAt(k);
            }
            else
            {
                si.AllRenders.Add(si.SkinnedMeshRenderList[k]);
            }
        }

        length = si.MeshRenderList.Count;
        //移除skindataobj下的物体
        for (int k = 0; k < length; k++)
        {
            si.MeshRenderList[k].motionVectors = false;
            Transform t = si.MeshRenderList[k].transform;
            if (t.IsChildOf(SkinDataObj.transform))
            {
                si.MeshRenderList.RemoveAt(k);
            }
            else
            {
                si.AllRenders.Add(si.MeshRenderList[k]);
            }
        }

        if (si.playEntityStaticEffect)
        {
            si.playEntityStaticEffect.Init();
        }
        si.Init();

        return;
    }
Ejemplo n.º 26
0
    public static bool SetChangeHeroSkin(int nSkinId, int nHeroId, ref SkinInstance objLastSkin, ref int nLastSkinId, Transform transHeroFrame, HEROSKIN_RENDER_TYPE renderType = HEROSKIN_RENDER_TYPE.SCENE, PERSONMODELVIEWID viewType = PERSONMODELVIEWID.PERSONMODELVIEWID_GAMEWAITINGROOM)
    {
        SkinManager.DeleteSkin(ref objLastSkin);

        nLastSkinId = 0;
        objLastSkin = null;

        if (nSkinId < 0)
        {
            Debug.LogWarning("SetChangeHeroSkin---皮肤ID小于0");
            return(false);
        }


        SkinInstance si = SkinManager.GetSkin(nSkinId);

        if (si == null || !si.isValid)
        {
            Trace.LogWarning("切换皮肤失败,找不到对应的皮肤ID:" + nSkinId + ",请[--策划--]检查配置文件");
            return(false);
        }

        GameObject goc = si.SkinObj;

        // 动画
        if (viewType == PERSONMODELVIEWID.PERSONMODELVIEWID_SHOP)
        {
            si.MainAnimator.Play("loginr");
        }


        //effectNodeHero.PlayEffect(0, null, null);
        PersonModelTransFormInfo instance = PersonModelTransFormInfo.Instance;
        Vector3 pos      = instance.GetHeroModelPosition(viewType, nHeroId);
        Vector3 scale    = instance.GetHeroModelScale(viewType, nHeroId);
        Vector3 rotation = instance.GetHeroModelRotation(viewType, nHeroId);

        if (renderType == HEROSKIN_RENDER_TYPE.CAMERA)
        {
            GameUtil.SetLayer(LayerMask.NameToLayer(Config.LayerUI), goc, true);
            Vector2 size = new Vector2(1280f, 720f);

            UEffectMeshObject MeshObject = new UEffectMeshObject(si.SkinObj, pos, rotation, scale, _bIsSceneObj: true);
            UEffectMeshCamera MeshCamera = new UEffectMeshCamera();
            UEffectParamBase  param      = new UEffectMeshParam(size, new List <UEffectMeshObject>()
            {
                MeshObject
            }, MeshCamera, transHeroFrame);
            UEffectManager.Instance.CreateEffect(UEffectType.UET_EffectMesh, ref param);
        }
        else if (renderType == HEROSKIN_RENDER_TYPE.SCENE)
        {
            GameUtil.SetLayer(LayerMask.NameToLayer(Config.LayerHero), goc, true);
            goc.transform.parent           = transHeroFrame;
            goc.transform.localPosition    = pos;
            goc.transform.localEulerAngles = rotation;
            goc.transform.localScale       = scale;
        }
        nLastSkinId = nSkinId;
        objLastSkin = si;

        return(true);
    }