关于物体推拉的操作方法

您好:

目前,我正在使用执行操作“按下物体”来创建推动箱子的动作。由于推动箱子的动作有时能成功、有时失败,表现不稳定,因此想请教相关的设置方法。

我最希望实现的效果是:当箱子上下堆叠时,推动最下方的箱子时,上方的箱子也能随之同时移动。

附件中提供了示例项目。

设置如下:按 Shift 键跳跃;持续按住针对箱子的输入键以推动箱子。

  • 单个箱子:可以推动
  • 上下堆叠的两个箱子:有时能推动,有时不能推动(从左侧可以推动,但从右侧推动时可能会中途停止,甚至完全无法推动)
  • 上下堆叠的三个箱子:无法推动

testproject_2026-08-17.zip (1.8 MB)

1 个赞

Push Object(推离物体)并非接触式推送,而是范围效果。该动作会从执行该动作的物体向外投射一个形状,位于该形状内且符合目标物体过滤条件的每个物体都会受到推力。不会产生连锁反应,因此被推动的箱子不会带动其上方的箱子,每个箱子都必须位于形状范围内。

默认的矩形大小为 10 x 10,即玩家正前方的一小块区域。这只能覆盖一个箱子,根据你精确的 Y 轴位置,可能会覆盖第二个箱子的一部分,而完全漏掉第三个箱子。

关于左右方向的差异,请查看形状方向类型(Shape Direction Type)。默认设置为“设定方向角度”(Set Direction Angle)为 0,这是一个固定的世界方向,无论玩家面向哪个方向。尝试改为“相同物体方向”(Same Object Direction),并在效果设置(Effect Setting)中将推/拉效果类型(Push Pull Effect Type)也改为相同设置,否则形状会跟随你的朝向,但力的作用方向仍沿固定角度。

要使箱子堆一起移动,请将矩形的高度调整到足以覆盖所有三个箱子,并将目标物体(Target Object)设置为“组”(Group),并选择你的箱子组。在接触物体(Contact Object)模式下,只有实际与玩家接触的箱子才符合条件。我还建议关闭距离效果(Distance Effect),因为近距离速率(Near Rate)和远距离速率(Far Rate)会根据距离缩放力量,导致上方的箱子滞后于下方的箱子。

2 个赞

谢谢。
我修改了您建议的设置并进行了测试,但未能成功。
1段:正常运行。
2段:第1段正常,但第2段会提前前进。
3段:第1段不动,第2段及以上会提前前进。
请问是否还有其他需要设置的选项,或者我的设置是否有误?

■当前设置
执行动作:推/拉对象

・推的对象(箱子)组

■动作
testmovie

我下载了项目文件,但在我这边似乎无法复现。我还需要做其他操作吗?

由于最初附带的测试项目是修改前的版本,请查看以下测试项目。
此项目已反映上述粘贴图片中的设置。
谢谢。
testproject_2026-08-19.zip (1.8 MB)

我想告诉你,我已经报告了你发现的这个 bug。同时,我正在开发一个自定义操作,它可能会帮助你改善未来的推送/拉取行为。等它准备好后,我会发布:

2 个赞

明白了,感谢您的配合。
也感谢您提供自定义操作,我们很期待它的发布。

这是推送/拉取替换功能的早期版本,你可以据此开始使用。这还不是正式的发布帖,完整的说明文档会在稍后发布。

需要两个文件:
BazPushPullAction.gd (50.8 KB)
BazIsPushedCondition.gd (5.0 KB)

该动作是对原生“推送/拉取物体”功能的替代。它不再将速度输入到移动管线中(这会导致堆叠物体被静默冻结),而是通过正确的碰撞检测直接移动目标物体,使其在碰到墙壁时干净利落地停止,并且当有物体站在上面时也不会归零。

模式下拉菜单是主要选项:

接触推送 (Contact Push) 是经典的感觉。面向方向上接触你的任何物体都会被推开。不需要矩形区域。

区域推送 (Area Push) 会将你定义的矩形区域内的所有物体推开(矩形大小 + 区域偏移)。矩形会随你的朝向旋转或镜像。适合用于法术击退等效果。

区域拉取 (Area Pull) 会将同一矩形区域内的所有物体向你拉取。将其视为一种能力而非抓取。区域内的任何物体都会被吸入,并停止在你的边缘处。

关于其他设置的快速说明:将可推动的物体放入一个组,并将“目标组 (Target Group)”设置为该组。推送速度 (Push Speed) 的单位是编辑器中的像素/秒。堆叠减速率 (Stacked Slow Rate) 和链式减速率 (Chain Slow Rate) 控制每个堆叠骑手和每行额外方块保留的速度比例(100 表示无减速,链式减速率为 0 时则呈现经典的仅推动一个方块的感觉)。最大推送链 (Max Push Chain) 是一个可选的类似推箱子游戏的硬性上限。距离效应 (Distance Effect) 为区域模式添加了近/远衰减效果。

该条件用于标记动作离开所推送的物体,因此它仅对此动作做出反应,而不对其他动作做出反应。将其放在被推送物体的过渡状态上,它会在该物体被推送时触发(或者仅在物体实际移动时触发,有一个“检查类型 (Check Type)”选项)。你可以按推送与拉取以及方向进行过滤。

在设置过程中开启“调试可视化 (Debug Visualize)”,它会绘制检测区域并标记命中的物体,让你清楚地看到动作正在执行的操作。

请告诉我使用情况,我会将任何你遇到的问题整合到正式发布的帖子中。

2 个赞

感谢您的合作以及支持。
我这边简单测试了一下。不过,我并未对所有设置值进行测试,敬请谅解。

附上已确认的测试项目。按 Z 键也可以执行 PULL 动作。
■ 测试项目
testproject_2026-08-22.zip (1.9 MB)

以下是我注意到的一些问题,请确认。

① 同时推动多个对象时,对象之间会出现间隙
testmovie_sukima

② 在“Contact Push”(接触推动)时,承载的对象也会移动(这是预期行为吗?)
testmovie_contact

以下是将 BOX 对象的“Stop on Slope”(在斜坡上停止)设置为“开启”时的动作。
虽然不清楚上述设置产生了何种影响,但将其设置为“关闭”时似乎能正常运行。

③ 推动两层以上的对象时,对象有时会发生错位
S_testmovie_zureru

④ 推动三层及以上叠加的对象时,有时会在中途停止移动(是否与间隙有关?)
S_testmovie_ugokanakunaru

⑤ 拉动对象时,对象会发生错位
S_testmovie_pull

感谢你的深入测试!我会尽力修复这些问题。

2 个赞