標籤:
轉自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111735.html
一個手指來統治他們
但是等等,你還沒有完全完成!
如果你玩遊戲有一會,你會注意到有些奇怪的事情。你可以通過一個手指來移動方塊,但是當你用兩個手指離開它相同的距離方塊也可以被移動。這是什麼回事呢?
從你的MoveSimple指令碼中回憶起這行:
var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition); |
它建立了一條從網路攝影機到觸摸點的射線。觸摸點用Input.mousePosition來表示。當你在iOS裝置上啟動並執行時候,Input.mousePosition是作為所有當前觸摸點平均位置來計算的。放置你的手指,若平均值落在角色上,就會讓角色移動!
你應該修正這點來避免困擾使用者。你可以使用Unity中可以使用的觸摸相關函數來監測觸摸事件,並且找到一個更加精確的觸摸位置。
開啟你的MoveSimple指令碼。在檔案的最上面(其他變數所在的位置)添加一個標誌,來指示你可以使用觸摸輸入:
private var isTouchDevice : boolean = false; |
你這樣做了後,你就可以測試回合在iOS和Unity編輯器上。如果你只打算在iOS上測試,那麼你可以跳過觸摸檢查的邏輯,然後簡單的使用觸摸相關的函數。
下一步添加一個Awake()函數,來完成一個運行時的檢查,探知遊戲是否運行在一個iOS環境下。這個Awake()函數僅僅被調用一次,就是當遊戲載入的時候:
function Awake() { if (Application.platform == RuntimePlatform.IPhonePlayer) isTouchDevice = true; else isTouchDevice = false; } |
Application.platform返回遊戲正在啟動並執行平台。RuntimePlatform.IPhonePlayer指示遊戲正運行在iOS上。
最後,根據下面修改你的Update()函數來處理觸摸輸入:
function Update () { var clickDetected : boolean; var touchPosition : Vector3; // Detect click and calculate touch position if (isTouchDevice) { clickDetected = (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began); touchPosition = Input.GetTouch(0).position; } else { clickDetected = (Input.GetMouseButtonDown(0)); touchPosition = Input.mousePosition; } // Detect clicks if (clickDetected) { // Check if the GameObject is clicked by casting a // Ray from the main camera to the touched position. var ray : Ray = Camera.main.ScreenPointToRay (touchPosition); var hit : RaycastHit; ... |
儲存你的修改。
你正在使用兩個新的變數,clickDetected和touchPosition,來監測點擊和儲存點擊的位置。如果在iOS上運行,你通過檢查觸摸是在開始狀態來判斷點擊。然後根據首個觸摸來計算點擊的位置。如果你沒有運行在iOS上,邏輯和之前的一樣。
在重新構建項目之前,關閉Xcode項目。現在重新在Unity中的Build Settings對話方塊裡構建。如果出現帶有一個關於構建的檔案夾已經存在的警告,選擇Replace.
當Xcode項目構建完成,開啟它,然後在你的iOS裝置上運行。核對你可以移動英勇的小方塊,而且讓你用兩個手指移動它的錯誤已經消失了。
向哪裡進發?
恭喜你已經完成學慣用Unity開發的基礎部分,和如何部署到iOS上!這裡有一些從項目開始到目前為止的所有的代碼下載: Unity Project, Xcode Project.
這份教程的下個部分,通過增強英勇的小方塊的移動和改善情境,你會構建這個非常簡單的遊戲。你也會做一些調試的工作!
在此期間,如果你有任何關於到目前位置你所做的問題或建議,請跳轉到論壇中的相關會話中!
Unity3D for iOS初級教程:Part 1/3(下)