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