UnityタッチプラグインTouchScript(2)

UnityタッチプラグインTouchScript発生たピットを通過し、この関数を再度作成する必要がありました。以前に発生したピットが多すぎたため、間違った方法で開いたのではないかと思ったので、もう一度作成することにしました。

まず、twoFingerTransformHandlerとmanualTransformedHandlerを組み合わせて1つのScreen TransformGestureメソッドにできることがわかりました。これは私が現在使用している方法です。

private void GestureHandler(object sender, System.EventArgs e)
    {
    
    
        if (m_isFirstRotation)
        {
    
    
            m_isFirstRotation = false;
            xDeg = Vector3.Angle(Vector3.right, mainCamera.transform.right);
            yDeg = Vector3.Angle(Vector3.up, mainCamera.transform.up);
        }

        xDeg += (screenGesture.DeltaPosition.x / Screen.width) * 200;
        yDeg -= (screenGesture.DeltaPosition.y / Screen.height) * 100;

        if (isMainView)
        {
    
    
            //Clamp the vertical axis for the orbit
            yDeg = Mathf.Clamp(yDeg, yMinLimit, yMaxLimit);

            mainCamera.transform.rotation = Quaternion.Euler(yDeg, xDeg, 0);
        }
        else
        {
    
    
            topCamera.localPosition = new Vector3(yDeg * -2500, defaultTopCameraPos.y, xDeg * -2500);
        }


        zoomValue += (screenGesture.DeltaScale * rate - 1f);
        FOVSlider.OnGestureZoomValueChanged(zoomValue);
        
    }

この方法には問題zoomValue += (screenGesture.DeltaScale * rate - 1f)があります。zoomValueはズームインまたはズームアウトのどちらであるかを表す0〜2の値です。この値を使用してズームインまたはズームアウトすると、導通の問題が発生します。少しだけズームインすることはできません。
また、ズーム時にレンズが動かないという問題もあります。

それから私はそれをこれに変えてそれを解決しました

private void GestureHandler(object sender, System.EventArgs e)
    {
    
    
            zoomValue = 0;
        if (screenGesture.DeltaScale != 1)
        {
    
    
            zoomValue += (screenGesture.DeltaScale * rate - 1f);
            FOVSlider.OnGestureZoomValueChanged(zoomValue);
            return;
        }

        if (m_isFirstRotation)
        {
    
    
            m_isFirstRotation = false;
            xDeg = Vector3.Angle(Vector3.right, mainCamera.transform.right);
            yDeg = Vector3.Angle(Vector3.up, mainCamera.transform.up);
        }
        
        xDeg += (screenGesture.DeltaPosition.x / Screen.width) * 200;
        yDeg -= (screenGesture.DeltaPosition.y / Screen.height) * 100;
        
        if (isMainView)
        {
    
    
            //Clamp the vertical axis for the orbit
            yDeg = Mathf.Clamp(yDeg, yMinLimit, yMaxLimit);

            mainCamera.transform.rotation = Quaternion.Euler(yDeg, xDeg, 0);
        }
        else
        {
    
    
            topCamera.localPosition = new Vector3(yDeg * -2500, defaultTopCameraPos.y, xDeg * -2500);
        }
    }

おすすめ

転載: blog.csdn.net/MikeW138/article/details/106187830
おすすめ