public override T Create <T>(CharacterDTO dto) { T ch = new T(); CharacterAttr attr = CharacterAttr.GetAttr(dto); Type t = typeof(T); switch (t.Name) { case "Player": attr.type = CharacterType.Player; break; case "Monster": attr.type = CharacterType.Monster; break; case "Npc": attr.type = CharacterType.Npc; break; } // 初始化角色属性 ch.Init(attr); // 初始化导航代理 ch.InitNavmeshAgent(_navmeshQuery); // 将创建的角色添加到字典中 if (!_characters.ContainsKey(ch.characterid)) { _characters.Add(ch.characterid, ch); } return(ch); }
public T Create <T>(CharacterDTO dto) where T : Character, new() { T ch = new T(); CharacterAttr attr = CharacterAttr.GetAttr(dto); ch.Init(attr); ch.InitNavmeshAgent(_navmeshQuery); // 将创建的角色添加到字典中 if (!_roles.ContainsKey(ch.characterid)) { _roles.Add(ch.characterid, ch); } return(ch); }
public Character(int globalid, RoleCfg roleCfg, Vector3 position) { _globalID = globalid; _cfg = roleCfg; // 通过配置获取原始属性 _originAttr = CharacterAttr.GetAttr(roleCfg); // 获取当前属性 _currAttr = _originAttr.Clone(); // 对象池创建对象 _transform = (PoolManager.instance.Spawn("Units/", _cfg.ModelName)).transform; _transform.position = position; _transform.localScale = Vector3.one; _navmeshAgent = _transform.gameObject.GetComponent <UnityEngine.AI.NavMeshAgent>(); if (_navmeshAgent == null) { _navmeshAgent = _transform.gameObject.AddComponent <UnityEngine.AI.NavMeshAgent>(); } _navmeshAgent.speed = _originAttr.MoveSpeed; _navmeshAgent.enabled = false; _navmeshAgent.angularSpeed = 180; _animation = _transform.gameObject.GetComponent <Animation>(); // 在角色的GameObject上添加一个碰撞器 _collider = _transform.gameObject.GetComponent <CapsuleCollider>(); if (_collider == null) { _collider = _transform.gameObject.AddComponent <CapsuleCollider>(); } _collider.center = new Vector3(0, 1, 0); _collider.height = 2; // 添加ID代理 _idAgent = _transform.gameObject.GetComponent <IDAgent>(); if (_idAgent == null) { _idAgent = _transform.gameObject.AddComponent <IDAgent>(); } _idAgent.globalID = globalid; // 创建角色拥有的技能发射器 _skillCasters = new Dictionary <int, SkillCaster>(); Dictionary <int, SkillGroupCfg> skillGroupCfgs = ConfigManager.instance.GetSkillGroupCfgs(_cfg.ID); foreach (SkillGroupCfg cfg in skillGroupCfgs.Values) { SkillCaster caster = new SkillCaster(this); caster.SkillBasicCfg = ConfigManager.instance.GetSkillBasicCfg(cfg.ID); caster.SkillBulletCfg = ConfigManager.instance.GetSkillBulletCfg(cfg.ID); caster.SkillAOECfg = ConfigManager.instance.GetSkillAOECfg(cfg.ID); caster.SkillBuffCfg = ConfigManager.instance.GetSkillBuffCfg(cfg.ID); caster.SkillTrapCfg = ConfigManager.instance.GetSkillTrapCfg(cfg.ID); if (!_skillCasters.ContainsKey(cfg.ID)) { _skillCasters.Add(cfg.ID, caster); } } }