/// <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; }