IOS触摸屏手势控制镜头旋转与缩放
生活随笔
收集整理的這篇文章主要介紹了
IOS触摸屏手势控制镜头旋转与缩放
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using UnityEngine;
using System.Collections;public class MobileCamera : MonoBehaviour
{//用于綁定參照物對象public Transform target;//縮放系數public float distance = 10.0f;//左右滑動移動速度public float xSpeed = 250.0f;public float ySpeed = 120.0f;//縮放限制系數public float yMinLimit = -20;public float yMaxLimit = 80;//攝像頭的位置public float x = 0.0f;public float y = 0.0f;//記錄上一次手機觸摸位置判斷用戶是在左放大還是縮小手勢private Vector2 oldPosition1;private Vector2 oldPosition2;//初始化游戲信息設置void Start(){var angles = transform.eulerAngles;x = angles.y;y = angles.x;// Make the rigid body not change rotationif (rigidbody)rigidbody.freezeRotation = true;}void Update(){//判斷觸摸數量為單點觸摸if (Input.touchCount == 1){//觸摸類型為移動觸摸if (Input.GetTouch(0).phase == TouchPhase.Moved){//根據觸摸點計算X與Y位置x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;}}//判斷觸摸數量為多點觸摸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.5f;}}else{//縮小洗漱返回18.5后不允許繼續縮小//這里的數據是根據我項目中的模型而調節的,大家可以自己任意修改if (distance < 18.5){distance += 0.5f;}}//備份上一次觸摸點的位置,用于對比oldPosition1 = tempPosition1;oldPosition2 = tempPosition2;}}}//函數返回真為放大,返回假為縮小bool isEnlarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2){//函數傳入上一次觸摸兩點的位置與本次觸摸兩點的位置計算出用戶的手勢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方法一旦調用結束以后進入這里算出重置攝像機的位置void LateUpdate(){//target為我們綁定的箱子變量,縮放旋轉的參照物if (target){//重置攝像機的位置y = ClampAngle(y, yMinLimit, yMaxLimit);var rotation = Quaternion.Euler(y, x, 0);var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;transform.rotation = rotation;transform.position = position;}}float ClampAngle(float angle, float min, float max){if (angle < -360)angle += 360;if (angle > 360)angle -= 360;return Mathf.Clamp(angle, min, max);}
}
原文地址點擊這里
總結
以上是生活随笔為你收集整理的IOS触摸屏手势控制镜头旋转与缩放的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Emil发送
- 下一篇: 大数据未来应用7大趋势 人工智能只占其一