Unity:如何为玩家在墙上找到一个空洞?
Unity: How to find a empty hole in a wall for player?
我正在尝试为平台游戏找出简单的自定义 2D 物理。目前我正在使用光线投射来计算玩家和地图之间的碰撞。但是使用光线投射有一些问题。例如,如果玩家正在下落(向下速度有点高),则它无法捡起墙上的洞,因为它由于向下移动太远而无法被检测为空 space.
一个解决方案是移动到基于图块的系统而不是使用光线投射,但我最好不要这样做。
所以我想知道是否有某种解决方案可以找出墙上的空洞,即使是小边缘的洞也不会对性能产生巨大影响。
高质量绘制插图,假设向左速度:
Physics2D.BoxCast
是我解决这个问题的方法。它会按照您的预期进行,而不是计算一条射线,就好像一个完整的盒子正在穿越距离。
用法与光线投射非常相似。示例:
public Collider2D mainCollider;
public Vector2 velocity;
void Update() {
Vector2 origin = new Vector2(transform.position.x, transform.position.y);
Vector2 size = mainCollider.bounds.size;
Vector2 direction = velocity * Time.deltaTime;
float maxDist = velocity.magnitude;
var hit = Physics2D.BoxCast(origin, size, 0, direction, maxDepth);
if (hit == null) {
transform.position += direction;
} else {
transform.position += direction.normalized * hit.distance;
}
}
如果盒子不是你的口味,还有 Physics2D.CapsuleCast
and Physics2D.CircleCast
。
我正在尝试为平台游戏找出简单的自定义 2D 物理。目前我正在使用光线投射来计算玩家和地图之间的碰撞。但是使用光线投射有一些问题。例如,如果玩家正在下落(向下速度有点高),则它无法捡起墙上的洞,因为它由于向下移动太远而无法被检测为空 space.
一个解决方案是移动到基于图块的系统而不是使用光线投射,但我最好不要这样做。
所以我想知道是否有某种解决方案可以找出墙上的空洞,即使是小边缘的洞也不会对性能产生巨大影响。
高质量绘制插图,假设向左速度:
Physics2D.BoxCast
是我解决这个问题的方法。它会按照您的预期进行,而不是计算一条射线,就好像一个完整的盒子正在穿越距离。
用法与光线投射非常相似。示例:
public Collider2D mainCollider;
public Vector2 velocity;
void Update() {
Vector2 origin = new Vector2(transform.position.x, transform.position.y);
Vector2 size = mainCollider.bounds.size;
Vector2 direction = velocity * Time.deltaTime;
float maxDist = velocity.magnitude;
var hit = Physics2D.BoxCast(origin, size, 0, direction, maxDepth);
if (hit == null) {
transform.position += direction;
} else {
transform.position += direction.normalized * hit.distance;
}
}
如果盒子不是你的口味,还有 Physics2D.CapsuleCast
and Physics2D.CircleCast
。