#pragma strict
var perspectiveZoomSpeed:float= .5f;  
var orthoZoomSpeed:float= .5f;
function Start () {

}

// Update is called once per frame
function Update ()
{
         //Pinch To Zoom
         if(Input.touchCount == 2)
         {
                var touchZero:Touch = Input.GetTouch(0);
                var touchOne:Touch = Input.GetTouch(1);
                
                var touchZeroPrevPos:Vector2 = touchZero.position - touchZero.deltaPosition;
                var touchOnePrevPos:Vector2 = touchZero.position - touchZero.deltaPosition;
                
                var prevTouchDeltaMag:float = (touchZeroPrevPos - touchOnePrevPos).magnitude;
                var touchDetlaMag:float = (touchZero.position - touchOne.position).magnitude;
                
                var deltaMagnitudeDiff:float = prevTouchDeltaMag - touchDetlaMag;
                
                if(camera.isOrthoGraphic)
                {
                        camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;
                        camera.orthographicSize = Mathf.Max(camera.orthographicSize,.1f);
                        
                }
                else
                {
                        camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;
                        camera.fieldOfView = Mathf.Clamp(camera.fieldOfView,.1f,179.9f);
                }
                
         }

}
------------------------------------
分享: 7Headlines facebook PLURK twitter
 

大家一定再思考 Unity 製作 平板或手機的時候

如何要撰寫判斷左滑,右滑..等

兩指判斷放大縮小..等

想要達到切水果,快跑遊戲必熟悉的一項

以下是小編撰寫,範例程式 :
///////////////////////////
  using UnityEngine;
  using System.Collections;
  public class gDefine {
        
    public enum Direction{
        Up,
        Down,
        Left,
        Right
    }
  }

  public class Example_Hand : MonoBehaviour {

    //紀錄手指觸碰位置
    private Vector2 m_screenPos = new Vector2 ();

    void Update () {

  #if UNITY_EDITOR || UNITY_STANDALONE
        MouseInput();   // 滑鼠偵測
  #elif UNITY_ANDROID
        MobileInput();  // 觸碰偵測
  #endif
    }

    void MouseInput()
    {
        if (Input.GetMouseButtonDown(0))
        {
            m_screenPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        }

        if(Input.GetMouseButtonUp(0))
        {
            Vector2 pos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);

            gDefine.Direction mDirection = HandDirection(m_screenPos, pos);
            Debug.Log("mDirection: " + mDirection.ToString());
        }
    }
        
    void MobileInput ()
    {
        if (Input.touchCount <= 0)
            return;
            
        //1個手指觸碰螢幕
        if (Input.touchCount == 1) {
                
            //開始觸碰
            if (Input.touches [0].phase == TouchPhase.Began) {
                Debug.Log("Began");
                //紀錄觸碰位置
                m_screenPos = Input.touches [0].position;
                    
                //手指移動
            } else if (Input.touches [0].phase == TouchPhase.Moved) {
                Debug.Log("Moved");
                //移動攝影機
                //Camera.main.transform.Translate (new Vector3 (-Input.touches [0].deltaPosition.x * Time.deltaTime, -Input.touches [0].deltaPosition.y * Time.deltaTime, 0));
            }
                
                
            //手指離開螢幕
            if (Input.touches [0].phase == TouchPhase.Ended || Input.touches [0].phase == TouchPhase.Canceled) {
                Debug.Log("Ended");
                Vector2 pos = Input.touches [0].position;

                gDefine.Direction mDirection = HandDirection(m_screenPos, pos);
                    Debug.Log("mDirection: " + mDirection.ToString());
            }
                //攝影機縮放,如果1個手指以上觸碰螢幕
        } else if (Input.touchCount > 1) {
                
            //記錄兩個手指位置
            Vector2 finger1 = new Vector2 ();
            Vector2 finger2 = new Vector2 ();
                
            //記錄兩個手指移動距離
            Vector2 move1 = new Vector2 ();
            Vector2 move2 = new Vector2 ();
                
            //是否是小於2點觸碰
            for (int i=0; i<2; i++) {
                UnityEngine.Touch touch = UnityEngine.Input.touches [i];
                    
                if (touch.phase == TouchPhase.Ended)
                    break;
                    
                if (touch.phase == TouchPhase.Moved) {
                    //每次都重置
                    float move = 0;
                        
                    //觸碰一點
                    if (i == 0) {
                        finger1 = touch.position;
                        move1 = touch.deltaPosition;
                        //另一點
                    } else {
                        finger2 = touch.position;
                        move2 = touch.deltaPosition;
                            
                        //取最大X
                        if (finger1.x > finger2.x) {
                            move = move1.x;
                        } else {
                            move = move2.x;
                        }
                            
                        //取最大Y,並與取出的X累加
                        if (finger1.y > finger2.y) {
                            move += move1.y;
                        } else {
                            move += move2.y;
                        }
                            
                        //當兩指距離越遠,Z位置加的越多,相反之
                        Camera.main.transform.Translate (0, 0, move * Time.deltaTime);
                    }
                }
            }//end for
        }//end else if
    }//end void

    gDefine.Direction HandDirection(Vector2 StartPos, Vector2 EndPos)
    {
        gDefine.Direction mDirection;

        //手指水平移動
        if (Mathf.Abs (StartPos.x - EndPos.x) > Mathf.Abs (StartPos.y - EndPos.y)) {
            if (StartPos.x > EndPos.x) {
                //手指向左滑動
                mDirection = gDefine.Direction.Left;
            } else {
                //手指向右滑動
                mDirection = gDefine.Direction.Right;
            }
        } else {
            if (m_screenPos.y > EndPos.y) {
                //手指向下滑動
                mDirection = gDefine.Direction.Down;
            } else {
                //手指向上滑動
                mDirection = gDefine.Direction.Up;
            }
        }
        return mDirection;
    }
  -------------------------------------------------

arrow
arrow
    全站熱搜

    lkj2000168 發表在 痞客邦 留言(0) 人氣()