You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot Engine中如何创建碰撞墙阻止玩家走出屏幕?

解决Godot中玩家可走出屏幕的碰撞墙设置问题

正确的屏幕边界碰撞墙设置流程

  • 新建StaticBody2D节点(可命名为ScreenBounds),作为静态碰撞体载体——它能和玩家的CharacterBody2D(Godot 4)/KinematicBody2D(Godot 3)自动产生物理碰撞交互。
  • 给StaticBody2D添加CollisionShape2D子节点。
  • 在CollisionShape2D的Inspector面板中,将Shape属性设置为RectangleShape2D。

适配屏幕分辨率的两种方式

  1. 固定分辨率场景
    直接设置RectangleShape2D的Size为你的游戏分辨率(例如1920x1080),再把StaticBody2D的Position设为屏幕中心(例如960, 540)。

  2. 自适应分辨率场景
    给ScreenBounds挂载以下脚本,让边界自动适配窗口大小:

func _ready():
    var viewport_rect = get_viewport().get_visible_rect()
    var boundary_shape = RectangleShape2D.new()
    boundary_shape.size = viewport_rect.size
    $CollisionShape2D.shape = boundary_shape
    position = viewport_rect.position + viewport_rect.size / 2

玩家节点的必要检查

  • 确保玩家节点是CharacterBody2D/KinematicBody2D,且自身带有正确的碰撞形状(CollisionShape2D或CollisionPolygon2D)。
  • 玩家移动必须使用物理移动方法:Godot 4用move_and_slide(),Godot 3用move_and_collide(),不能直接修改position——只有物理移动方法才会触发碰撞检测。

常见问题排查

  • 检查碰撞层与掩码:StaticBody2D的Collision Layer必须和玩家节点的Collision Mask有重叠(默认均为1,保持默认即可),否则碰撞不会被检测到。
  • CollisionShape2D的Visible属性仅用于显示碰撞形状,不影响碰撞功能,但开启它更方便调试边界位置是否正确。
  • 若误用Area2D作为边界,需要通过body_entered信号手动修正玩家位置,不如StaticBody2D的物理碰撞省心,优先推荐后者。

内容的提问来源于stack exchange,提问作者c0ff334dd1ct

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:27:17