| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace WildAttack
- {
- /// <summary>
- /// 敌人管理器
- /// </summary>
- public class EnemyManager : Singleton<EnemyManager>
- {
- /// <summary>
- /// 存放场上存活敌人(不包含初始怪)
- /// </summary>
- public List<Enemy> enemyList;
- #region Functions
- public void Init()
- {
- enemyList = new List<Enemy>();
- CreateWayPoint();
- }
- /// <summary>
- /// 敌人管理器生成敌人方法
- /// </summary>
- /// <param name="monsterId"></param>
- /// <param name="spawnGroupId"></param>
- 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<GameObject>("Enemy/yellow/duyanguai_skin_flag"));
- }
- else
- {
- // 从池中取
- obj = EnemyPool.GetInstance().GetGameObject(weaponId);
- }
- obj.SetActive(true);
- // 添加脚本
- enemy = obj.GetComponent<Enemy>();
- if (enemy == null)
- {
- enemy = obj.AddComponent<Enemy>();
- }
- // 调用初始化
- enemy.Init(monsterId, weaponId, spawnGroupId);
- enemyList.Add(enemy);
- }
- GameObject[] wayPointObjs;
- /// <summary>
- /// 读表获取三个出生点
- /// </summary>
- 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<SphereCollider>();
- 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;
- }
- /// <summary>
- /// 游戏结束
- /// </summary>
- public void GameOver()
- {
- // 对场上敌人重新设置新的目标点(城门内建筑)
- foreach (var item in enemyList)
- {
- // set new WayPoint
- item.SetNewWayPoint(4);
- }
- }
- #endregion
- }
- }
|