Ejemplo n.º 1
0
    public void exitNavMode(CameraNavMode navMode)
    {
        if (navMode == CameraNavMode.Follow)
        {
            m_navModeFollowCount--;
            if (m_navModeFollowCount <= 0)
            {
                m_navModeFollowCount = 0;
            }
        }

        if (navMode == CameraNavMode.Target)
        {
            m_navTragetTransform = null;
        }

        if (navMode == CameraNavMode.FloatingAngle)
        {
            m_navTragetTransform = null;
        }

        if (navMode != NavMode)
        {
            return;
        }
        else
        {
            NavMode = CameraNavMode.None;
        }
    }
Ejemplo n.º 2
0
    private Vector3 m_navTargetAngle = Vector3.zero; //转向指定角度
    public void enterNavMode(CameraNavMode enterNavMode, Transform refTransform, Vector3 refAngle)
    {
        if (camCtrl == null)
        {
            return;
        }
        if (enterNavMode == CameraNavMode.Follow)
        {
            m_navModeFollowCount++;
        }
        if (NavMode > enterNavMode)
        {
            return;                         //正在进行优先级更高的操作,直接挡掉了
        }
        if (enterNavMode == CameraNavMode.Target)
        {
            if (refTransform)
            {
                if (m_navTragetTransform == refTransform)
                {
                    //已经跟踪在旋转了,直接退了吧
                    return;
                }
                Vector3 direction = refTransform.position - soldier.gameObject.transform.transform.position;
                if (direction.magnitude > rotateStartMaxDistance || direction.magnitude < rotateStartMinDistance)
                {
                    return; //距离限制不开启
                }

                if (ScreenRaycast.isInScreen(refTransform.position))
                {
                    return; //在屏幕内的不开启
                }


                direction.y = 0;
                direction.Normalize();
                float angle = Mathf.Rad2Deg * (Mathf.Atan2(direction.x, direction.z));

                float detaAngle = Mathf.DeltaAngle(m_userDesireAngle.y, angle);
                if (Mathf.Abs(detaAngle) <= rotateStartAngle) //小于rotateStartAngle度不开启
                {
                    return;
                }

                if (enterNavMode != NavMode) //刚进入此模式,从初速度开始旋转
                {
                    m_approximageRotateSpeed = rotateStartSpeed;
                }

                m_navTragetTransform = refTransform;
            }
            else
            {
                if (NavMode == enterNavMode)
                {
                    exitNavMode(NavMode);
                }
                return;
            }
        }
        else if (enterNavMode == CameraNavMode.FloatingAngle)
        {
            if (refAngle.sqrMagnitude > 0.01f)
            {
                m_navTargetAngle = refAngle;
            }
            else
            {
                exitNavMode(enterNavMode);
            }
        }
        NavMode = enterNavMode;
    }