您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
69 行
1.9 KiB
69 行
1.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UInput = UnityEngine.Input;
|
|
|
|
namespace UIWidgetsSample.RaycastableScene
|
|
{
|
|
public class DragRotate : MonoBehaviour
|
|
{
|
|
Vector2? _lastPosition;
|
|
|
|
public static Vector2 mousePosition
|
|
{
|
|
get
|
|
{
|
|
return new Vector2(UInput.mousePosition.x, UInput.mousePosition.y);
|
|
}
|
|
}
|
|
|
|
private static bool IsPointerOverUIObject(float x, float y) {
|
|
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
|
|
eventDataCurrentPosition.position = new Vector2(x, y);
|
|
List<RaycastResult> results = new List<RaycastResult>();
|
|
EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
|
|
return results.Count > 0;
|
|
}
|
|
|
|
void OnMouseDown()
|
|
{
|
|
if (EventSystem.current.IsPointerOverGameObject())
|
|
{
|
|
return;
|
|
}
|
|
|
|
foreach (Touch touch in UInput.touches)
|
|
{
|
|
if (touch.phase == TouchPhase.Began)
|
|
{
|
|
int id = touch.fingerId;
|
|
if (IsPointerOverUIObject(touch.position.x, touch.position.y))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
_lastPosition = mousePosition;
|
|
}
|
|
|
|
private void OnMouseUp()
|
|
{
|
|
_lastPosition = null;
|
|
}
|
|
|
|
private void OnMouseDrag()
|
|
{
|
|
if (_lastPosition == null)
|
|
{
|
|
return;
|
|
}
|
|
Vector2 direction = mousePosition - _lastPosition.Value;
|
|
_lastPosition = mousePosition;
|
|
|
|
transform.Rotate(-direction.y, -direction.x, 0, Space.World);
|
|
}
|
|
}
|
|
}
|