public AttackNpc(int dataId) { m_AttackNPCBaseData = DataManager.s_AttackNpcDataManager.GetData(dataId); if (m_AttackNPCBaseData == null) { Debug.LogError("AttackNPCData is null: " + dataId); return; } m_SkillList = new List <Skill>(); for (int i = 0; i < m_AttackNPCBaseData.SkillArray.Length; i++) { Skill skill = new Skill(m_AttackNPCBaseData.SkillArray[i]); m_SkillList.Add(skill); if (skill.SkillType == SkillTypes.NormalSkill) { NormalSkillList.Add(skill.SkillId); } else if (skill.SkillType == SkillTypes.AttackSkill) { AttackSkillList.Add(skill.SkillId); } } Hp = MaxHp; }
/// <summary> /// 初始AttackNpc数据; /// </summary> /// <returns></returns> void InitAttackNpc(AttackNpcSpawnData spawnData) { AttackNpcData attackNpcData = DataManager.s_AttackNpcDataManager.GetData(spawnData.AttackNpcID); if (attackNpcData == null) { return; } AttackNpc attackNpc = new AttackNpc(spawnData.AttackNpcID); if (attackNpc != null) { m_AttackNpcDic.Add(spawnData.ID, attackNpc); } }
/// <summary> /// 创建AttackNpc; /// </summary> /// <returns></returns> public void CreateAttackNpc(AttackNpcSpawnData spawnData) { if (spawnData == null) { return; } AttackNpcData attackNpcData = DataManager.s_AttackNpcDataManager.GetData(spawnData.AttackNpcID); if (attackNpcData == null) { return; } AttackNpc attackNpc = m_AttackNpcDic [spawnData.ID]; Quaternion rotate = Quaternion.Euler(new Vector3(0, spawnData.Orient * Mathf.Rad2Deg, 0)); GameObject prefab = ResourcesManager.Instance.LoadUnitObject(attackNpcData.Model, UNIT_TYPE.ATTACK_NPC); GameObject npcobj = GameObject.Instantiate(prefab) as GameObject; npcobj.transform.position = spawnData.Position; npcobj.transform.rotation = rotate; UnityEngine.AI.NavMeshAgent agent = npcobj.AddComponent <UnityEngine.AI.NavMeshAgent> (); agent.speed = 0; agent.acceleration = 0; agent.angularSpeed = 0; //agent.avoidancePriority = agent.height = attackNpcData.Height; agent.radius = attackNpcData.Radius; agent.stoppingDistance = 0.5f; CharacterController collider = npcobj.AddComponent <CharacterController> (); collider.height = attackNpcData.Height; collider.radius = attackNpcData.Radius; collider.center = Vector3.up * Mathf.Max(collider.height / 2.0f, collider.radius); npcobj.SetLayerRecursively(LayerMask.NameToLayer("AttackNpc")); AttackNpcController controller = npcobj.AddComponent <AttackNpcController> (); m_AttackNpcControllerDic.Add(spawnData.ID, controller); controller.CurCombatUnit = attackNpc; controller.PatrolRadius = spawnData.PatrolRadius; }
/// <summary> /// 加载NPC数据; /// </summary> public void LoadNpcData() { m_AttackNPCDataDic = new Dictionary <int, AttackNpcData>(); string textAsset = ResourcesManager.Instance.LoadConfigXML("AttackNpcData").text; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(textAsset); XmlNode equipXN = xmlDoc.SelectSingleNode("AttackNpcDatas"); XmlNodeList list = equipXN.ChildNodes; if (list != null && list.Count > 0) { foreach (XmlNode node in list) { XmlElement element = node as XmlElement; if (element.Name.Equals("AttackNpcData")) { AttackNpcData info = new AttackNpcData(); info.ID = CommonHelper.Str2Int(element.GetAttribute("ID")); info.Name = element.GetAttribute("Name"); info.Desc = element.GetAttribute("Desc"); info.Model = element.GetAttribute("Model"); info.Speed = CommonHelper.Str2Float(element.GetAttribute("Speed")); info.Radius = CommonHelper.Str2Float(element.GetAttribute("Radius")); info.Spring = CommonHelper.Str2Float(element.GetAttribute("Spring")); info.Height = CommonHelper.Str2Float(element.GetAttribute("Height")); info.Level = CommonHelper.Str2Int(element.GetAttribute("Level")); info.MaxHp = CommonHelper.Str2Int(element.GetAttribute("MaxHp")); info.Damage = CommonHelper.Str2Int(element.GetAttribute("Damage")); info.NormalAttackCDTime = CommonHelper.Str2Float(element.GetAttribute("NormalAttackCDTime")); info.SkillArray = CommonHelper.Str2IntArray(element.GetAttribute("SkillArray")); if (!m_AttackNPCDataDic.ContainsKey(info.ID)) { m_AttackNPCDataDic.Add(info.ID, info); } } } } }