2017-05-17 11 views
0

以下は、タッチと動きを制御する私のマウスルックスクリプトです。今は複数のタッチを実装していますが、これは私がfinger-IDを使用したものですが、これを実装した後、理由は分かりません。デフラグによってslider_finger_id is = -1;touch.fingeridタッチが動作しない

if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) 
    { 
     if(Input.touchCount>0) 
     { 
      foreach (Touch touch in Input.touches) 
      { 
       if (touch_moving_tex.HitTest (touch.position)) 
        { 
        if(touch.phase == TouchPhase.Began && touch.phase == TouchPhase.Moved && slider_finger_id ==-1) 
         { 
         if (axes == RotationAxes.MouseXAndY) 
         { 
          sensitivityX = main_fov; 
          noisedeltaX += ((((Mathf.Cos (Time.time) * Random.Range (-10, 10)/5f) * noiseX) - noisedeltaX)/100) * Time.timeScale; 
          rotationXtemp += (touch.deltaPosition.x * sensitivityX * sensitivity) + (noisedeltaX); 

          //rotationXtemp += (Input.GetTouch (0).deltaPosition.x * sensitivityX * sensitivity) + (noisedeltaX); 

          rotationX += ((rotationXtemp - rotationX)/3) * Time.timeScale; 
          rotationX = Mathf.Clamp (rotationX, minimumX, maximumX); 

          sensitivityY = main_fov; 
          noisedeltaY += ((((Mathf.Sin (Time.time) * Random.Range (-10, 10)/5f) * noiseY) - noisedeltaY)/100) * Time.timeScale; 

          rotationYtemp += (touch.deltaPosition.y * sensitivityY * sensitivity) + (noisedeltaY); 
          rotationY += ((rotationYtemp - rotationY)/3) * Time.timeScale; 

          rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); 
          transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.Euler (new Vector3 (-rotationY, rotationX, 0)), 9f * Time.deltaTime); 

         } 
        } 
        slider_finger_id = touch.fingerId; 
        } 
       if (touch.phase == TouchPhase.Ended) 
       { 
        if (touch.fingerId == slider_finger_id) 
        { 
         slider_finger_id = -1; 
        } 
       } 
      } 
     } 
+0

は、私は私がslider_finger_idを使用していけない場合、それが動作することを一つのことに気づいた..しかし、私はそれが-1であると何がそれ –

+0

と 'setted slider_finger_id'さを変えていない何回もチェックされていますか?最初の反復で、値は何ですか?そして '-1'が有効かどうかはわかりません。 – matiaslauriti

答えて

0

実は、私はtouch.fingerIdを取得し、保存、および特定のtouch.fingerIdをチェックしていないので、私はこれを行うことにより、考え出していませんでした。以下はスクリプトであり、うまくいきます。 (私が下のコードで行っている主なことは、touchは最初のタッチのためだけに働きます。touch.fingerIdを保存してfingerIdで行います) 最初にタッチ数を確認しましたが、ゼロよりもグレートです。 foreachループではなく、私の欲求の欲求にあるかどうかをチェックし、最初のタッチfingerIdを取得してslider_finger_idに保存してから使用します。

if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) 
{ 
    if(Input.touchCount>0) 
    { 
     foreach (Touch touch in Input.touches) 
     { 
      if (touch_moving_tex.HitTest (touch.position)) 
       { 
       if(touch.phase == TouchPhase.Began && slider_finger_id == -1) 
        { 
        slider_finger_id = touch.fingerId; 
        } 

        if(touch.phase == TouchPhase.Moved) 
        { 
        if (axes == RotationAxes.MouseXAndY) 
        { 
         sensitivityX = main_fov; 
         noisedeltaX += ((((Mathf.Cos (Time.time) * Random.Range (-10, 10)/5f) * noiseX) - noisedeltaX)/100) * Time.timeScale; 
         rotationXtemp += (touch.deltaPosition.x * sensitivityX * sensitivity) + (noisedeltaX); 

         //rotationXtemp += (Input.GetTouch (0).deltaPosition.x * sensitivityX * sensitivity) + (noisedeltaX); 

         rotationX += ((rotationXtemp - rotationX)/3) * Time.timeScale; 
         rotationX = Mathf.Clamp (rotationX, minimumX, maximumX); 

         sensitivityY = main_fov; 
         noisedeltaY += ((((Mathf.Sin (Time.time) * Random.Range (-10, 10)/5f) * noiseY) - noisedeltaY)/100) * Time.timeScale; 

         rotationYtemp += (touch.deltaPosition.y * sensitivityY * sensitivity) + (noisedeltaY); 
         rotationY += ((rotationYtemp - rotationY)/3) * Time.timeScale; 

         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); 
         transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.Euler (new Vector3 (-rotationY, rotationX, 0)), 9f * Time.deltaTime); 

        } 
        } 
       } 
       slider_finger_id = touch.fingerId; 
       } 
      if (touch.phase == TouchPhase.Ended && slider_finger_id == touch.fingerId) 
      { 
        slider_finger_id = -1; 
      } 
     } 
    } 
関連する問題