如何设计家具摆放预览以防止碰撞和错位
对于装修类游戏,家具预览应在玩家确认前回答三个问题:物品会落在哪里、该位置是否允许摆放,以及如果旋转或取消会发生什么?使用物品的实时“虚影”,验证其在当前位置和旋转角度下的占地范围,并在摆放受阻时给出明确原因。在确认前保持预览可见,并在取消时让玩家返回房间而不摆放任何物品。本指南重点面向游戏开发者,介绍如何设计这一摆放交互。
预览应该传达什么信息?
应将预览视为最终家具的临时版本,而不仅仅是一个光标标记。它应当展示物品的尺寸、朝向、与地面或支撑表面的接触点,以及摆放状态。Google 的 ARCore 设计指南建议,通过物体或其阴影将目标点可视化,并在检测到表面时提供及时的反馈。虽然 AR 摆放与装修类游戏面临不同的限制,但原则是一致的:玩家在最终确定之前,需要看清物品将要摆放在哪里。Google 的 ARCore 内容摆放指南
一个实用的预览具有三种清晰易懂的状态:有效(valid)、无效(invalid)和未解析(unresolved)。有效表示拟定的摆放符合游戏规则。无效表示违反了已知规则,例如与其他物品重叠或表面无支撑。未解析表示游戏尚无法确定有效目标,例如在摆放地面家具时光标悬停在墙壁上。不要仅仅因为碰撞检测未发现异常就将未解析状态显示为有效;“未检测到碰撞”和“可以摆放在这里”并不是同一种结果。
有效性应如何区别于碰撞检测?
碰撞检测只是摆放有效性的一部分。根据游戏规则,一张沙发可能没有与另一件物体相交,但仍可能处于房间之外、悬浮在地面上方、朝向不可用的方向,或者阻挡了门口。应为每个家具类别将有效性定义为一个约束检查清单:允许的支撑表面、房间边界、碰撞、朝向限制,以及游戏强制执行的任何特定的通行或交互间距。
将硬性规则与偏好设置区分开来。发生碰撞或表面无支撑可能会阻止确认。如果游戏允许,通道狭窄可能只是一个轻微的警告。这种区分可以避免让装饰性建议看起来像是严重的错误,并让玩家明白他们可以选择接受哪些条件。关于家具布局系统的研究也表明,物品摆放是由多重布局规则引导的,而非仅仅取决于几何形状;斯坦福大学发布的系统结合了室内设计准则,并邀请参与者对建议的布局进行了评估。这支持了在考量时超越单一碰撞维度的做法,尽管它并没有规定特定的游戏界面。斯坦福大学交互式家具布局研究
技术检测应与预览经过变换后的占地范围(footprint)相匹配。Unreal Engine 的 overlap API 说明了在指定位置和旋转角度下检查所提供的碰撞体形状,而 Unity 6 的 Physics.OverlapBox 则接收中心点、半长宽(half extents)、朝向、图层蒙版和触发器行为。这些 API 说明了为什么旋转变化必须触发针对旋转后形状的检测。引擎行为和 API 细节会因版本而异;请参考游戏实际发布所使用的引擎版本和碰撞设置文档。Unreal Engine overlap API 和 Unity 6 Physics.OverlapBox
有效和无效位置应该如何呈现?
将外观与冗余提示结合使用。例如,改变虚影的色调和轮廓,并显示简短的状态,如“可摆放”或“与桌子重叠”。仅靠颜色可能难以区分,尤其是在不同材质的地面或光照条件下。在两种状态下都要保持家具的轮廓可见,以便玩家仍能判断其位置和朝向。如果是特定的碰撞体导致了阻挡,将其标出有助于纠正;但当一条通俗易懂的原因已经足够时,避免用所有技术细节把预览界面塞得满满当当。
让状态随着家具移动实时更新,而不是仅仅在按下确认按钮后才更新。确认时,仅在当前状态有效的情况下才摆放家具,并给予简短的操作成功反馈。如果无效,则保持预览处于激活状态并说明原因,以便玩家进行调整而无需重新开始交互。这是一项设计建议,源于防止意外摆放的目标,以及 Google 关于清晰传达错误并提供可行恢复路径的指南。Google 的错误状态指南
避免依赖单一阈值在不解释原因的情况下直接将整个虚影在有效和无效之间切换。例如,如果一把椅子离墙太近,玩家应该看到实际的占地范围,并收到诸如“超出房间”或“与墙壁重叠”等具体提示。如果该规则仅是一项偏好建议,可将其标记为警告,并在符合游戏设计的情况下依然允许确认。
旋转应该提供怎样的反馈?
在旋转时,让预览持续跟随玩家的输入,并在新的角度下重新验证有效性。即使物品的中心几乎没有移动,其占地范围也可能会扫过附近的物体。旋转控制还应使变化的朝向和幅度可预测:可见的旋转提示、阶梯式旋转的明确增量,或连续旋转指示器,都可以传达出输入操作将产生什么效果。
旋转后,同时更新虚影和所有朝向提示。朝向地面的小箭头、正面标记或可见的正面边缘,都能让玩家更容易分辨沙发或书桌将朝向哪个方向。如果家具会吸附到网格或固定增量,应在预览中显示吸附后的结果,而不仅仅是未吸附的光标位置。这样玩家才能准确判断最终确认时的实际摆放效果。
取消与恢复应该如何运作?
在抓取或移动物品时,应通过一致且明显的控件提供取消选项。取消操作应移除虚影并返回到之前的房间状态,而不是悄无声息地摆放、删除或移动家具。如果玩家一开始是在移动一件已经摆好的物品,取消操作应将其恢复到原来的位置;这是一条推荐的交互规则,并非任何引擎 API 所保证的行为。
确认和取消操作需要有截然不同的文本标签或图标,并且在玩家做出选择之前预览应一直保持显示。当摆放受阻时,显示下一步的操作提示(如移动、旋转或取消),而不是让玩家凭空猜测。Google 的摆放指南同样建议提供清晰的错误反馈和解决路径,同时指出用户在使用拖拽手势前可能需要指导。对于游戏而言,应在拾取家具时就显示相关控件,而不仅是在单独的帮助界面中展示。Google 的手动摆放指南
实例演示:摆放一个书架
想象一下玩家将书架放置在墙边的场景。预览首先找到地面目标并将书架吸附到墙壁上。由于其占地范围与一张边桌重叠,虚影显示为无效状态,并提示“与边桌重叠”。玩家对其进行旋转;系统以新的角度重新计算占地范围,此时预览能够完美契合且无重叠。朝向正面的标记确认了哪一面将朝向房间内。玩家看到“可摆放”,点击确认,物品便出现在虚影所显示的位置。
如果书架反而有一部分落在了房间边界之外,即使不存在物体碰撞,游戏也应识别出该限制。如果无法确定目标表面,应显示中立的未解析提示,如“请放置在地面上”,并且不允许确认。这些提示信息仅为示意示例,并非关于 Metlivi 功能的断言或经过衡量的可用性结果。
实用的设计检查清单
在实现之前,按物品类型写下摆放规则,并确定哪些是阻断项(blocker),哪些是警告项(warning)。然后核实预览所使用的占地范围、旋转、吸附和支撑点是否与摆放后的物体一致。在墙边、角落、狭窄缝隙处以及旋转后检查交互表现;确认虚影不会把最终摆放会拒绝的位置验证为有效。最后,测试完整的流程闭环:拾取、移动、旋转、从无效位置恢复、摆放以及取消——包括在重新调整已有家具位置时执行取消。
决策规则很简单:显示准确的拟定结果,区分有效、无效和未解析状态,解释最关键的阻碍原因,并提供一条清晰可预测的路径来进行旋转、调整、确认或取消。这样才能使摆放预览成为切实可行的决策辅助工具,而不仅仅是最后一秒才出现的警告。
