/// <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); }
/// <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); }
public SkillTree(string skillTreeId) { mRootSkillNodes = MYXZGameDataManager.Instance.GetSkillTreeById(skillTreeId); CurrentSkill = null; }
public SkillTree(string skillTreeId) { mRootSkillNodes = MYXZConfigLoader.Instance.GetSkillTree(skillTreeId); }