using System.Collections; using System.Collections.Generic; using UnityEngine; namespace WildAttack { /// /// 敌人管理器 /// public class EnemyManager : Singleton { /// /// 存放场上存活敌人(不包含初始怪) /// public List enemyList; #region Functions public void Init() { enemyList = new List(); CreateWayPoint(); } /// /// 敌人管理器生成敌人方法 /// /// /// public void CreateEnemy(int monsterId, int spawnGroupId) { Enemy enemy; // 武器权重 MonsterData data = MonsterModule.GetInstance().GetData(monsterId); int weaponId = WeightRandomUtils.GetInstance().GetRandomId(data.weponWeight); //int weaponId = 3; if (weaponId == -1) return; GameObject obj; // 判断是否初始怪 if (spawnGroupId <= 0) { // 新生成 obj = GameObject.Instantiate(Resources.Load("Enemy/yellow/duyanguai_skin_flag")); } else { // 从池中取 obj = EnemyPool.GetInstance().GetGameObject(weaponId); } obj.SetActive(true); // 添加脚本 enemy = obj.GetComponent(); if (enemy == null) { enemy = obj.AddComponent(); } // 调用初始化 enemy.Init(monsterId, weaponId, spawnGroupId); enemyList.Add(enemy); } GameObject[] wayPointObjs; /// /// 读表获取三个出生点 /// public void CreateWayPoint() { // 读表get坐标 spawnGroup总数 wayPointObjs = new GameObject[3]; Vector3[] ve3Arr = new Vector3[3]; for (int i = 0; i < ve3Arr.Length; i++) { Vector2 ve2 = WayPointModule.GetInstance().GetDataByGroup(i + 1)[0].wayPoint[0]; ve3Arr[i] = new Vector3(ve2.x, 35, ve2.y); } // 生成emptyObj set layer collider等 for (int i = 0; i < ve3Arr.Length; i++) { GameObject obj = new GameObject(); obj.name = "wayPoint" + (i + 1); obj.transform.position = ve3Arr[i] + Vector3.up * 2; obj.layer = LayerMask.NameToLayer("WayPoint"); SphereCollider collider = obj.AddComponent(); collider.radius = 3; collider.isTrigger = true; wayPointObjs[i] = obj; } // 射线检测地面 getY轴坐标 foreach (var item in wayPointObjs) { Ray ray = new Ray(item.transform.position, -item.transform.up); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, 100, 1 << LayerMask.NameToLayer("Plane"))) { if (hitInfo.collider.gameObject.layer == LayerMask.NameToLayer("Plane")) { item.transform.position = new Vector3(item.transform.position.x, hitInfo.point.y, item.transform.position.z); } } } } public GameObject[] GetWayPoints() { return wayPointObjs; } /// /// 游戏结束 /// public void GameOver() { // 对场上敌人重新设置新的目标点(城门内建筑) foreach (var item in enemyList) { // set new WayPoint item.SetNewWayPoint(4); } } #endregion } }