示例#1
0
        //7.创建受击特效
        public BeAttackEffect CreateBeAttackEffect(UInt64 owner, UInt64 target, uint skillID)
        {
            SkillAccountConfig skillAccConfig = ConfigReader.GetSkillAccountCfg(skillID);

            //判断是否有后续屏幕振动效果
            if (skillAccConfig != null && skillAccConfig.cameraId != 0)
            {
                //振动类型1 释放为本机振动  2受机为本机振动
                bool shakeFlag = false;
                if (skillAccConfig.cameraTarget == 1)
                {
                    Ientity ownerEntity = null;
                    EntityManager.AllEntitys.TryGetValue(owner, out ownerEntity);

                    if (ownerEntity != null && ownerEntity is Iselfplayer)
                    {
                        shakeFlag = true;
                    }
                }
                else if (skillAccConfig.cameraTarget == 2)
                {
                    Ientity targetEntity = null;
                    EntityManager.AllEntitys.TryGetValue(target, out targetEntity);

                    if (targetEntity != null && targetEntity is Iselfplayer)
                    {
                        shakeFlag = true;
                    }
                }
                else if (skillAccConfig.cameraTarget == 3)
                {
                    Ientity ownerEntity  = null;
                    Ientity targetEntity = null;
                    EntityManager.AllEntitys.TryGetValue(owner, out ownerEntity);
                    EntityManager.AllEntitys.TryGetValue(target, out targetEntity);

                    if ((ownerEntity != null && ownerEntity is Iselfplayer) || targetEntity != null && targetEntity is Iselfplayer)
                    {
                        shakeFlag = true;
                    }
                }

                if (shakeFlag)
                {
                    //获屏幕振动信息
                    SkillCameraConfig skillCameracfg = ConfigReader.GetSkillCameraConfig(skillAccConfig.cameraId);
                    if (skillCameracfg != null)
                    {
                        //被击飞信息
                        float period      = skillCameracfg.mPeriod;
                        float offPeriod   = skillCameracfg.mOffPeriod;
                        int   shakeOrient = skillCameracfg.mShakeOrient;
                        float shakeTime   = skillCameracfg.mShakeTime;
                        float maxWave     = skillCameracfg.mMaxWave;
                        float minWave     = skillCameracfg.mMinWave;

                        Shakecamera(period, offPeriod, shakeOrient, shakeTime, maxWave, minWave);
                    }
                }
            }


            //判断路径是否有效
            if (skillAccConfig == null || skillAccConfig.effect == "0")
            {
                return(null);
            }


            //加载特效信息
            Ientity entityOwner, entityTarget;

            EntityManager.AllEntitys.TryGetValue(owner, out entityOwner);
            EntityManager.AllEntitys.TryGetValue(target, out entityTarget);

            //根据受击特效跟玩家距离判断是否需要创建特效
            if (entityTarget != null)
            {
                if (!CheckEffectValid(entityTarget.objTransform.position, skillAccConfig.lifeTime))
                {
                    return(null);
                }
            }

            string         resourcePath = GameConstDefine.LoadGameSkillEffectPath + "hit/" + skillAccConfig.effect;
            BeAttackEffect effect       = new BeAttackEffect();

            if (entityTarget != null)
            {
                effect.enTargetKey = entityTarget.GameObjGUID;
            }

            if (entityOwner == null)
            {
                return(null);
            }

            effect.enOwnerKey = entityOwner.GameObjGUID;

            effect.skillID   = skillID;
            effect.resPath   = resourcePath;
            effect.cehuaTime = skillAccConfig.lifeTime;

            //创建
            effect.Create();
            //播放声音
            string soundPath = GameConstDefine.LoadGameSoundPath + skillAccConfig.sound;

            if (skillAccConfig.sound != "0")
            {
                PlayAudio(effect, soundPath, effect.obj);
            }

            AddEffect(effect.projectID, effect);
            return(effect);
        }
    public ReadSkillCameraConfig(string xmlFilePath)
    {
        ResourceItem xmlfileUnit = ResourcesManager.Instance.loadImmediate(xmlFilePath, ResourceType.ASSET);
        TextAsset    xmlfile     = xmlfileUnit.Asset as TextAsset;

        if (!xmlfile)
        {
            Debug.LogError(" error infos: 没有找到指定的xml文件:" + xmlFilePath);
        }

        xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(xmlfile.text);

        XmlNodeList infoNodeList = xmlDoc.SelectSingleNode("SkillCfg_Camera").ChildNodes;

        for (int i = 0; i < infoNodeList.Count; i++)
        {
            if ((infoNodeList[i] as XmlElement).GetAttributeNode("un32ID") == null)
            {
                continue;
            }

            string            typeName  = (infoNodeList[i] as XmlElement).GetAttributeNode("un32ID").InnerText;
            SkillCameraConfig skillinfo = new SkillCameraConfig();
            skillinfo.id = Convert.ToInt32(typeName);

            foreach (XmlElement xEle in infoNodeList[i].ChildNodes)
            {
                switch (xEle.Name)
                {
                    #region 搜索
                case "szName:":
                {
                    skillinfo.name = Convert.ToString(xEle.InnerText);
                }
                break;

                case "mPeriod":
                {
                    skillinfo.mPeriod = Convert.ToSingle(xEle.InnerText);
                } break;

                case "mOffPeriod":
                {
                    skillinfo.mOffPeriod = Convert.ToSingle(xEle.InnerText);
                } break;

                case "mShakeOrient":
                {
                    skillinfo.mShakeOrient = Convert.ToInt32(xEle.InnerText);
                } break;

                case "mShakeTime":
                {
                    skillinfo.mShakeTime = Convert.ToInt32(xEle.InnerText) / 1000.0f;
                } break;

                case "mMaxWave":
                {
                    skillinfo.mMaxWave = Convert.ToSingle(xEle.InnerText);
                } break;

                case "mMinWave":
                {
                    skillinfo.mMinWave = Convert.ToSingle(xEle.InnerText);
                } break;

                    #endregion
                }
            }
            ConfigReader.skillCameraInfoDict.Add(skillinfo.id, skillinfo);
        }
    }