Apple Developer onepage/WWDC26
#WWDC26#RealityKit#ScriptGraph#Games18:53

用 ScriptGraph 把遊戲互動從程式碼拉進 Reality Composer Pro 3

這場 session 示範如何在 Reality Composer Pro 3 裡用節點式事件邏輯做出一個 visionOS 小遊戲:拖曳松鼠的堅果、加入物理感、讓角色反應,最後把 SwiftUI 對話泡泡接回場景。

// 一句話結論

Apple 想讓互動原型、手感調整與部分 gameplay logic 不必每次回到 Xcode;ScriptGraph 變成設計師與工程師共同調整 RealityKit 遊戲體驗的視覺層。

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

這支影片其實在拆四個創作摩擦

原型速度

互動想法不該卡在 build loop

ScriptGraph 讓創作者用事件節點、資料節點與 set nodes 直接驅動 Entity / Component 狀態,並在 Reality Composer Pro 3 的 viewport 或 Vision Pro preview 裡即時試手感。

手感調整

參數要可以邊玩邊調

影片用 public input variable 調整 dragSpeed,並說明 override 如何讓同一個 ScriptGraph 在不同 entity 上保有不同數值。

邏輯複用

視覺節點也需要工程化

當 graph 開始變複雜,影片不是把線越拉越多,而是用 Subgraph 與 Prototyped Subgraph 把常用邏輯封裝成可重用節點。

跨層整合

no-code 不是排斥 Swift

ScriptGraph 可以送 custom scene event 給 Swift,SwiftUI attachment 再把 speech bubble 放回 Entity 上。價值在於用事件邊界協作。

Implementation flow

從一個可拖曳物件長成一段 gameplay

1

先讓物件可被互動系統看見

Nut entity 加上 Input Target、Collision 與 Hover Effect,讓 gaze、pinch/drag 與 hover feedback 有明確命中區域。

2

用 On Drag 事件驅動 Transform

第一版把 On Drag 的 scene location 接到 Set Transform,快速證明拖曳邏輯可行。

3

把手感參數公開到 component 上

透過 input variable 與 override,設計者可以在同一份 graph 邏輯下替不同 entity 微調速度或阻尼。

4

從直接位移改成物理力

加入 Physics Body、Add Force、drag delta、重力與 damping 控制,讓拖曳變得能拋、能落下,也更像真的物體。

5

用事件讓角色與 UI 反應

Nut graph 發送 custom event,Squirrel graph 轉頭與改材質;最後用 scene event 讓 SwiftUI speech bubble 顯示角色台詞。

ScriptGraph 的核心模型是 event-driven component editing

影片把 ScriptGraph 定義成 Reality Composer Pro 的 node-based visual scripting。它不是完整取代 RealityKit 程式碼,而是讓互動邏輯從「事件觸發」開始,讀取事件資料,再透過 set nodes 改 Entity、Transform、PhysicsBodyComponent、Material parameter 等狀態。

導入時要先問:哪些互動需要快速試手感?哪些邏輯適合由設計者在場景編輯器調整?哪些仍應留在 Swift / RealityKit 系統層維護?

適合放進 ScriptGraph拖曳、點擊、簡單狀態反應、動畫觸發、材質切換、角色反應、原型階段的 gameplay feel。
不該全塞進 ScriptGraph長期資料模型、跨場景狀態、網路同步、複雜 AI、需要版本化測試的核心系統邏輯。
Entity setup 是前置條件Input Target、Collision、Hover Effect、Physics Body 等 component 決定 graph 能收到什麼事件、能改什麼狀態。
Preview 是產品價值能在 Reality Composer Pro 甚至 Vision Pro 上試互動,讓「手感」回到創作現場。

視覺 scripting 仍需要抽象邊界

影片進到進階技巧時,最重要的訊號是 Subgraph 與 Prototyped Subgraph。當 graph 開始包含「檢查 bool 是否變化」這類常用邏輯,如果不封裝,視覺 scripting 會很快變成難讀、難 review、難複用的線團。

Custom Event 是設計層與程式層的契約

Nut 被拖曳時,ScriptGraph 發出 nutIsDragged custom event,Squirrel 的 graph 接收位置資料並驅動轉向。到 SwiftUI 對話泡泡時,ScriptGraph 送出 squirrelTalk scene event,Swift 端 subscribe event 並更新 attachment。

事件名稱、payload 欄位與觸發時機要被當成 API 設計。當設計者可以新增事件,工程師也要能 review 它是否穩定、是否會被多次觸發、是否需要節流或狀態同步。

風險與遷移注意事項

Graph 可讀性會隨原型成功快速惡化原型一旦變成 production path,就要整理 subgraph、命名、事件與參數。
物理拖曳要測不同裝置與空間尺度drag speed、gravity、damping、collision target 在 Mac preview 和 Vision Pro 體感可能不同。
SwiftUI attachment 仍是 app code 責任資料生命週期、取消訂閱、狀態同步與 accessibility 仍要由 Swift 層管理。
事件 payload 要避免隱性 couplingnutPosition、sayThis 這類欄位要有穩定型別與 fallback。

來源

主要來源為 Apple Developer 官方影片頁、官方 transcript、章節與 code snippet;YouTube 影片頁用於 iframe 與發布 metadata。官方頁:Design no-code games with Reality Composer Pro 3 - WWDC26。YouTube:WWDC26: Design no-code games with Reality Composer Pro 3 | Apple。

// TL;DR