using System.Collections.Generic; using UnityEngine; using Random = UnityEngine.Random; public class PlayerArmyManager : MonoBehaviour { // 玩家战士数量 private int _playerWarriorCount; // 玩家弓箭手数量 private int _playerArcherCount; // 玩家所有单位列表(战士+弓箭手) [HideInInspector] public List PlayerWarriors = new List(); // 当前生成单位的计数器(用于出生点分配) private int _counter; /// /// 脚本唤醒时加载玩家单位数据 /// private void Awake() { LoadData(); } /// /// 启动时初始化玩家单位 /// private void Start() { Init(); } /// /// 从玩家单位列表中移除指定单位 /// /// 要移除的Warrior对象 public void DeletePlayerFromStageList(Warrior _warrior) { PlayerWarriors.Remove(_warrior); } /// /// 随机获取一个玩家单位(用于敌人AI锁定目标) /// /// 随机Warrior对象 public Warrior GetRandomPlayerWarrior() { return PlayerWarriors[Random.Range(0, PlayerWarriors.Count)]; } /// /// 新增一个战士单位到玩家队伍 /// public void AddNewWarrior() { _playerWarriorCount++; PlayerWarriors.Add(Instantiate(ComponentsManager.BattleManager.PlayerWarriorPrefab.GetComponent(), ComponentsManager.StagesManager.GetCurrentStageItem.GetPlayerPoint(_counter).position, Quaternion.identity)); _counter++; SaveData(); } /// /// 新增一个弓箭手单位到玩家队伍 /// public void AddNewArcher() { _playerArcherCount++; PlayerWarriors.Add(Instantiate(ComponentsManager.BattleManager.PlayerArcherPrefab.GetComponent(), ComponentsManager.StagesManager.GetCurrentStageItem.GetPlayerPoint(_counter).position, Quaternion.identity)); _counter++; SaveData(); } /// /// 重置所有玩家单位(如关卡切换时) /// public void ResetPlayerWarriors() { for (int i = 0; i < PlayerWarriors.Count; i++) { Destroy(PlayerWarriors[i].gameObject); } PlayerWarriors.Clear(); Init(); } /// /// 初始化玩家单位(战士和弓箭手) /// private void Init() { _counter = 0; InitWarrior(); InitArcher(); } /// /// 初始化所有战士单位 /// private void InitWarrior() { for (int i = 0; i < _playerWarriorCount; i++) { PlayerWarriors.Add(Instantiate(ComponentsManager.BattleManager.PlayerWarriorPrefab.GetComponent(), ComponentsManager.StagesManager.GetCurrentStageItem.GetPlayerPoint(_counter).position, Quaternion.identity)); _counter++; } } /// /// 初始化所有弓箭手单位 /// private void InitArcher() { for (int i = 0; i < _playerArcherCount; i++) { PlayerWarriors.Add(Instantiate(ComponentsManager.BattleManager.PlayerArcherPrefab.GetComponent(), ComponentsManager.StagesManager.GetCurrentStageItem.GetPlayerPoint(_counter).position, Quaternion.identity)); _counter++; } } /// /// 从本地存档加载玩家单位数量 /// private void LoadData() { if (PlayerPrefs.HasKey("playerWarriorCount")) _playerWarriorCount = PlayerPrefs.GetInt("playerWarriorCount"); else _playerWarriorCount = 2; _playerArcherCount = PlayerPrefs.GetInt("playerArcherCount"); } /// /// 保存玩家单位数量到本地存档 /// private void SaveData() { PlayerPrefs.SetInt("playerArcherCount", _playerArcherCount); PlayerPrefs.SetInt("playerWarriorCount", _playerWarriorCount); } }