Unity 移動端(android) 移動 縮放 旋轉


首先判斷 兩次的位置大小      縮放代碼如下

   private  Vector2 oldops1;
   private  Vector2 oldops2;
    //比較兩次的位置,大小,來進行放大還是縮小
    bool isEnlargc(Vector2 op1, Vector2 op2, Vector2 np1, Vector2 np2)
    {
        float lcngth1 = Mathf.Sqrt((op1.x - op2.x) * (op1.x - op2.x) + (op1.y - op2.y) * (op1.y - op2.y));
        float lcngth2 = Mathf.Sqrt((np1.x - np2.x) * (np1.x - np2.x) + (np1.y - np2.y) * (np1.y - np2.y));
        if (lcngth1 < lcngth2)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
void Update(){
//判斷兩根手指在屏幕上移動並且不再UI上
  if (Input.touchCount >1 && !EventSystem.current.IsPointerOverGameObject())
        {
            if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
            {
                Vector2 tempos1 = Input.GetTouch(0).position;
                Vector2 tempos2 = Input.GetTouch(1).position;
                if (isEnlargc(oldops1, oldops2, tempos1, tempos2)) 
                {   //放大
                    float oldScale = lubansuoobj.transform.localPosition .z;
                    float newScale = oldScale +1.025f;
                    if (lubansuoobj.transform.localPosition.z <-18f)
                    {
                        lubansuoobj.transform.localPosition = new Vector3(0, 0, newScale);
                    }
                }
                else
                {
                    //縮小
                    float oldScale = lubansuoobj.transform.localPosition.z;
                    float newScale = oldScale -1.025f;
                    if (lubansuoobj.transform.localPosition.z >-40f)
                    {
                        lubansuoobj.transform.localPosition = new Vector3(0, 0, newScale);
                    }
                }
                oldops1 = tempos1;
                oldops2 = tempos2;
            }
        }
}

移動 旋轉代碼如下

  float x, y;
    float Speed = 5;
    void Update()
    {
        //當前是否有任何鼠標按鈕或鍵被按住
        if (Input.anyKey)
        {
            //當只有一次觸摸
            if (Input.touchCount == 1)
            {
                //觸摸類型,滑動
                if (Input.GetTouch(0).phase == TouchPhase.Moved)
                {
                    //移動拖拽
                    //獲取x軸
                    x = Input.GetAxis("Mouse X") * Speed;
                    //獲取y軸
                    y = Input.GetAxis("Mouse Y") * Speed;
                    this.transform.Translate(-x, y, 0);//*Time.deltaTime


                    //旋轉
                    ////獲取x軸
                    //x = Input.GetAxis("Mouse X") * xSpeed;
                    ////獲取y軸
                    //y = Input.GetAxis("Mouse Y") * ySpeed;
                    ////對模型進行上下左右旋轉   Space.World世界坐標系,Space.Self 自身坐標系
                    //model.transform.Rotate(Vector3.up * x * Time.deltaTime, Space.World);
                    //model.transform.Rotate(Vector3.left * -y * Time.deltaTime, Space.World);
                }
              
            }
}
}

加入利用插值旋轉,(親測可用)

  float x, y;
void Start(){
 x = transform.eulerAngles.y;
  y = transform.eulerAngles.x;
}
void Update()
    {
        // 判斷觸摸數量為單點觸摸  
        if (Input.touchCount == 1)
        {
            if (Input.GetTouch(0).phase == TouchPhase.Moved)
            {
                x += Input.GetAxis("Mouse X") * 5* 0.02f ;
                y -= Input.GetAxis("Mouse Y") * 5* 0.02f ;
          y = ClampAngle(y, -90, 90);
                    Quaternion rotion = Quaternion.Euler(y, x, 0);
                    transform.rotation = Quaternion.Lerp(transform.rotation, rotion, Time.deltaTime * 3);

            }
        }
}
//角度限制
    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -90)
            angle = -90;
        if (angle > 90)
            angle = 90;
        return Mathf.Clamp(angle, min, max);

    }

 

這次就是這么多,以后會繼續補充,感謝大家觀看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM