unity 多點觸控(放大,縮小),unity觸控
//用於綁定參照物對象 var target : Transform; //縮放係數 var distance = 10.0; //左右滑動移動速度 var xSpeed = 250.0; var ySpeed = 120.0; //縮放限制係數 var yMinLimit = -20; var yMaxLimit = 80; //網路攝影機的位置 var x = 0.0; var y = 0.0; //記錄上一次手機觸摸位置判斷使用者是在左放大還是縮小手勢 private var oldPosition1 : Vector2; private var oldPosition2 : Vector2; //初始化遊戲資訊設定 function Start () { var angles = transform.eulerAngles; x = angles.y; y = angles.x; // Make the rigid body not change rotation if (rigidbody) rigidbody.freezeRotation = true; } function Update () { //判斷觸摸數量為單點觸摸 if(Input.touchCount == 1) { //觸摸類型為移動觸摸 if(Input.GetTouch(0).phase==TouchPhase.Moved) { //根據觸摸點計算X與Y位置 x += Input.GetAxis("Mouse X") * xSpeed * 0.02; y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02; } } //判斷觸摸數量為多點觸摸 if(Input.touchCount >1 ) { //前兩隻手指觸摸類型都為移動觸摸 if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved) { //計算出當前兩點觸摸點的位置 var tempPosition1 = Input.GetTouch(0).position; var tempPosition2 = Input.GetTouch(1).position; //函數返回真為放大,返回假為縮小 if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2)) { //放大係數超過3以後不允許繼續放大 //這裡的資料是根據我項目中的模型而調節的,大家可以自己任意修改 if(distance > 3) { distance -= 0.5; } }else { //縮小洗漱返回18.5後不允許繼續縮小 //這裡的資料是根據我項目中的模型而調節的,大家可以自己任意修改 if(distance < 18.5) { distance += 0.5; } } //備份上一次觸摸點的位置,用於對比 oldPosition1=tempPosition1; oldPosition2=tempPosition2; } } } //函數返回真為放大,返回假為縮小 function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean { //函數傳入上一次觸摸兩點的位置與本次觸摸兩點的位置計算出使用者的手勢 var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y)); var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y)); if(leng1<leng2) { //放大手勢 return true; }else { //縮小手勢 return false; } } //Update方法一旦調用結束以後進入這裡算出重設攝像機的位置 function LateUpdate () { //target為我們綁定的箱子變數,縮放旋轉的參照物 if (target) { //重設攝像機的位置 y = ClampAngle(y, yMinLimit, yMaxLimit); var rotation = Quaternion.Euler(y, x, 0); var position = rotation * Vector3(0.0, 0.0, -distance) + target.position; transform.rotation = rotation; transform.position = position; } } static function ClampAngle (angle : float, min : float, max : float) { if (angle < -360) angle += 360; if (angle > 360) angle -= 360; return Mathf.Clamp (angle, min, max); }
unity3d 多點觸控
910297670加我qq告訴你
android想要利用多點觸控放大或者縮小一個view該怎實現
放大縮小view方法有很多。
1.animation,在xml裡寫齣動畫,讓他放大,然後不恢複。
2.如果是個imageview(圖片),可以將他的一個屬性設定為這樣android:scaleType="matrix",然後在代碼裡操作這個矩陣。獲得放大縮小的效果。
3.如果是自訂的view,在canvas裡放大縮小就很容易了
多點觸控,就是重寫onTouchEvent(MotionEvent event){}