Apple Developer onepage/WWDC26
#WWDC26#Games#TouchController#Metal2026-06-08 · 24:23

讓遊戲觸控好玩:把 手把映射 改成行動裝置互動設計

這場 session 示範如何用 Touch Controller framework 把已有 Game Controller 邏輯搬到 iPhone / iPad,並用 adaptive layout、safe areas、dynamic controls、fullscreen touch zones 與 gesture redesign 讓操作真正適合觸控。

// 一句話結論

好的觸控移植不是把手把按鈕一比一放到螢幕上,而是保留既有輸入語意,重新設計可見性、位置、手勢與回饋,讓玩家用兩根拇指也能順暢遊玩。

Apple Developer · WWDC26 · Video ID: ye_iMRAvQ1cApple Developer 官方頁
Content map

這支影片其實在拆四個移植難題

輸入橋接

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、瞄準釋放改成適合觸控的單手勢或雙拇指操作。

Migration path

從手把支援走到好用觸控的流程

1

先把既有輸入抽象對齊 GCController

Touch Controller 啟用後會以 GCController 形式提供 input state,能沿用 game controller 的 polling 或 handler。

2

在 UIView 傳入 touches,在 Metal renderer 畫控制

UIKit 的 touchesBegan / Moved / Ended 要轉給 touch controller;Metal 端呼叫 render API 顯示控制元件。

3

用 descriptor 建立按鈕、搖桿與 touchpad

每個 control 以 descriptor 設 label、anchor、offset、visual contents、collider shape,再加入 TCTouchController。

4

把一比一手把映射改成情境化 controls

換 icon、隱藏 thumbsticks、只在附近有道具時顯示 pickup、把 power wheel 變成直接可點的 touch controls。

5

針對高負荷操作重設手勢

奔跑用 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 到畫面上。

label 對應既有手把語意例如 TCControlLabel.buttonB 可映射到 physical button B,讓原本處理 buttonB 的 gameplay logic 繼續工作。
descriptor 決定 control 的行為與外觀button、thumbstick、touchpad 都透過 descriptor 設定 label、anchor、offset、contents 與特定屬性。
Metal 整合是效能前提Touch Controller framework 與 Metal 整合,讓控制元件渲染不需要另外建立昂貴 overlay pipeline。
Game Porting Toolkit 是入口,不是終點把 Mac game 帶到 iOS 很快,但觸控操作仍需要重新設計,否則玩家只會看到擁擠的虛擬手把。

重點 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。

01
thumbstick 不用時隱藏
建立 thumbstick 時可設定 hidesWhenNotPressed,降低畫面長期遮擋。
02
pickup button 跟著互動物件走
pickup 是空間情境 action,顯示時要更新位置,不需要時從 touchController 移除。
03
power wheel 直接變成可點 controls
比起打開 overlay 再選擇,直接加入目前可用 power controls,並在幾秒未選後自動 dismiss。

重點 4:鏡頭、奔跑與瞄準要從「多按鍵」改成「少手指」

直接把右搖桿映射到觸控,容易造成過度旋轉或遲滯。影片建議用 TCTouchpad,設定 label 為 rightThumbstick、colliderShape 為 rightSide,並使用 relative values,讓右半螢幕都能做相機手勢。

奔跑也不該要求玩家同時按住搖桿按鈕和移動。影片以 left thumbstick 的 tilt magnitude 判斷一般移動或 sprint;瞄準釋放則改成 button B hold + drag aim + release fire,避免玩家在忙碌戰鬥中使用超過兩根手指。

風險與遷移注意事項

不要把手把 UI 原樣搬上螢幕一比一 mapping 會擁擠、遮擋、需要多手指,通常只適合作為第一版 debug,不適合作為出貨體驗。
safe areas 不是只避開瀏海Dynamic Island、Home indicator、圓角與不同 iPad 視窗尺寸都會影響 tap target 可用性。
隱藏 controls 要同步 input statedisabled、removed、auto-dismiss 與 context icon 更新都要和 gameplay state 一致,避免玩家看得到但按不到,或按得到但看不到。
touchpad 與 fullscreen collider 要實機調校camera speed、relative values、collider shape、拇指範圍與誤觸邊界都需要在 iPhone / iPad 上測。

來源

主要來源為 Apple Developer 官方影片頁、官方 transcript、章節與 YouTube metadata。官方頁:Make your game great with touch - WWDC26。YouTube:WWDC26: Make your game great with touch | Apple。

// TL;DR