如何用捏缩放游戏对象?

Posted

技术标签:

【中文标题】如何用捏缩放游戏对象?【英文标题】:How to scale a gameObject with pinch? 【发布时间】:2020-05-09 14:25:49 【问题描述】:

如何在 android/ios 中用捏(2 根手指)缩放游戏对象(立方体)?如果夹点在扩大,那么立方体的比例 (x, y, z) 会变大,如果夹点在缩小,那么立方体的比例会变小。

我有一个用于鼠标拖动的脚本,但只能缩放 2 轴(x,y)。

public class Drag : MonoBehaviour

    Vector3 lastMousePosition;
    float scaleSensitivity = 2f;
    void Update()
    
        if (Input.GetMouseButtonDown(0)) 
             lastMousePosition = Input.mousePosition;
         
         if (Input.GetMouseButton(0)) 
             transform.localScale += ((Input.mousePosition - lastMousePosition) * Time.deltaTime * scaleSensitivity);
             lastMousePosition = Input.mousePosition;
         
    


【问题讨论】:

看看 Input.Touches : docs.unity3d.com/ScriptReference/Input-touches.html 并使用差异 (Input.Touches[0] - Input.Touches[1]).magnitude,修复每一帧的差异。如果每帧都变大,则表示用户正在放大,否则如果它变小,则表示用户正在缩小。 【参考方案1】:

看看 Input.Touches : Input.Touches 并使用差异 (Input.Touches[0] - Input.Touches[1]).magnitude,修复每一帧的差异。如果每帧都变大,则表示用户正在放大,否则如果它变小,则表示用户正在缩小

float? _prevFrameDiff;

void Update()

    if (Input.touches.Length < 2)
    
        _prevFrameDiff = null;
        return;
    

    var diff = (Input.touches[0].position - Input.touches[1].position).magnitude;

    if (!_prevFrameDiff.HasValue)
    
        _prevFrameDiff = diff;
        return;
    
    else
    
        var scaleFactor = diff / _prevFrameDiff.Value;

        this.transform.localScale = Vector3.one * scaleFactor;
    

【讨论】:

嘿,谢谢,但不幸的是它没有记录触摸的最后位置。我该怎么做?

以上是关于如何用捏缩放游戏对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何用DELPHI对JPG等图像进行缩放?

如何限制将捏缩放图像移动到图像边框?

将视图背景设置为能够缩放的图像

使用 Android 内置的手势监听器和缩放监听器实现捏缩放和拖动

仅捏手势缩放从左上角缩放 UIImage

如何在 Flutter 小部件测试中执行缩放(捏缩放)多指手势?