コード例 #1
0
ファイル: FlyEffect.cs プロジェクト: moto2002/moba
 private void HitTarget(Collider col)
 {
     if (((1 << col.gameObject.layer) & GameLibrary.GetAllLayer()) != 0)
     {
         CharacterState mCurTargetCs = col.GetComponent <CharacterState>();
         if (mCurTargetCs != null && CheckHitCondition(mCurTargetCs))
         {
             mCurMonsters.Add(col.gameObject);
             HitAction();
         }
     }
 }
コード例 #2
0
    public virtual GameObject CheckColiderByCondition(Collider col, Func <CharacterState, bool> func)
    {
        GameObject result = null;

        if (((1 << col.gameObject.layer) & GameLibrary.GetAllLayer()) != 0)
        {
            CharacterState mCurTargetCs = col.GetComponent <CharacterState>();
            if (mCurTargetCs != null && func(mCurTargetCs) && CheckInView(mCurTargetCs, attackerCs))
            {
                result = col.gameObject;
            }
        }
        return(result);
    }
コード例 #3
0
 void SetLockTarget()
 {
     mTouches = Input.touches;
     if (Input.GetMouseButtonDown(0) || mTouches.Length > 0)
     {
         if (mTouches.Length > 0)
         {
             for (int i = 0; i < mTouches.Length; i++)
             {
                 Touch touch = mTouches[i];
                 if (touch.phase != TouchPhase.Ended && touch.phase != TouchPhase.Canceled)
                 {
                     mIsTouched = true;
                     mTouchPos  = touch.position;
                 }
             }
         }
         else
         {
             mIsTouched = true;
             mTouchPos  = Input.mousePosition;
         }
     }
     if (mIsTouched)
     {
         mIsTouched = false;
         Ray        ray = Camera.main.ScreenPointToRay(mTouchPos);
         RaycastHit hit;
         if (Physics.Raycast(ray, out hit, GameLibrary.GetMaxRayDistance(), GameLibrary.GetAllLayer()))
         {
             CharacterState hitCS = hit.transform.GetComponent <CharacterState>();
             if (hitCS != null && hitCS.groupIndex != playerGroupIndex)
             {
                 lockedTarget = hitCS;
             }
         }
     }
 }
コード例 #4
0
ファイル: EffectToEnemy.cs プロジェクト: moto2002/moba
    //获取攻击到的敌人
    List <GameObject> GetDamageRange()
    {
        int layMask = GameLibrary.GetAllLayer();

        Collider[] colliders = Physics.OverlapSphere(this.transform.position, range, layMask);

        CharacterState mcs = attackerTrans.GetComponent <CharacterState>();

        if (colliders != null)
        {
            monsters.Clear();

            foreach (Collider item in colliders)
            {
                CharacterState cs = item.GetComponent <CharacterState>();
                if (cs != null && mcs != null && cs.groupIndex != mcs.groupIndex)
                {
                    monsters.Add(item.gameObject);//攻击范围内的敌人
                }
            }
        }

        return(monsters);
    }
コード例 #5
0
    public List <GameObject> GetMultiTargetByCondition(SkillNode skillNode)
    {
        List <GameObject> mTempMonsters = new List <GameObject>();

        Collider[] colliders = Physics.OverlapSphere(cs.transform.position, GameLibrary.Instance().GetSkillDistBySkillAndTarget(cs, skillNode), GameLibrary.GetAllLayer());
        for (int i = 0; i < colliders.Length; i++)
        {
            CharacterState mCurTargetCs = colliders[i].GetComponent <CharacterState>();
            if (mCurTargetCs != null)
            {
                Vector3 direction = mCurTargetCs.transform.position - cs.transform.position;
                if (GameLibrary.Instance().CheckHitCondition(skillNode, cs, mCurTargetCs) && GameLibrary.Instance().IsInvisiblityCanSetTarget(cs, mCurTargetCs) &&
                    (skillNode.angle == 0 ? true : direction == Vector3.zero ? true : Vector3.Angle(cs.transform.forward, direction) <= skillNode.angle / 2))
                {
                    mTempMonsters.Add(mCurTargetCs.gameObject);
                }
            }
        }
        if (skillNode.target_ceiling != 0)
        {
            mTempMonsters.Sort((a, b) =>
            {
                if (a == cs.attackTarget)
                {
                    return(-1);
                }
                if (b == cs.attackTarget)
                {
                    return(1);
                }
                float aDis = Vector3.Distance(cs.transform.position, a.transform.position);
                float bDis = Vector3.Distance(cs.transform.position, b.transform.position);
                return(Mathf.FloorToInt(aDis - bDis));
            });
            mTempMonsters = mTempMonsters.GetRange(0, mTempMonsters.Count < skillNode.target_ceiling ? mTempMonsters.Count : skillNode.target_ceiling);
        }
        return(mTempMonsters);
    }
コード例 #6
0
    public List <GameObject> GetTargetByCondition(GameObject target, SkillNode skillNode)
    {
        List <GameObject> mTempMonsters = new List <GameObject>();

        Collider[] colliders = Physics.OverlapSphere(cs.transform.position, GameLibrary.Instance().GetSkillDistBySkillAndTarget(cs, skillNode), GameLibrary.GetAllLayer());
        for (int i = 0; i < colliders.Length; i++)
        {
            CharacterState mCurTargetCs = colliders[i].GetComponent <CharacterState>();
            if (mCurTargetCs != null)
            {
                Vector3 direction = mCurTargetCs.transform.position - cs.transform.position;
                if (GameLibrary.Instance().CheckHitCondition(skillNode, cs, mCurTargetCs) &&
                    (skillNode.isSingle ? (target == null ? false : target.transform == mCurTargetCs.transform) : true) &&
                    (skillNode.angle == 0 ? true : direction == Vector3.zero ? true : Vector3.Angle(cs.transform.forward, direction) <= skillNode.angle / 2))
                {
                    mTempMonsters.Add(colliders[i].gameObject);
                }
            }
        }
        return(mTempMonsters);
    }