如何实现左侧或右侧墙壁的单向碰撞?

问题描述 投票:0回答:1

我的 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 只检测来自向上或向下的碰撞。 enter image description here

所以我的问题是如何根据戈多中的方向实现单向碰撞墙或斜坡?

c# game-development game-physics godot godot4
1个回答
0
投票

由于角色不应该进入地面(我想),你可以使用 CollisionPolygone2D 代替。

© www.soinside.com 2019 - 2024. All rights reserved.