MMORPG手游制作-任务15.摄像机围绕主角进行旋转 缩放

版权声明:目前在职,联系16675190421 https://blog.csdn.net/qq_29019031/article/details/79221914

摄像机结构:


cameraFollowAndRotate :左右旋转需要改变RotationY轴

CameraUpAndDown :上下旋转需要改变RotationZ轴

CameraZoomContainer:实时观察主角

CameraContainer:视觉需要改变PositionZ轴


MainCamera 保持不变

脚本:


调用:



手势控制:


手势单例:


定义变量


滑动前滑动后

:


手指枚举:


滑动委托:


注册滑动事件


定义上一个操作区分操作:




点击地面事件:


注册调用委托同上

定义视角:

    public enum ZoomType
    { 
        In,
        Out
    }

视角委托:
    public System.Action<ZoomType> OnZoom;

PC:

void Update()

{

#if UNITY_EDITOR || UNITY_STANDALONE_WIN
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            if (OnZoom != null)
            {
                OnZoom(ZoomType.Out);
            }
        }
        else if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            if (OnZoom != null)
            {
                OnZoom(ZoomType.In);
            }
        }

}

void Start()

{

 if (FingerEvent.Instance != null)
        {
         
            FingerEvent.Instance.OnZoom += OnZoom;
  }

}

void Destroy()

{

FingerEvent.Instance.OnZoom -= OnZoom;

}

    #region OnZoom 摄像机缩放
    private void OnZoom(FingerEvent.ZoomType obj)
    {
        switch (obj)
        {
            case FingerEvent.ZoomType.In:
                CameraCtrl.Instance.SetCameraZoom(0);
                break;
            case FingerEvent.ZoomType.Out:
                CameraCtrl.Instance.SetCameraZoom(1);
                break;
        }
    }


移动 :



    private Vector2 m_TempFinger1Pos;
    private Vector2 m_TempFinger2Pos;


    private Vector2 m_OldFinger1Pos;
    private Vector2 m_OldFinger2Pos;

  void Update()
    { 
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
        if (Input.GetAxis("Mouse ScrollWheel") < 0)
        {
            if (OnZoom != null)
            {
                OnZoom(ZoomType.Out);
            }
        }
        else if (Input.GetAxis("Mouse ScrollWheel") > 0)
        {
            if (OnZoom != null)
            {
                OnZoom(ZoomType.In);
            }
        }
#elif UNITY_ANDROID || UNITY_IPHONE
if (Input.touchCount > 1)
        {
            if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
            {
                m_TempFinger1Pos = Input.GetTouch(0).position;
                m_TempFinger2Pos = Input.GetTouch(1).position;


                if (Vector2.Distance(m_OldFinger1Pos, m_OldFinger2Pos) < Vector2.Distance(m_TempFinger1Pos, m_TempFinger2Pos))
                {
                    //放大
                    if (OnZoom != null)
                    {
                        OnZoom(ZoomType.In);
                    }
                }
                else
                { 
                    //缩小
                    if (OnZoom != null)
                    {
                        OnZoom(ZoomType.Out);
                    }
                }


                m_OldFinger1Pos = m_TempFinger1Pos;
                m_OldFinger2Pos = m_TempFinger2Pos;
            }
        }
#endif
    }


猜你喜欢

转载自blog.csdn.net/qq_29019031/article/details/79221914