讓遊戲觸控好玩:把 手把映射 改成行動裝置互動設計
這場 session 示範如何用 Touch Controller framework 把已有 Game Controller 邏輯搬到 iPhone / iPad,並用 adaptive layout、safe areas、dynamic controls、fullscreen touch zones 與 gesture redesign 讓操作真正適合觸控。
好的觸控移植不是把手把按鈕一比一放到螢幕上,而是保留既有輸入語意,重新設計可見性、位置、手勢與回饋,讓玩家用兩根拇指也能順暢遊玩。
這支影片其實在拆四個移植難題
Touch Controller 以 GCController 身分進入遊戲
如果遊戲已經支援 Game Controller 或鍵鼠,Touch Controller 可接到同一套 polling / value-changed handler,不必重寫整個 gameplay input layer。
九個 anchor 與 safe areas 決定控制能不能按
控制元件要維持實體可按尺寸,避開 Dynamic Island、Home indicator、圓角與主要遊戲區,並隨 iPhone / iPad 螢幕形狀調整。
觸控 UI 應該可變、可消失、可表達狀態
按鈕 icon 要代表實際 action;不可用或不相關的操作應移除或停用,像 pickup、QTE、power wheel 都只在需要時出現。
複雜手把組合要改成少手指流程
touchpad、fullscreen collider、tilt magnitude 與 hold-drag-release 可把奔跑、鏡頭、QTE、瞄準釋放改成適合觸控的單手勢或雙拇指操作。
從手把支援走到好用觸控的流程
先把既有輸入抽象對齊 GCController
Touch Controller 啟用後會以 GCController 形式提供 input state,能沿用 game controller 的 polling 或 handler。
在 UIView 傳入 touches,在 Metal renderer 畫控制
UIKit 的 touchesBegan / Moved / Ended 要轉給 touch controller;Metal 端呼叫 render API 顯示控制元件。
用 descriptor 建立按鈕、搖桿與 touchpad
每個 control 以 descriptor 設 label、anchor、offset、visual contents、collider shape,再加入 TCTouchController。
把一比一手把映射改成情境化 controls
換 icon、隱藏 thumbsticks、只在附近有道具時顯示 pickup、把 power wheel 變成直接可點的 touch controls。
針對高負荷操作重設手勢
奔跑用 thumbstick tilt magnitude,鏡頭用 right-side relative touchpad,瞄準與釋放用 hold + drag + release。
重點 1:Touch Controller 的價值是沿用既有 gameplay input
Touch Controller framework 建在 Game Controller framework 之上。啟用後,它會像一個 GCController,因此遊戲可以用原本的 controller polling 或 value-changed handler 讀取狀態。這對已經支援手把或鍵鼠的 Mac / iPad / iPhone game port 很重要。
實作上仍需要兩個橋接:UIView 要把 touchesBegan、touchesMoved、touchesEnded 交給 touch controller;Metal renderer 要把 touch controls render 到畫面上。
重點 2:Flexible layout 是「能按」與「不擋畫面」的共同答案
Touch Controller 提供九個 anchor points。你可以把相關 controls grouping 到同一個 section,讓它們在不同裝置尺寸下維持一致大小與距離。fullscreen game 還必須把 safeAreaInsets 加到 offset,避開圓角、Dynamic Island 與 Home indicator。
影片的設計判斷很清楚:不要把 controls 放在角色、主要 gameplay area、移動或鏡頭輸入預期區域;常用動作放在兩側拇指容易碰到的區域,較少用的 menu buttons 放在上方。
重點 3:觸控按鈕應該是動態 UI,不是固定硬體複製品
螢幕按鈕的優勢是可以改變圖示、顯示狀態與消失。影片示範把 button B 從手把字母換成 strike / flame / water 等實際 action icon,讓玩家不用背按鍵;不相關 controls 則應該 hidden 或 disabled。
重點 4:鏡頭、奔跑與瞄準要從「多按鍵」改成「少手指」
直接把右搖桿映射到觸控,容易造成過度旋轉或遲滯。影片建議用 TCTouchpad,設定 label 為 rightThumbstick、colliderShape 為 rightSide,並使用 relative values,讓右半螢幕都能做相機手勢。
奔跑也不該要求玩家同時按住搖桿按鈕和移動。影片以 left thumbstick 的 tilt magnitude 判斷一般移動或 sprint;瞄準釋放則改成 button B hold + drag aim + release fire,避免玩家在忙碌戰鬥中使用超過兩根手指。
風險與遷移注意事項
來源
主要來源為 Apple Developer 官方影片頁、官方 transcript、章節與 YouTube metadata。官方頁:Make your game great with touch - WWDC26。YouTube:WWDC26: Make your game great with touch | Apple。
- 01Touch Controller 可沿用 GCController gameplay input,但仍要在 UIKit 與 Metal 端完成觸控與渲染橋接。
- 02layout 要用 anchors、safe areas 與拇指區域設計,避免遮擋角色與主要遊戲區。
- 03觸控 controls 應根據情境改 icon、隱藏、移除或自動 dismiss。
- 04奔跑、鏡頭、QTE、瞄準釋放都要重新設計成少手指流程,而不是複製手把按鍵組合。