UnityタッチプラグインTouchScriptが遭遇した落とし穴

前述のように、タッチスクリーンを使用するという要求を突然変更したため、現在のプロジェクトではTouchScriptを使用しています。TouchScriptの元の機能はプロジェクトを満足させることができません。
インターネットで見つかった教えのほとんどは、スクリプトで他の関数を書く方法を述べていなかったので、私はそれを段階的に研究することしかできません。

まず、TouchScriptを理解していない場合は、この大きな説明を読むことができます。
TouchScript中国語—ジェスチャー-アルコバレーノ-CSDNブログ

次に、デモのピットについて話させてください

カメラ

CameraControllerに問題があります。つまり、「1本の指」と「2本の指」が同じGestureを使用し、同じGameObjectに接続されているため、2番目のピット
両方のジェスチャはScreenTransformGestureです
が発生します。これら2つのScreenTransformGesturesをnoneに変更してから、再起動するとアタッチすると、ジェスチャの1つが無効であることがわかります。元々、アタッチすると、ゲームオブジェクト内の最初の適格なゲームオブジェクトが自動的に追加されます。したがって、最初のジェスチャをアタッチした後、追加する前に、最初に次のScreenTransformGesture Move upを追加する必要があります(消すのが賢明です)、バグがデバッグされて、それが原因かどうかわからないことがあります。これが原因で時間が無駄になることがよくあります。

twoFingerTransformHandlerという名前の応答メソッドでは、実際に実行されるのは「1本の指」操作ですが、manipulationTransformedHandler応答メソッドは「2本の指」操作です。スクリプトを変更したとき、これは長い間立ち往生していました。

以下は、デモスクリプトを変更した結果です。

以前は非常に簡単だと思っていたので、プロジェクトに直接入れて変更しましたが、失敗し続けました。今回はまずデモで変更してみますが、これは変更と操作の成功の結果です。
回転の制限を追加して、上限と下限が一定の角度内に収まるようにしました。
(後でプロジェクトに移動したときに、そのような回転によってレンズが水平に傾くことがわかりました。これは後の
です。)次に、ズームをレンズのFieldOfView値に変更しました。

マルチユーザー

これは実際には穴ではなく、後で記憶されないように書かれています。
マルチユーザーデモでは、RawImageを使用して画面を分割しませんが、CameraのDepthとViewPointのXYWHを使用して制御し、FullScreenレイヤーを追加するだけです。RawImageでも同じことを行う必要があります。RawImageを画面サイズに調整してから、Camera ViewPointのXYWHを変更してサイズを制御することをお勧めします。最後に、RawImageのRaycastターゲットをオフにすることを忘れないでください。

================================================= ==============
将来はとてもスムーズになると思いました、結果。

プロジェクトに移動した後、MoveGestureとRotateGestureは2つのレンズで使用され、ZoomGestureは両方のレンズで使用されるため、それらを分離する必要があります。今どのように行っても、同時に存在できるのはMoveGesture、RotateGesture、ZoomGestureのいずれか1つだけです。動作しますが、動作しません。
ここは最も厄介な場所です。ジェスチャは独立していて効果的です。また、独自のフレンドリージェスチャリストもありますが、どのように実行しても、毎回1つのジェスチャしか動作しません。自分
のコードロジックに問題があることに気づき、問題があると思って解決しました。解決しませんでした

また、RotateGestureは「1本指」で明確に操作され、「1本指」で効果がない場合もあります。このとき「2本指」操作は有効ですが、手を離すと「1本指」操作しか使えず、「2本指」操作は無効になります。 。
後で、なぜ大丈夫だったのかわかりません。

MoveGestureの効果は、垂直方向に上下に移動し、右クリックするだけで水平方向に移動することです。コード内で動的であるだけなので、問題
ManipulationGesture.DeltaScaleあると思います。

cam.transform.localPosition += Vector3.forward*(ManipulationGesture.DeltaScale - 1f)*ZoomSpeed;

================================================= =============
11分の19
さて、私はCameraController.csのコピーを作成し、私が欲しい機能を書き換える。最後に、2つのジェスチャーを同時に使用することができないという問題はありません。MoveGestureとRotateGestureを同じVoidに入れ、そうでない場合は区切ります。右クリック
に対する応答があるかどうかを確認する時間がないため、MoveGestureパーツは一時的に閉じられます

Zoom and Rotationはプロジェクトの元のロジックを使用し、おそらく問題を解決しました。

float xDeg;
float yDeg;
private void OneFingerHandler(object sender, System.EventArgs e)
{
    
    
    /*
    var rotation = Quaternion.Euler(OneFingerGesture.DeltaPosition.y/Screen.height*RotationSpeed,
        -OneFingerGesture.DeltaPosition.x/Screen.width*RotationSpeed,
        OneFingerGesture.DeltaRotation);
    pivot.localRotation *= rotation;
    */
    if(rotationFlag != 0)
    {
    
    
    	if (m_isFirstRotation)
    	{
    
    
    	    m_isFirstRotation = false;
    	    xDeg = Vector3.Angle(Vector3.right, pivot.right);
    	    yDeg = Vector3.Angle(Vector3.up, pivot.up);
    	}

    	xDeg += (OneFingerGesture.DeltaPosition.x / Screen.width) * RotationSpeed;
    	yDeg -= (OneFingerGesture.DeltaPosition.y / Screen.height) * RotationSpeed / 2;

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

    	pivot.rotation = Quaternion.Euler(yDeg, xDeg, 0);
    }
    else
    {
    
    
    	//Zoom Gesture
    }
}
private void Update()
{
    
    
    if (Input.mouseScrollDelta.y != 0 && !Input.GetMouseButton(0) && !Input.GetMouseButton(1))
    {
    
    
        m_slider.value += Input.mouseScrollDelta.y;
        OnSliderValueChanged(m_slider.value);
    }
}

private void TwoFingerHandler(object sender, System.EventArgs e)
{
    
    
    m_slider.value += (TwoFingerGesture.DeltaScale - 1f) * ZoomSpeed;
    OnSliderValueChanged(m_slider.value);
}

public void OnSliderValueChanged(float value)
{
    
    
    m_fieldOfView =
        (value / 3) * (m_maxFieldOfView - m_minFieldOfView) + m_minFieldOfView;

    cam.fieldOfView = m_fieldOfView;
    IBMessenger.Broadcast(IBStrings.IB_STRING_FIELD_OF_VIEW_CHANGED);

ビルドが出た後、別の問題が見つかりました。
標準レイヤーに参加していなかったため、他のUGUI(ボタン、スライダーなど)をクリックできなかったため、追加してから使用できます。

ここに写真の説明を挿入

このようにして、あなたは終わりを迎えることができます
ヾ( ̄▽ ̄)Bye〜Bye〜

おすすめ

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