MMORPG手游制作-任务15.摄像机围绕主角进行旋转 缩放
摄像机结构:
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
}