Exemple #1
0
    // 快速转向并释放技能aa
    public void QuickSkill(Vector2 v, int iSkillID)
    {
        if (mMainCamera == null)
        {
            return;
        }

        Ray ray = mMainCamera.ScreenPointToRay(v);
        sdActorInterface monster = PickupMonster(ray);

        if (monster == null)
        {
            Vector3 terrainPosition = new Vector3();
            if (FingerGesturesInitializer.NavMesh_RayCast(ray, ref terrainPosition, 100000.0f))
            {
                Vector3 charPosition  = GetPosition();
                Vector3 nextDirection = terrainPosition - charPosition;
                MoveDir(nextDirection);
                fStopTime = 0.3f;
            }
        }
        else
        {
            Vector3 monsterPosition = monster.transform.position;
            Vector3 charPosition    = GetPosition();
            Vector3 nextDirection   = monsterPosition - charPosition;
            MoveDir(nextDirection);
            fStopTime = 0.3f;
        }

        CastSkill(iSkillID);
    }
Exemple #2
0
    public static bool NavMesh_RayCast(Vector3 kPos, ref Vector3 hitPoint)
    {
        Vector3 kDirection  = new Vector3(0.0f, -1.0f, 0.0f);
        Ray     kRay        = new Ray(kPos, kDirection);
        bool    bHasNavMesh = FingerGesturesInitializer.NavMesh_RayCast(kRay, ref hitPoint, 10.0f);

        return(bHasNavMesh);
    }
Exemple #3
0
    // 选择宠物出生点(选择出存在NavMesh但是不跟Monster存在碰撞的位置)aa
    public static bool BornPosition(Vector3 kPos, float fRadius, ref Vector3 kBornPos)
    {
        for (int iCount = 0; iCount < 16; ++iCount)
        {
            float fRandom = UnityEngine.Random.Range(0.0f, 1.0f);
            float fBiasX  = Mathf.Sin(fRandom * 2.0f * Mathf.PI) * fRadius;
            float fBiasZ  = Mathf.Cos(fRandom * 2.0f * Mathf.PI) * fRadius;

            Vector3 kOrigin = kPos;
            kOrigin.y += 2.0f;
            kOrigin.x += fBiasX;
            kOrigin.z += fBiasZ;

            Vector3 kDirection  = new Vector3(0.0f, -1.0f, 0.0f);
            Ray     kRay        = new Ray(kOrigin, kDirection);
            bool    bHasNavMesh = FingerGesturesInitializer.NavMesh_RayCast(kRay, ref kBornPos, 10.0f);
            if (!bHasNavMesh)
            {
                continue;
            }
            else
            {
                if (Mathf.Abs(kBornPos.y - kPos.y) > 0.5f)
                {
                    continue;
                }
                kRay = new Ray(kPos, kBornPos - kPos);
                RaycastHit hit;
                if (Physics.Raycast(kRay, out hit))
                {
                    float distance    = (kBornPos - kPos).magnitude;
                    float hitdistance = (hit.point - kPos).magnitude;
                    if (distance > hitdistance)
                    {
                        continue;
                    }
                    else
                    {
                        return(true);
                    }
                }
                else
                {
                    return(true);
                }
            }
        }
        kBornPos = kPos;                //< 选择主角位置aa
        return(false);
    }
Exemple #4
0
    //
    public void OnFingerUp(Vector2 v)
    {
        if (!mEnable)
        {
            return;
        }

        if (mMainCamera == null)
        {
            return;
        }

        Ray ray = mMainCamera.ScreenPointToRay(v);

        sdActorInterface monster = PickupMonster(ray);

        if (monster == null)
        {
            Vector3 point = new Vector3();
            if (FingerGesturesInitializer.NavMesh_RayCast(ray, ref point, 100000.0f))
            {
                Vector3    vNewPoint = point + new Vector3(0, 1, 0);
                Ray        newRay    = new Ray(vNewPoint, new Vector3(0, -1, 0));
                RaycastHit hit;
                if (Physics.Raycast(newRay, out hit))
                {
                    mPlayerAutoState.SetPoint(hit.point, this);
                    ShowMoveTarget(hit.point);
                }
                else
                {
                    mPlayerAutoState.SetPoint(point, this);
                    ShowMoveTarget(point);
                }
            }
            else
            {
                HideMoveTarget();
            }
        }
        else
        {
            mPlayerAutoState.SetTarget(monster, this);
        }
    }