59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
|
using System;
|
|||
|
using TouchScript.Gestures.TransformGestures;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace HK
|
|||
|
{
|
|||
|
public class ImageTransformController : MonoBehaviour
|
|||
|
{
|
|||
|
private ScreenTransformGesture transformGesture;
|
|||
|
|
|||
|
// 移动速度系数
|
|||
|
public float moveSpeed = 1f;
|
|||
|
|
|||
|
// 缩放速度系数
|
|||
|
public float scaleSpeed = 0.01f;
|
|||
|
|
|||
|
// 旋转速度系数
|
|||
|
public float rotateSpeed = 1f;
|
|||
|
|
|||
|
private void Awake()
|
|||
|
{
|
|||
|
transformGesture = GetComponent<ScreenTransformGesture>();
|
|||
|
}
|
|||
|
|
|||
|
private void OnEnable()
|
|||
|
{
|
|||
|
transformGesture.Transformed += OnTransformed;
|
|||
|
}
|
|||
|
|
|||
|
private void OnDisable()
|
|||
|
{
|
|||
|
transformGesture.Transformed -= OnTransformed;
|
|||
|
}
|
|||
|
|
|||
|
private void OnTransformed(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Debug.Log("position " + transformGesture.DeltaPosition);
|
|||
|
Debug.Log("scale " + transformGesture.DeltaScale);
|
|||
|
Debug.Log("rotation " + transformGesture.DeltaRotation);
|
|||
|
var rectTransform = transform.GetComponent<RectTransform>();
|
|||
|
|
|||
|
// 移动
|
|||
|
rectTransform.anchoredPosition3D += transformGesture.DeltaPosition * moveSpeed;
|
|||
|
|
|||
|
// 缩放
|
|||
|
float scaleFactor = transformGesture.DeltaScale > 1
|
|||
|
? transformGesture.DeltaScale * scaleSpeed
|
|||
|
: 1 / (2 - transformGesture.DeltaScale) * scaleSpeed;
|
|||
|
|
|||
|
Vector3 newScale = transform.localScale * scaleFactor;
|
|||
|
newScale = Vector3.Max(newScale, Vector3.one * 0.5f); // 最小缩放限制
|
|||
|
newScale = Vector3.Min(newScale, Vector3.one * 3f); // 最大缩放限制
|
|||
|
transform.localScale = newScale;
|
|||
|
|
|||
|
// 旋转
|
|||
|
transform.Rotate(0, 0, transformGesture.DeltaRotation * rotateSpeed, Space.Self);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|