Example #1
0
    IEnumerator gotoEnemy()
    {
        while (true)
        {
            yield return null;
            GameObject firstenemy = FightRoleManager._instance.findAttackEnemy(this, EAttackStragety.EAttackStragety_Nearest, isAttackEnemy(casterdata.skilldata));
            if (firstenemy != null)
            {
                float dist = FightRoleManager._instance.getFightRoleDistance(this, firstenemy.GetComponent<DBaseFightRole>()) - firstenemy.GetComponent<DBaseFightRole>().roleRadius;

                if (dist > casterdata.skilldata.minAttackDist)
                {
                    Vector3 destpoint = FightRoleManager._instance.getAttackPointByDist(this, firstenemy.GetComponent<DBaseFightRole>(), casterdata.skilldata.minAttackDist);
                    gotoDestination(destpoint);
                    if (FightRoleManager._instance.isCollisionOther(this))
                    {
                      //  gotoDestination(rolePosition);
                        isCasteringSkill = false;
                        break;
                    }
                }
                else
                {
                   // agent.enabled = true;
                    gotoDestination(rolePosition);

                    roleModel.transform.LookAt(firstenemy.GetComponent<DBaseFightRole>().roleModel.transform, Vector3.up);
                   // animatorControl.resetToIdle();
                    if (casterdata.skilldata.isNeedAppoint)
                    {
                        skillstep = ESkillStep.Selecting;
                    }
                    else
                    {
                        if (casterdata.skilldata.isUseMoveEff)
                            StartCoroutine(ShowMoveEffectToEnemy(firstenemy));
                        else
                            StartCoroutine(showBeantonMov());
                        if (casterdata.skilldata.isShakeCamera)
                            Invoke("shakeCamera", casterdata.skilldata.shakeTime);
                        StartCoroutine(showAttackMov());
                    }
                    break;
                }
            }
            else
            {
                //agent.enabled = true;
                gotoDestination(rolePosition);
                animatorControl.resetToIdle();
                isCasteringSkill = false;
                break;
            }
        }
    }
Example #2
0
    IEnumerator OnLockMultiTarget()
    {
       // CursorManager.instance.SetNormal();
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hitinfo;

        LayerMask mask = 1 << LayerMask.NameToLayer("GroundLayer");

        bool isCollider = Physics.Raycast(ray, out hitinfo, 1000, mask);
        if (isCollider && hitinfo.collider.tag == Tags.ground)
        {
            roleModel.transform.LookAt(hitinfo.point,Vector3.up);

            StartCoroutine(showAttackMov());

            yield return null;
            skillstep = ESkillStep.None;

            if (casterdata.skilldata.isUseMoveEff)
            {
                //开始播放移到特效
                StartCoroutine(ShowMoveEffect(hitinfo.point));
            }
            else if (!string.IsNullOrEmpty(casterdata.skilldata.explodeEffUrl))
            {
                showExplodeEff(hitinfo.point);
            }
           
        }
        else
            skillstep = ESkillStep.None;
    }
Example #3
0
    //使用技能发动攻击
    public bool useSkill(DSkillBaseData baseSkilldata)
    {
        if (!canUseSkillNow())
            return false;

        if (baseSkilldata != null)
        {
            GameObject firstenemy = FightRoleManager._instance.findAttackEnemy(this, EAttackStragety.EAttackStragety_Nearest, isAttackEnemy(baseSkilldata));

            if (firstenemy != null)
            {
                isCasteringSkill = true;
                casterdata = new SkillCasterData();
                casterdata.castRole = gameObject;
                casterdata.skilldata = baseSkilldata;

                float dist = FightRoleManager._instance.getFightRoleDistance(this, firstenemy.GetComponent<DBaseFightRole>());
                roleModel.transform.LookAt(firstenemy.GetComponent<DBaseFightRole>().roleModel.transform, Vector3.up);

                if (skillManager != null)
                {
                    skillManager.useSkill(baseSkilldata);
                }
                if (dist > DefaultSkillParam.PathFindingDist)//当距离大于可自动寻路距离,不作攻击,只表现一下施放动作和特性
                {
                    StartCoroutine(showAttackMov());

                }
                else if (dist > baseSkilldata.minAttackDist)
                {
                    StartCoroutine(gotoEnemy());
                }
                else
                {
                    //roleModel.transform.LookAt(firstenemy.transform, Vector3.up);
                    if (casterdata.skilldata.isNeedAppoint)
                    {
                        skillstep = ESkillStep.Selecting;
                    }
                    else
                    {
                        if (casterdata.skilldata.isUseMoveEff)
                            StartCoroutine(ShowMoveEffectToEnemy(firstenemy));
                        else
                            StartCoroutine(showBeantonMov());
                        if (casterdata.skilldata.isShakeCamera)
                            Invoke("shakeCamera", casterdata.skilldata.shakeTime);
                        StartCoroutine(showAttackMov());
                    }
                }
            }
            else
            {
                if (skillManager != null)
                {
                    skillManager.useSkill(baseSkilldata);
                }
                isCasteringSkill = true;
                casterdata = new SkillCasterData();
                casterdata.castRole = gameObject;
                casterdata.skilldata = baseSkilldata;
                StartCoroutine(showAttackMov());
                return true;
            }
        }
        return false;

    }