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