unity中通过touch旋转、放大和缩小物体以及滑动方向的判断

unity中通过touch旋转、放大和缩小物体以及滑动方向的判断这个需求在游戏开发中也是非常频繁,话不多说直接上代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TouchRotateScale : MonoBehaviour {

    // 本案例主要是unity中touch事件的应用,如左右滑动旋转角色,放大缩小角色,判断左滑还是右滑

    public GameObject Player;

    Touch oldTouch1,oldTouch2;

    Vector2 beginPos;
    public Text Tips;
	void Start ()
    {
		
	}
	
	
	void Update ()
    {
        if (Input.touchCount<=0)
        {
            return;
        }

        //单点触摸
        if (Input.touchCount==1)
        {
            Touch touch = Input.GetTouch(0);
            Vector2 pos = touch.deltaPosition;
            //左右旋转:
            Player.transform.Rotate(Vector3.down * pos.x, Space.World);
            //上下旋转
            Player.transform.Rotate(Vector3.right * pos.y, Space.World);

           

        }



        //两点触摸
        Touch newTouch1 = Input.GetTouch(0);
        Touch newTouch2 = Input.GetTouch(1);

        //第二点开始进行触摸,但是只做记录,不进行处理
        if (newTouch2.phase==TouchPhase.Began)
        {
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
            return;
        }

        //此时两点已经开始有移动

        //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型  
        float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
        float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
        //两个距离之差,为正表示放大手势, 为负表示缩小手势  
        float offset = newDistance - oldDistance;
        //放大因子, 一个像素按 0.01倍来算(100可调整)  
        float scaleFactor = offset / 100;

        Vector3 scale = new Vector3(Player.transform.localScale.x + scaleFactor,
            Player.transform.localScale.y + scaleFactor, 
            Player.transform.localScale.z + scaleFactor);

        //我这里设置的最小缩放到 0.3 倍 (根据个人项目调整) 
        if (scale.x > 0.3f && scale.y > 0.3f && scale.z > 0.3f)
        {
            Player.transform.localScale = scale;
        }

        //记住最新的触摸点,下次使用  
        oldTouch1 = newTouch1;
        oldTouch2 = newTouch2;

        //判断滑动方向
        TouchDirection();

    }
    //---------------判断是左滑右滑等----------------------
    void TouchDirection()
    {
        if (Input.touchCount<=0)
        {
            return;
        }

        if (Input.touchCount==1)
        {
            if (Input.GetTouch(0).phase==TouchPhase.Began)
            {
                beginPos = Input.GetTouch(0).deltaPosition;
            }
            if (Input.GetTouch(0).phase==TouchPhase.Ended && Input.GetTouch(0).phase!=TouchPhase.Canceled)
            {
                Vector2 pos = Input.GetTouch(0).deltaPosition;
                //判断滑动的方向(左右滑动还是上下滑动)

                if (Mathf.Abs(beginPos.x=pos.x)>Mathf.Abs(beginPos.y=pos.y))//左右滑动
                {
                    if (beginPos.x>pos.x)
                    {
                        Debug.Log("向左滑动");
                        Tips.text = "向左滑动";
                    }
                    else
                    {
                        Debug.Log("向右滑动");
                        Tips.text = "向右滑动";

                    }
                }
                else  //上下滑动
                {
                    if (beginPos.y > pos.y)
                    {
                        Debug.Log("向下滑动");
                        Tips.text = "向下滑动";

                    }
                    else
                    {
                        Debug.Log("向上滑动");
                        Tips.text = "向上滑动";

                    }
                }
            }
        }

    }
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Unity实现鼠标滑轮放大缩小图片,可以通过以下步骤实现: 1. 创建一个Image对象,并将其添加到Canvas。 2. 给Image对象添加一个Rect Transform组件,用于控制图片的位置和大小。 3. 给Image对象添加一个Event Trigger组件,并添加两个事件:OnScroll和OnDrag。 4. 在OnScroll事件,使用鼠标滑轮的delta值来缩放图片的大小。可以使用RectTransform组件的localScale属性来实现缩放。 5. 在OnDrag事件,使用鼠标的delta值来移动图片的位置。可以使用RectTransform组件的anchoredPosition属性来实现移动。 下面是一个示例代码: ``` using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ImageController : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IDragHandler, IScrollHandler { public Image image; public float zoomSpeed = 0.1f; public float moveSpeed = 1.0f; private bool isDragging = false; private Vector2 dragStartPosition; public void OnPointerEnter(PointerEventData eventData) { // 鼠标进入图片区域时,允许滑动和缩放图片 image.rectTransform.pivot = new Vector2(0.5f, 0.5f); image.rectTransform.localScale = Vector3.one; image.rectTransform.localPosition = Vector3.zero; } public void OnPointerExit(PointerEventData eventData) { // 鼠标离开图片区域时,还原图片位置和大小 image.rectTransform.pivot = new Vector2(0f, 1f); image.rectTransform.localScale = Vector3.one; image.rectTransform.localPosition = Vector3.zero; } public void OnDrag(PointerEventData eventData) { // 鼠标左键按住拖动时,移动图片位置 if (Input.GetMouseButton(0)) { if (!isDragging) { isDragging = true; dragStartPosition = eventData.position; } else { Vector2 delta = eventData.position - dragStartPosition; image.rectTransform.anchoredPosition += delta * moveSpeed; dragStartPosition = eventData.position; } } else { isDragging = false; } } public void OnScroll(PointerEventData eventData) { // 使用鼠标滚轮缩放图片大小 float scale = 1.0f + eventData.scrollDelta.y * zoomSpeed; image.rectTransform.localScale *= scale; } } ``` 将这个脚本组件添加到Image对象上,然后将Image对象的Image组件和RectTransform组件赋值给对应的变量,即可实现鼠标滑轮放大缩小图片,鼠标左键按住滑动拖动图片的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值