通过检测鼠标是否在指定UI上拖动 实现围绕角色旋转摄像机(包括安卓端)

- 使用的虚拟摄像机
- UI使用的单独的摄像机,玩家使用单独的相机
- 判断输入点是否在指定UI上时要注意把UI坐标转换为屏幕坐标,要指定摄像机
RectTransformUtility.RectangleContainsScreenPoint(rect_RotateCameraArea, Input.mousePosition, GameEntry.MyCamera.uiCamera);
- 虚拟摄像机进行如下设置,**需要注意的是**此功能相机并非跟随、锁定的Player,而是创建了个CameraRoot空物体,让CameraRoot跟随Player的位置,而旋转值不跟随。为什么不直接作为Player的子物体呢? 因为,这个项目人物通过摇杆移动,操作摇杆时人物也会旋转,CameraRoot也就跟着旋转了

- 具体功能代码
#region 旋转视角
private float x, y;
private bool isDragging;
private Vector2 lastTouchPosition;
private float touchSensitivity=0.2f;
private float mouseSensitivity=0.2f;
void RotateCamera_VirtualCamera()
{
bool isInAllowedArea = RectTransformUtility.RectangleContainsScreenPoint(rect_RotateCameraArea, Input.mousePosition, GameEntry.MyCamera.uiCamera);
if (!isInAllowedArea)
{
return;
}
#if UNITY_EDITOR
if (Input.GetMouseButtonDown(0))
{
isDragging = true;
lastTouchPosition = Input.mousePosition;
y=tkcGame.player.cameraRoot.rotation.eulerAngles.x;
x=tkcGame.player.cameraRoot.rotation.eulerAngles.y;
}
else if (Input.GetMouseButton(0) && isDragging)
{
Vector2 currentMousePosition = Input.mousePosition;
Vector2 delta = currentMousePosition - lastTouchPosition;
x += delta.x * mouseSensitivity;
y -= delta.y * mouseSensitivity;
y = Mathf.Clamp(y, 0, 70);
tkcGame.player.cameraRoot.transform.rotation = Quaternion.Euler(y, x, 0.0f);
lastTouchPosition = currentMousePosition;
}
else if (Input.GetMouseButtonUp(0))
{
isDragging = false;
}
#else
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
isDragging = true;
lastTouchPosition = touch.position;
y=tkcGame.player.cameraRoot.rotation.eulerAngles.x;
x=tkcGame.player.cameraRoot.rotation.eulerAngles.y;
}
else if (touch.phase == TouchPhase.Moved && isDragging)
{
Vector2 delta = touch.deltaPosition;
x += delta.x * mouseSensitivity;
y -= delta.y * mouseSensitivity;
y = Mathf.Clamp(y, 0, 70);
tkcGame.player.cameraRoot.transform.rotation = Quaternion.Euler(y, x, 0.0f);
}
else if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
{
isDragging = false;
}
#endif
}
#endregion