首先判斷 兩次的位置大小 縮放代碼如下
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); }
這次就是這么多,以后會繼續補充,感謝大家觀看
