日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放

發布時間:2024/9/30 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前幾篇文章介紹了很多Unity3D引擎自身的一些問題, 今天我們在回到IOS設備上討論一些觸摸屏幕手勢,本章的目標是通過觸摸iPhone屏幕手勢 實現模型左右的旋轉,與模型的縮放。

大家想一想模型的旋轉,實際上是鏡頭的旋轉。模型的縮放實際上是鏡頭Z軸方向的坐標。那么實現本章的內容只需要控制鏡頭的位置方可實現。

我們在游戲場景中創建一些簡單的模型做為參照物,插一句 “大家有誰知道 . FBX 的模型那里可以免費找到,我想在博文中加點游戲模型讓場景更好看一些,可是苦于找不到有點郁悶,用公司的模型來寫博文有覺得有點不合適”哇咔咔 ,如果有知道的哥們 不妨告訴我喔。啦啦啦。?

我們創建一個簡單的游戲平面, 然后平面中放一個箱子做為旋轉縮放的參照物。如下圖所示,選中攝像機,給攝像機添加一個腳本名稱為Move. 腳本中有一個參數?Target,它的作用是設置攝像頭旋轉移動參照物,這里把一個箱子賦值給了 Target,那么左右滑動屏幕會發現箱子在旋轉,兩手縮放屏幕會發現箱子在放大與縮小。

我們看看Move這條腳本,說明一下幾個重要的 :

這些方法都是系統自己調用的方法

function Start () : 游戲啟動以后只調用一次,可用于腳本的初始化操作,

function Update ():Start()方法調用結束以后每一幀都會調用,可以在這里更新游戲邏輯。

function LateUpdate (): Start()方法調用結束以后每一幀都會調用,但是它是在 Update()調用完后調用。

Move.js完整代碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 //用于綁定參照物對象 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); }

在Untiy3D 中運行用鼠標手勢點擊上看不到任何效果的,必需在iPhone真機上才可以觸摸感應到效果喔 . 嘻嘻~
OK 接下來將Unity3D 導出成Xcode項目,導出的方法有誰還不會??? 我的第一篇文章有說明噢。哇咔咔~~ 然后運行項目只能在真機上運行哦。。 看看我在iPhone 上的截圖。 觸摸iPhone屏幕鏡頭旋轉與縮放以后的效果,這個圖確實有點不太好截,我一會把項目的源代碼工程下載地址貼上來,方便大家閱讀與學習,哇咔咔~~ 鏡頭任意的旋轉與縮放,還不錯噢,大家快點來學習Unity3D游戲開發吧,哇咔咔~~

最后歡迎各位盆友可以和MOMO一起討論Unity3D游戲開發,哇咔咔~~~ 附上工程的下載地址,文件名稱是zoom.unitypackage,下載完畢的盆友們雙擊就可以自動在Unity3D 下打開它啦。然后導出成iPhone項目就可以運行了。

今天回家裝個windows 7 最近對wp7的游戲開發有點興趣哦~ 哦也~回家鉆研一下~哇咔咔
下載地址:http://vdisk.weibo.com/s/abssL
  • 本文固定鏈接:?http://www.xuanyusong.com/archives/512
  • 轉載請注明:?雨松MOMO?2012年05月01日?于?雨松MOMO程序研究院?發表
width="250" height="239" frameborder="0" scrolling="no" src="http://widget.weibo.com/relationship/bulkfollow.php?language=zh_cn&uids=2332920021,2470126495&wide=1&color=C2D9F2,FFFFFF,0082CB,666666&showtitle=1&showinfo=1&sense=0&verified=1&count=2&refer=http%3A%2F%2Fwww.xuanyusong.com%2Farchives%2F512&dpc=1" style="margin: 0px; padding: 0px; font-family: inherit;">

MOMO與MO嫂提醒您:親,如果您覺得本文不錯,快快將這篇文章分享出去吧 。另外請點擊網站頂部彩色廣告或者捐贈支持本站發展,謝謝!

總結

以上是生活随笔為你收集整理的Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。