如何設計能防止碰撞與誤置的家具擺放預覽
在佈置裝飾類遊戲中,家具預覽應在玩家確認前回答三個問題:物品將落在何處、該位置是否允許擺放,以及旋轉或取消時會發生什麼?利用物品的即時「半透明虛影(ghost)」、在其目前位置與旋轉角度下驗證佔地面積(footprint),並在無法擺放時顯示明確原因。在確認前保持預覽可見,並確保取消操作能讓玩家返回房間而不放置任何物品。本指南專為遊戲開發者探討如何設計這類擺放互動。
預覽應該傳達哪些資訊?
請將預覽視為最終家具的暫存版本,而不僅僅是一個游標標記。它應該顯示物品的尺寸、朝向、與地面或支撐面的接觸點,以及擺放狀態。Google 的 ARCore 設計指南建議使用物件或其陰影將目標落點視覺化,並在偵測到平面時及時提供回饋。雖然 AR 擺放與裝飾遊戲的限制不同,但原則是共通的:玩家在確定放置前,需要看清物品將擺在哪裡。參考 Google 的 ARCore 內容擺放指南。
實用的預覽具備三種清晰易辨的狀態:有效(valid)、無效(invalid)與未定(unresolved)。有效表示預計擺放位置符合遊戲規則。無效表示違反了已知規則,例如與其他物品重疊或處於無支撐的表面。未定表示遊戲尚無法確定有效的目標位置,可能是因為擺放地面家具時游標正懸停在牆壁上。切勿僅因為碰撞偵測未發現異常就將未定狀態顯示為有效;「未偵測到碰撞」與「可在此處擺放」並不是同一種結果。
有效性檢查與碰撞偵測應有何不同?
碰撞僅僅是擺放有效性的一部分。一張沙發可能沒有與其他物件交錯,但根據遊戲規則,它可能超出了房間範圍、懸浮在地面之上、朝向無法使用的方向,或阻擋了門口。應將有效性定義為每個家具類別的約束條件清單:允許的支撐面、房間邊界、碰撞、朝向限制,以及遊戲強制要求的任何預留通行或互動空間。
將硬性規則與偏好建議明確區分開來。碰撞或缺乏支撐面可能會阻止玩家確認擺放;而在遊戲允許的情況下,走道狹窄可能僅作為軟性警告。這種區分可避免裝飾性建議看起來像嚴重的擺放失敗,並讓玩家明白哪些情況是他們可以自行決定接受的。針對家具佈局系統的研究也表明,空間佈置應遵循多種佈局規則,而非單純考量幾何形狀;史丹佛大學發表的系統納入了室內設計準則,並與受試者一起評估了建議的佈局。這支持了擺放需考量碰撞以外因素的做法,儘管它並未規定特定的遊戲介面形式。參考史丹佛大學互動式家具佈局研究。
技術檢驗必須與預覽變換後的佔地面積相符。Unreal Engine 的重疊(overlap)API 說明了在指定位置與旋轉角度下檢查所提供的碰撞形狀,而 Unity 6 的 Physics.OverlapBox 則接受中心點、半長寬高(half extents)、朝向、圖層遮罩(layer mask)與觸發器行為。這些 API 闡明了為何旋轉角度的改變必須觸發針對旋轉後形狀的檢查。引擎行為與 API 細節會因版本而異;請務必參考遊戲實際採用的引擎版本與碰撞設定文件。參考 Unreal Engine 重疊 API 與 Unity 6 Physics.OverlapBox。
有效與無效位置應該呈現什麼視覺效果?
將外觀變化與額外提示搭配使用。例如,改變虛影的色調與外框輪廓,並顯示簡短狀態,如「可放置」或「與桌子重疊」。單憑顏色有時難以辨別,特別是在不同的地板材質或光照條件下。在兩種狀態下都應保持家具的輪廓清晰可見,以便玩家仍能判斷其位置與旋轉角度。如果擺放受阻是由特定碰撞體引起,指出該物體有助於修正;當一句簡明易懂的說明就足夠時,請避免讓預覽充斥過多技術細節。
讓狀態隨著家具的移動即時更新,而非只在按下確認按鈕後才更新。在確認時,只有在當前狀態有效的情況下才放置家具,並給出操作成功的簡短提示反饋。若無效,則保持預覽處於啟用狀態並說明原因,讓玩家無需重啟互動流程即可進行調整。這項設計建議源自於防止誤置的目標,以及 Google 關於清楚傳達錯誤並提供可行恢復路徑的指引。參考 Google 錯誤狀態指引。
避免依賴單一門檻直接在有效與無效之間切換整個虛影,卻不解釋原因。舉例來說,若椅子太靠近牆壁,玩家應能看到實際的佔地範圍,並收到具體提示,如「超出房間範圍」或「與牆壁重疊」。如果該規則只是一項偏好建議,可將其標記為警告,並在符合遊戲設計的前提下允許玩家確認擺放。
旋轉操作應提供什麼反饋?
在旋轉時,讓預覽持續跟隨玩家的操作輸入,並在新的角度下重新進行有效性驗證。即使物品中心幾乎沒有移動,其佔地範圍仍可能旋轉掃入鄰近的物件中。旋轉控制也應讓變化的方向與幅度可預期:可見的旋轉提示、步進式旋轉的明確增量,或連續旋轉指示器,都能清楚傳達該輸入會產生的效果。
旋轉完成後,同步更新虛影與所有朝向提示。一個朝向地面的小箭頭、正面標記或明顯的前緣外觀,都能讓人更容易辨識沙發或書桌的正面朝向。若家具會貼齊(snap)網格或固定增量,應在預覽中顯示貼齊後的結果,而非僅顯示未貼齊的游標位置。如此一來,玩家才能預先判斷最終真正確認擺放時的效果。
取消與恢復操作該如何運作?
在移動或擺放物品期間,應提供一致且顯眼的控制方式以供取消。取消操作應移除虛影並恢復先前的房間狀態,而不應在靜默中放置、刪除或移動家具。若玩家的操作是移動一件已放置的物品,取消操作應將其還原至原始位置;這是建議採用的互動規則,而非任何引擎 API 能自動保證的預設行為。
確認與取消動作需要截然不同的文字標籤或圖示,且預覽應持續顯示,直到玩家做出選擇。當擺放受阻時,顯示下一步的微型指引——移動、旋轉或取消——而不是讓玩家自行猜測。Google 的擺放指南同樣建議提供清晰的錯誤反饋與解決途徑,同時指出使用者在執行拖曳手勢前可能需要說明提示。對於遊戲而言,應在拿起家具時立即顯示相關控制提示,而非只放在獨立的說明畫面上。參考 Google 手動擺放指南。
實際範例:擺放書架
想像一位玩家正靠牆擺放一個書架。預覽首先找到地面目標,並將書架靠齊牆壁。它的佔地範圍與一張邊桌重疊,因此虛影顯示為無效狀態並提示「與邊桌重疊」。玩家旋轉書架;系統以新角度重新計算佔地面積,預覽顯示空間足夠且不再重疊。朝向標記確認了哪一面將面向房間內部。玩家看到「可放置」提示,點擊確認,書架便出現在虛影所示的位置。
如果書架有一部分落在了房間邊界之外,即使未與任何物件碰撞,遊戲也應指出該限制條件。若無法判定目標表面,應顯示中性的未定提示(如「請放置於地面」)且不允許確認。這些提示訊息僅為示意範例,並非對 Metlivi 功能的具體主張或實測可用性結果。
實用設計檢查清單
在實作之前,依物品類型寫下擺放規則,並決定哪些屬於阻擋條件、哪些僅為警告。接著確認預覽所使用的佔地面積、旋轉、貼齊與支撐點均與最終放置的物件完全一致。檢查牆邊、角落、狹窄間隙處以及旋轉後的互動狀況;確認虛影不會將最終擺放會拒絕的位置標記為有效。最後,測試整個流程閉環:拿起、移動、旋轉、從無效位置恢復、放置以及取消——包括重新調整現有家具位置時的取消操作。
決策準則十分明確:呈現精確的預計結果、區分有效、無效與未定狀態、說明最關鍵的阻擋原因,並保留可預期的旋轉、調整、確認或取消路徑。這能讓擺放預覽成為切實可用的決策輔助工具,而非最後一秒才彈出的警告。
