unity實(shí)現(xiàn)多點(diǎn)觸控代碼
更新時(shí)間:2015年03月30日 11:28:27 投稿:hebedich
這篇文章主要介紹了unity實(shí)現(xiàn)多點(diǎn)觸控代碼,我最近在學(xué)習(xí)Unity游戲引擎。先從Unity平面開(kāi)始,本章介紹Unity 平面上的多點(diǎn)觸摸。有需要的小伙伴參考下。
這是我在論壇看到的,unity多點(diǎn)觸控。感覺(jué)還不錯(cuò),分享給大家
//用于綁定參照物對(duì)象 var target : Transform; //縮放系數(shù) var distance = 10.0; //左右滑動(dòng)移動(dòng)速度 var xSpeed = 250.0; var ySpeed = 120.0; //縮放限制系數(shù) var yMinLimit = -20; var yMaxLimit = 80; //攝像頭的位置 var x = 0.0; var y = 0.0; //記錄上一次手機(jī)觸摸位置判斷用戶是在左放大還是縮小手勢(shì) private var oldPosition1 : Vector2; private var oldPosition2 : Vector2; //初始化游戲信息設(shè)置 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 () { //判斷觸摸數(shù)量為單點(diǎn)觸摸 if(Input.touchCount == 1) { //觸摸類(lèi)型為移動(dòng)觸摸 if(Input.GetTouch(0).phase==TouchPhase.Moved) { //根據(jù)觸摸點(diǎn)計(jì)算X與Y位置 x += Input.GetAxis("Mouse X") * xSpeed * 0.02; y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02; } } //判斷觸摸數(shù)量為多點(diǎn)觸摸 if(Input.touchCount >1 ) { //前兩只手指觸摸類(lèi)型都為移動(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.5; } }else { //縮小洗漱返回18.5后不允許繼續(xù)縮小 //這里的數(shù)據(jù)是根據(jù)我項(xiàng)目中的模型而調(diào)節(jié)的,大家可以自己任意修改 if(distance < 18.5) { distance += 0.5; } } //備份上一次觸摸點(diǎn)的位置,用于對(duì)比 oldPosition1=tempPosition1; oldPosition2=tempPosition2; } } } //函數(shù)返回真為放大,返回假為縮小 function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean { //函數(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ī)的位置 function LateUpdate () { //target為我們綁定的箱子變量,縮放旋轉(zhuǎn)的參照物 if (target) { //重置攝像機(jī)的位置 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); }
以上所述就是本文的全部?jī)?nèi)容了,有需要的小伙伴可以參考下
您可能感興趣的文章:
相關(guān)文章
C#實(shí)現(xiàn)獲取一年中是第幾個(gè)星期的方法
這篇文章主要介紹了C#實(shí)現(xiàn)獲取一年中是第幾個(gè)星期的方法,比較實(shí)用的功能,需要的朋友可以參考下2014-08-08C# TreeView讀取數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例
這篇文章主要介紹了2013-12-12C#連接加密的Sqlite數(shù)據(jù)庫(kù)的方法
對(duì)數(shù)據(jù)加密分兩種,一種是對(duì)數(shù)據(jù)庫(kù)本身進(jìn)行加密,另一種是對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行加密,下面通過(guò)本文給大家介紹C#連接加密的Sqlite數(shù)據(jù)庫(kù)的方法,感興趣的朋友一起看看吧2017-08-08