Boss:
using UnityEngine;
using System.Collections;
public class Boss {
//模型
protected Transform _transform;
public Transform Transform { get { return _transform; } }
protected CapsuleCollider _collider;
public CapsuleCollider Collider { get { return _collider; } }
protected Animation _ani;
public Animation Ani { get { return _ani; } }
protected NavMeshAgent _nav;
public NavMeshAgent Nav { get { return _nav; } }
//配置(获取信息并处理行为);
protected BossCfg _cfg;
public BossCfg Cfg { get { return _cfg; } }
protected int _hp;
public int Hp { get { return _hp; } }
protected BossStateMachine _machine;
public BossStateMachine Machine { get { return _machine; } }
public Boss(BossCfg cfg)
{
_cfg = cfg;
_transform = GameObject.Instantiate(Resources.Load<GameObject>("Boss/" + _cfg.Model)).transform;
int index = Random.Range(1, ConfigManager.Instance.CountOfBirthPointCfgDic + 1);
BirthPointCfg birthCfg = ConfigManager.Instance.GetBirthPointCfgByID(index);
_transform.position = ConfigManager.Instance.GetVector3(birthCfg.Position);
_transform.eulerAngles = ConfigManager.Instance.GetVector3(birthCfg.EulerAngle);
_collider = _transform.GetComponent<CapsuleCollider>();
if (_collider == null)
{
_collider = _transform.gameObject.AddComponent<CapsuleCollider>();
}
_collider.center = ConfigManager.Instance.GetVector3(_cfg.ColliderCenter);
_collider.radius = _cfg.ColliderRadius;
_collider.height = _cfg.ColliderHeight;
_collider.direction = _cfg.ColliderDirection;
_ani = _transform.GetComponent<Animation>();
_nav = _transform.GetComponent<NavMeshAgent>();
if(_nav == null)
{
_nav = _transform.gameObject.AddComponent<NavMeshAgent>();
}
_nav.enabled = true;
if(_machine == null)
{
_machine = new BossStateMachine(this);
}
Init();
}
//boss初始化
public virtual void Init()
{
_hp = _cfg.Hp;
//Debug.Log("初始化怪物属性");
}
//boss更新
public virtual void Update()
{
_machine.DoWork();
//Debug.Log(_cfg.Name + "更新怪物相关行为");
}
}
BossManager
using UnityEngine;
using System.Collections.Generic;
using System;
using System.Reflection;
public class BossManager : Singleton<BossManager> {
private List<Boss> _bossList = new List<Boss>();
/// <summary>
/// 添加
/// </summary>
/// <param name="boss"></param>
public void Add(Boss boss)
{
if(!_bossList.Contains(boss))
{
_bossList.Add(boss);
}
}
/// <summary>
/// 移除
/// </summary>
public v