我的 Godot 2d 游戏包含充当平台和墙壁的线条,它们被定义为包含起点和终点的segmentShape2D:
var staticBody2D = new StaticBody2D();
Vector2 a = new Vector2((float)foothold.X1, (float)foothold.Y1);
Vector2 b = new Vector2((float)foothold.X2, (float)foothold.Y2);
Vector2 direction = (b - a).Normalized();
var collisionShape = new CollisionShape2D();
collisionShape.OneWayCollision = true;
var segmentShape = new SegmentShape2D();
segmentShape.A = a;
segmentShape.B = b;
collisionShape.Shape = segmentShape;
staticBody2D.SetMeta("direction", direction.Rotated(Mathf.RadToDeg(90f)));
staticBody2D.SetMeta("layer", layer);
staticBody2D.AddChild(collisionShape);
AddChild(staticBody2D);
对于平台,我的角色表现正常,它可以从下面跳转到当前平台。但对于墙壁,我的角色从左右两侧穿过,因为 oneWayCollision 只检测来自向上或向下的碰撞。
所以我的问题是如何根据戈多中的方向实现单向碰撞墙或斜坡?
由于角色不应该进入地面(我想),你可以使用 CollisionPolygone2D 代替。