void Update()
 {
     DestoryTime -= Time.deltaTime;
     if (DestoryTime <= 0)
     {
         ObjectPoor.Instance().Delete(transform.gameObject, Vector3.zero, Quaternion.identity);
         DestoryTime = 3f;
     }
 }
Esempio n. 2
0
    public static ObjectPoor Instance()
    {
        if (_instance == null)
        {
            _instance = new GameObject("ObjectPoor").AddComponent <ObjectPoor>();

            PooLList = new Dictionary <string, Queue <GameObject> >();
        }
        return(_instance);
    }
Esempio n. 3
0
 void Update()
 {
     if (Input.GetKeyDown(KeyCode.J))
     {
         ObjectPoor.Instance().Create(prefab, transform.position, Quaternion.identity);
     }
     if (Input.GetKeyDown(KeyCode.K))
     {
         ObjectPoor.Instance().Create(cube, transform.position, Quaternion.identity);
     }
 }
    //如果攻击目标为空 则遍历敌人集合 找到最近的敌人
    //如果最近的敌人超出攻击范围,则朝最近的敌人方向移动
    //在攻击范围内。攻击

    /// <summary>
    /// 攻击1判定
    /// </summary>
    private void AttackOne(MMORPG_BaseObject_Player entity)
    {
        //获取攻击目标

        //根据各个英雄攻击距离和攻击方式不同需要分为近战和远战


        if (entity.FightObject == null)
        {
            entity.GetMinDistancePlayer();
        }

        //float distance = Vector3.Distance(entity.transform.position, entity.FightObject.transform.position);

        //if (distance > entity.attackDistance)
        //{
        //    return;
        //}

        if (entity.CheckAttackDistance())
        {
            //攻击范围内
            entity.transform.LookAt(entity.FightObject.transform.position);
        }

        if (entity.myAnimation["AttackOne"].length > 0.7f)
        {
            switch (entity.playerType)
            {
            case MMORPG_BaseObject_Player.PlayerType.None:
                break;

            case MMORPG_BaseObject_Player.PlayerType.Sword:
                //近战攻击
                //实例化特效
                GameObject Effect = Resources.Load <GameObject>("Effect/Sword/Boy_Attack_01");
                ObjectPoor.Instance().Create(Effect, entity.attackPos.position, entity.transform.rotation);

                break;

            case MMORPG_BaseObject_Player.PlayerType.Magic:
                //远战攻击
                //实例化 弓箭、魔法球
                GameObject Magic = Resources.Load <GameObject>("Effect/Magic/MagicAttack01");
                if (entity.CheckAttackDistance())
                {
                    ObjectPoor.Instance().Create(Magic, entity.attackPos.position, entity.transform.rotation, entity.FightObject);
                }
                else
                {
                    ObjectPoor.Instance().Create(Magic, entity.attackPos.position, entity.transform.rotation);
                }

                break;

            case MMORPG_BaseObject_Player.PlayerType.Assassin:
                //近战攻击
                //实例化特效
                break;

            case MMORPG_BaseObject_Player.PlayerType.Archer:
                //远战攻击
                //实例化 弓箭、魔法球
                GameObject Arrow = Resources.Load <GameObject>("Arrow");
                GameObject arrow = GameObject.Instantiate(Arrow, entity.transform.position, Quaternion.identity) as GameObject;
                arrow.GetComponent <MMORPG_PlayerNormalAttack_Arrow>().target = entity.FightObject;
                break;

            default:
                break;
            }

            if (entity.CheckAttackDistance())
            {
                //发送伤害消息
                MessageDispatcher.Instance.DispatchMessage(0.5f, entity.transform, entity.FightObject.transform, (int)EnumDefine.MessageType.Hurt, EntityManager.Instance.GetEntityFromTransform(entity.transform), 10f, EnumDefine.BuffType.Fire, 100, 10);
                Debug.Log("<Color=red>远程攻击</Color>");
            }
        }
    }
    /// <summary>
    /// 攻击2判定
    /// </summary>
    private void AttackTwo(MMORPG_BaseObject_Player entity)
    {
        List <GameObject> AttackList = entity.GetAoeAttackEnemy();

        if (entity.myAnimation["AttackTwo"].length > 0.5f)
        {
            for (int i = 0; i < AttackList.Count; i++)
            {
                switch (entity.playerType)
                {
                case MMORPG_BaseObject_Player.PlayerType.None:
                    break;

                case MMORPG_BaseObject_Player.PlayerType.Sword:
                    //近战攻击
                    //实例化特效

                    GameObject Effect = Resources.Load <GameObject>("Effect/Sword/Boy_Attack_02");
                    ObjectPoor.Instance().Create(Effect, entity.attackPos.position, entity.transform.rotation);
                    Debug.Log("生成特校");
                    break;

                case MMORPG_BaseObject_Player.PlayerType.Magic:
                    //远战攻击
                    //实例化 弓箭、魔法球
                    GameObject Magic    = Resources.Load <GameObject>("Effect/Magic/MagicAttack01");
                    float      distance = Vector3.Distance(entity.transform.position, AttackList[i].transform.position);
                    if (distance > entity.attackDistance)
                    {
                        ObjectPoor.Instance().Create(Magic, entity.attackPos.position, entity.transform.rotation, null);
                    }
                    else
                    {
                        ObjectPoor.Instance().Create(Magic, entity.attackPos.position, entity.transform.rotation, AttackList[i]);
                    }

                    break;

                case MMORPG_BaseObject_Player.PlayerType.Assassin:
                    //近战攻击
                    //实例化特效
                    break;

                case MMORPG_BaseObject_Player.PlayerType.Archer:
                    //远战攻击
                    //实例化 弓箭、魔法球
                    GameObject Arrow = Resources.Load <GameObject>("Arrow");
                    GameObject arrow = GameObject.Instantiate(Arrow, entity.transform.position, Quaternion.identity) as GameObject;
                    arrow.GetComponent <MMORPG_PlayerNormalAttack_Arrow>().target = entity.FightObject;
                    break;

                default:
                    break;
                }
                if (entity.CheckAttackDistance())
                {
                    MessageDispatcher.Instance.DispatchMessage(0.5f, entity.transform, AttackList[i].transform, (int)EnumDefine.MessageType.Hurt, EntityManager.Instance.GetEntityFromTransform(entity.transform), 10f, EnumDefine.DeBuffType.Fire, 100, 10);
                    Debug.Log("<Color=red>远程攻击</Color>");
                }
            }
        }
    }