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);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
            }
        }
    }