Roblox:重現參考影片中的內容
使用者的標準是**「完全像影片一樣」**。他們拒絕憑空發明的效果或機制、生硬的動畫,以及片中沒有的花俏裝飾。此處的一切都讓你緊扣參考素材,並與之進行比對——而不是憑你的記憶。
工具:Roblox Studio MCP(execute_luau、search_asset、insert_asset、upload_image、screen_capture、start_stop_play、user_keyboard_input、user_mouse_input、get_console_output、multi_edit)、Blender MCP(execute_blender_code——影格提取與 VFX 製作)、PowerShell/Bash。
0. 基本規則
- 只重現影片中顯示的內容。不明確?多看幾幀;仍然不清楚?提問——不要用自己的想法填補空白。
- 紋理/圖片:不要自己繪製。優先使用 Creator Store。如果沒有相似的資源,則根據參考素材在 Blender 中製作該資源(§4),並告知使用者你這麼做了。
- 預設觸發方式為按鍵按下(若未指定則詢問是哪個按鍵)。
- 不得有未經要求的裝飾(旋轉、卡通翻轉)。使用者明確表示厭惡這些。
- 複製機制、感覺和效果——而非另一款遊戲的品牌、名稱、UI 美術或盜用資源,也不要克隆整個現有遊戲。如果被要求製作一款與其他遊戲完全相同的遊戲,請重現所示範的特定機制/效果並說明。
1. 提取並研究影格
- 透過 Blender 渲染影格(ffmpeg 通常不存在):將
scripts/extract_frames.py傳送給execute_blender_code,並設定VIDEO/OUT。它使用一個臨時場景,不會影響使用者的 .blend 檔案。在 Windows 上請保持OUT路徑簡短(MAX_PATH)。 scripts/contact_sheet.ps1 -Dir <OUT>→ 4×4 標籤工作表。讀取所有工作表,然後在每個剪接、撞擊、UI 變化和輸入處打開單個影格。對於快速機制,在你正在測量的時刻周圍使用STEP = 1。- 決定你要構建的內容:VFX/過場動畫、遊戲系統,或兩者兼有(大多數戰鬥動作都是兩者:一個決定發生什麼的系統 + 顯示它的 VFX)。
- 在構建之前編寫規格——這是之後你用來驗證的依據:
- 節拍表(VFX):每個節拍一行,包含時間(影格/fps)、鏡頭、每個效果(形狀、顏色、紋理、大小、壽命、數量)、每個角色的姿勢、後處理。
- 系統規格(機制):輸入、狀態和轉換、時間(前搖/判定/後搖/冷卻時間,以影格為單位)、距離和速度(根據約 5 格高的 R15 身體測量)、螢幕上顯示的數字、UI 及其動畫、其他玩家看到的內容。請參閱
references/systems.md。
2. 檢查場地
search_game_tree + 快速傾印 Lighting、StarterPlayer、ReplicatedStorage、ServerScriptService。重複使用使用者現有的框架(戰鬥模組、遠端、資料儲存、UI 套件),而不是建立平行的框架;配合他們的程式碼風格。
3. 來自 Creator Store 的資源
search_asset(範圍creator_store,priceFilter: free)每個元素使用 3–5 種措辭。視覺比較候選物件:scripts/asset_sheet.ps1建立一個帶標籤的縮圖工作表,以便在參考影格旁邊讀取。- Decal 資產 ID 不是圖片 ID:在使用於粒子/GUI 之前,使用
game:GetObjects("rbxassetid://"..id)[1].Texture(Edit datamodel)進行解析。 - 免費模型通常含有後門。 插入模型後,列出每個
LuaSourceContainer;只保留你需要的部分,並銷毀其餘部分。 - 真實化身作為假人/敵人:
Players:CreateHumanoidModelFromUserId(Players:GetUserIdFromNameAsync(name))可在 Edit 下使用。錨定 HRP,將腳放在地板上,除 Animate 外移除所有腳本。
4. 何時在 Blender 中建構 VFX
預設使用 Roblox 原生效果(粒子、光束、軌跡、零件、GUI)——成本低、可調整、即時渲染。當參考素材顯示原生效果無法良好近似的事物時,才使用 Blender:
| 參考素材顯示 | Blender 輸出 | 匯入 Roblox 方式 |
|---|---|---|
| 厚實的 3D 斬擊弧、扭曲螺旋、衝擊波穹頂、尖刺、有深度的地面裂縫 | 帶 UV 的網格(+漸層/噪點紋理) | 從匯出資料建立的 EditableMesh,或使用 3D Importer |
| 手繪/動畫風格的煙霧、火焰、爆炸、能量爆發、衝擊幀 | 渲染的翻頁動畫精靈表(透明 PNG) | upload_image → ParticleEmitter 翻頁動畫 / ImageLabel |
| 複雜紋理(噪點軌跡、漸層斜坡、漩渦貼圖) | 渲染的 PNG | upload_image → Beam/Trail/Texture |
閱讀 references/blender_vfx.md 了解管線(場景設定、翻頁動畫渲染 + 網格打包、網格匯出至 Luau、localhost 上傳、EditableMesh 建構器、在時間軸中為網格製作動畫)。
5. 建構
- VFX / 過場動畫:一個由時間軸驅動的客戶端 ModuleScript(事件、鏡頭拍攝、逐影格更新器、時間軸時間延遲、扭曲區域、暫停),附帶清理堆疊,以及施法者和目標的關鍵影格身體。複製
references/engine.md中的骨架。 - 系統:伺服器端權威——客戶端透過 RemoteEvent 發送意圖,伺服器驗證(冷卻時間、狀態、範圍、速率限制)並套用結果,客戶端渲染回饋。資料夾佈局和每個系統的配方在
references/systems.md中。 - 兩者兼有:伺服器決定命中/傷害/狀態並觸發客戶端;每個客戶端播放 VFX 模組。將時間保持在其中一個共享設定中,以便機制和視覺效果保持同步。
6. 感覺生動的動畫
靜態姿勢會被認為很「糟糕」。有效的方法:
- 關鍵影格軌跡,而非姿勢——每個角色數十個關鍵影格;每個關鍵影格 = 姿勢 + 覆蓋 + 進入它的緩動。
- 每次攻擊:預備動作 (Quad.In) → 打擊 (Exponential.Out,40–70 毫秒) → 超越 (Quad) → 穩定 (Sine.InOut)。每次擊中目標:後座力關鍵影格 + 衰減的震動脈衝。
- 每影格添加生命力:呼吸、所有關節的緩慢噪點漂移、命中震動、顫抖。
- 為目標賦予表現(驚嚇、後座力、踉蹌、倒地:膝蓋、手、側身)。除非剪輯中有,否則不要有翻筋斗。
- 將故事節拍與剪輯的剪接點匹配;詢問節奏並使用
TimeWarp區域來減慢部分段落。
7. 根據參考素材驗證
- 進行遊戲測試。時間軸:使用
PauseAt逐步執行,並在每個節拍處截圖,旁邊配上對應的參考影格。系統:使用user_keyboard_input/user_mouse_input驅動輸入,從Client和Server資料模型讀取狀態,並根據規格測量時間(os.clock)和距離——以數字為準,而不是感覺。 - 偵錯攝影機設定為
Enum.RenderPriority.Last.Value;暫停時清除粒子/禁用光束和 GUI 以便查看身體。 execute_luau在其自己的 VM 中執行:require會產生一個單獨的模組實例——觀察遊戲狀態(屬性、錨定、CameraType),而不是模組欄位。- 最後進行真實輸入,然後確認清理/恢復和乾淨的
get_console_output。
8. 注意事項
在開始建構之前,請閱讀 references/gotchas.md——不可見的 1 段光束、暗暈眩光、DepthOfField 模糊、Expo 與 Exponential、關節變換僅在 PreSimulation 中寫入時渲染、AnimationConstraint 骨架、身體大小縮放 + 地板夾制、地形水深、水面反射疊加、網路問題等。
9. 報告
每個節拍/機制現在的作用(附時間戳或按狀態)、使用了哪些資源(商店 ID、Blender 製作的資源及其上傳的 ID)、任何無法匹配的內容及原因、可調參數的位置(設定模組、Cutscene.Poses/Tracks、TimeWarp),以及提醒儲存場地(Ctrl+S)。