您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

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);
}
}
}