添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
面冷心慈的松球  ·  父约束 (Parent ...·  2 周前    · 
憨厚的松树  ·  iOS Player 设置 - Other ...·  2 周前    · 
愉快的夕阳  ·  In Unity, ...·  1 周前    · 
热情的柿子  ·  使用GC.GetTotalMemory(fa ...·  1 周前    · 
正直的桔子  ·  帝舵錶Tudor ...·  3 月前    · 
谦和的灌汤包  ·  Tom Jack - Blackstone·  4 月前    · 
追风的机器猫  ·  南通兴东国际机场·  4 月前    · 
0
2

More than 1 year has passed since last update.

【Unity】OnDrag関数でピンチ処理を作る

Posted at

using System;
using UnityEngine;
using UnityEngine.EventSystems;
public class PinchControl : MonoBehaviour, IDragHandler, IBeginDragHandler
    public event Action<float> OnPinchDelta = delegate { };
    private float prePinchInterval = float.NegativeInfinity;
    public void OnBeginDrag(PointerEventData data)
        prePinchInterval = float.NegativeInfinity;
    public void OnDrag(PointerEventData data)
        if (Input.touchCount < 2)
            prePinchInterval = float.NegativeInfinity;
            var interval = Vector2.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position);
            if (float.IsInfinity(prePinchInterval)) prePinchInterval = interval;
            OnPinchDelta(interval / prePinchInterval);
            prePinchInterval = interval;

OnDrag関数で2つのタッチ座標から距離を取得し、前フレームとの差を使用します。

前フレームとの差はだいたい 0.9 ~ 1.1 になるので使うスクリプトで乗算しましょう。

using UnityEngine;
public class Sample : MonoBehaviour
    [SerializeField] private PinchControl pinch;
    public void OnEnable()
        pinch.OnPinchDelta += OnPinch;
    public void OnDisable()
        pinch.OnPinchDelta -= OnPinch;
    private void OnPinch(float scale)
        transform.localScale *= scale;

モバイル端末にビルドして動作確認をすると、Raycastに反応するuGUIでピンチイン・ピンチアウトができるようになります。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2