using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public enum FingerIE
{
zero,
OneFinger,
TwoFinger,
}
public class FingerController : MonoBehaviour
{
public Vector3 initialRot;
public Vector3 initialSca;
public static FingerController instance;
IEnumerator ie;
FingerIE finger_num = FingerIE.zero;
void Awake()
{
instance = this;
}
// Update is called once per frame
void Update()
{
if (Input.touchCount == 0)
{
if (finger_num != FingerIE.zero)
{
StopCoroutine(ie);
ie = null;
finger_num = FingerIE.zero;
}
}
else if (Input.touchCount == 1)
{
if (finger_num != FingerIE.OneFinger)
{
if (ie != null)
{
StopCoroutine(ie);
}
ie = IMonitorMouseOneFinger();
StartCoroutine(ie);
finger_num = FingerIE.OneFinger;
}
}
else if (Input.touchCount == 2)
{
if (finger_num != FingerIE.TwoFinger)
{
if (ie != null)
{
StopCoroutine(ie);
}
ie = IIMonitorMouseTwoFinger();
StartCoroutine(ie);
finger_num = FingerIE.TwoFinger;
}
}
}
/// <summary>
/// 一根手指控制转动
/// </summary>
/// <returns></returns>
IEnumerator IMonitorMouseOneFinger()
{
Touch oneFingerTouch;
while (true)
{
oneFingerTouch = Input.GetTouch(0);
if (oneFingerTouch.phase == TouchPhase.Moved)
{
//Vector2 deltaPos = oneFingerTouch.deltaPosition;
//transform.Rotate(-Vector3.forward * deltaPos.x * 0.2f, Space.Self);
//transform.Rotate(-Vector3.left * deltaPos.y * 0.2f, Space.Self);
//模型绕自身y轴旋转
// transform.Rotate(-Vector3.up * deltaPos.x * 0.2f, Space.Self);
//Vector2 deltaPos = oneFingerTouch.deltaPosition;
// 模型绕自身X轴旋转
//transform.Rotate(Vector3.right * deltaPos.x * 0.2f, Space.Self);
Vector2 deltaPos = oneFingerTouch.deltaPosition;
// 模型绕自身Z轴旋转
transform.Rotate(Vector3.forward * deltaPos.x * 0.2f, Space.Self);
}
yield return 0;
}
}
/// <summary>
/// 两个手指控制缩放
/// </summary>
/// <returns></returns>
IEnumerator IIMonitorMouseTwoFinger()
{
Touch firstOldTouch;
Touch secondOldTouch;
Touch firstNewTouch;
Touch secondNewTouch;
float oldDistance;
float newDistance;
Vector3 originalScale; // 假设这个变量在初始化时设置了模型的原始尺寸
void Start()
{
// 初始化原始尺寸,假设这是在模型创建或加载时确定的
originalScale = this.transform.localScale;
}
IEnumerator ScaleBasedOnDistance()
{
while (true)
{
if (Input.touchCount >= 2)
{
firstOldTouch = Input.GetTouch(0);
secondOldTouch = Input.GetTouch(1);
oldDistance = Vector2.Distance(firstOldTouch.position, secondOldTouch.position);
yield return null; // 使用null代替0来等待下一帧
firstNewTouch = Input.GetTouch(0);
secondNewTouch = Input.GetTouch(1);
newDistance = Vector2.Distance(firstNewTouch.position, secondNewTouch.position);
if (oldDistance > newDistance && this.transform.localScale.x > 0.25f)
{
this.transform.localScale -= Vector3.one * 0.1f;
}
else if (oldDistance < newDistance && this.transform.localScale.x < originalScale.x * 2f) // 修改这里
{
this.transform.localScale += Vector3.one * 0.1f;
// 确保缩放不会超过原始尺寸的2倍
this.transform.localScale = Vector3.Min(this.transform.localScale, originalScale * 2f);
}
}
yield return null; // 即使没有触摸输入也等待下一帧
}
}
// 在某个地方(例如Start方法中)启动协程
void Start()
{
StartCoroutine(ScaleBasedOnDistance());
}
}
/// <summary>
/// 复位
/// </summary>
public void ResetRot()
{
this.transform.localEulerAngles = initialRot;
this.transform.localScale = initialSca;
}
}
添加射线碰撞选择碰撞的模型后再进行缩放旋转
最新推荐文章于 2024-04-26 13:59:04 发布