Beispiel #1
0
        /// <summary>
        /// 根据技能树的ID来获取一个技能树实例
        /// </summary>
        /// <param name="skillId"></param>
        /// <param name="rootNode"></param>
        public static void ReadSkillTree(string skillId, out SkillRootNode rootNode)
        {
            AssetBundle skillConfigAB = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("Skill"));  //包括SkillTree和SkillBase
            TextAsset   skillText     = skillConfigAB.LoadAsset <TextAsset>(skillId);

            rootNode = new SkillRootNode(skillId);
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(skillText.text);   //读取此XML字符串至doc
            }
            catch (XmlException e)
            {
                Debug.LogException(e);
                return;
            }

            XmlNode configNode = doc.FirstChild;

            rootNode.Loop = bool.Parse(configNode.Attributes["Loop"].Value);
            rootNode.Name = configNode.Attributes["Name"].Value;
            TraverseToGetSkillTree(rootNode, configNode);
            MYXZAssetBundleManager.Instance.Unload(skillConfigAB.name);
        }
        /// <summary>
        /// 由技能ID获取对应的技能树
        /// </summary>
        /// <param name="skillId"></param>
        /// <returns></returns>
        public SkillRootNode GetSkillTreeById(string skillId)
        {
            //由于同一类型的角色可能存在多个并且拥有同一个技能,所以不应该使用一个Dictionary来缓存,而应该每次都创建一个新的返回
            SkillRootNode skillRootNode = null;

            MYXZXmlReader.ReadSkillTree(skillId, out skillRootNode);

            return(skillRootNode);
        }
Beispiel #3
0
        /// <summary>
        /// 由技能ID获取对应的技能树
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public SkillRootNode GetSkillTree(string id)
        {
            //由于同一类型的角色可能存在多个并且拥有同一个技能,所以不应该使用一个Dictionary来缓存,而应该每次都创建一个新的返回
            SkillRootNode skillRootNode = null;

            if (!this.m_id2SkillNode.TryGetValue(id, out skillRootNode))
            {
                AssetBundle assetBundle = GetAssetBundle(id);
                IConfigFactory <SkillRootNode> factory = new SkillFactory(assetBundle);

                skillRootNode = factory.Create(id);
                if (!DebugHelper.Assertion(skillRootNode != null, "目标ID为" + id + "的Skill不存在"))
                {
                }
                MYXZAssetBundleManager.Instance.Unload(assetBundle.name, delay: 60);
                //this.m_id2SkillNode.Add(id, skillRootNode);
            }
            else //TODO 每次需要某个技能时应该返回一份copy
            {
                skillRootNode = new SkillRootNode(id);
            }

            return(skillRootNode);
        }
Beispiel #4
0
 public SkillTree(string skillTreeId)
 {
     mRootSkillNodes = MYXZGameDataManager.Instance.GetSkillTreeById(skillTreeId);
     CurrentSkill    = null;
 }
Beispiel #5
0
 public SkillTree(string skillTreeId)
 {
     mRootSkillNodes = MYXZConfigLoader.Instance.GetSkillTree(skillTreeId);
 }