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);
}
}