Unity 中的 Box Collider 2D 重叠
Box Collider 2D overlapping in Unity
我有两个带有盒子对撞机的游戏对象。一个是玩家,以固定的速度向另一个移动。碰撞停止了玩家(Poo 角色;D)
但是它们重叠了,你可以在这里看到:
我不知道为什么会这样。与顶部或底部碰撞效果很好......同样的效果发生在左侧。绿色方块只有碰撞器,没有刚体。
动图:
另一个 Gif,带有 MovePosition() ...从顶部碰撞有效,但 "reentering" 停止了角色。为什么?!:
- GIF,上下移动没问题,在方块顶部左右移动会减慢他的速度。诡异的...
移动脚本:
public class PlayerController : MonoBehaviour
{
public float Speed = 10f;
private Rigidbody2D rb2D;
private Vector2 DirectionLeft;
private Vector2 DirectionRight;
private Vector2 DirectionUp;
private Vector2 DirectionDown;
private Vector2 CurrentDirection;
// Use this for initialization
void Start()
{
rb2D = GetComponent<Rigidbody2D>();
DirectionLeft = new Vector2(Speed*-1, 0);
DirectionRight = new Vector2(Speed, 0);
DirectionUp = new Vector2(0, Speed * -1);
DirectionDown = new Vector2(0, Speed);
CurrentDirection = DirectionLeft;
}
void SetAnimationDirection()
{
Vector3 scale = transform.localScale;
if (CurrentDirection == DirectionLeft)
scale.x = 1;
else
scale.x = -1;
transform.localScale = scale;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
if (moveHorizontal > 0)
CurrentDirection = DirectionRight;
if (moveHorizontal < 0)
CurrentDirection = DirectionLeft;
if (moveVertical < 0)
CurrentDirection = DirectionUp;
if (moveVertical > 0)
CurrentDirection = DirectionDown;
Debug.Log(CurrentDirection);
SetAnimationDirection();
rb2D.velocity = CurrentDirection;
}
第一个问题(重叠)的解法:
我用 transform.localScale = scale
在每个 FixedUpdate()
上改变了精灵的方向,也忘了更新比例因子,因为我添加了一个新的扩展,它将我的对象大小调整了 1更多 Unity 单位。
通过将 Collider 2D 的 Edge Radius 设置为低于 1.0f
的值(例如 0.09f
) 并且 调整边界框的大小 。这将防止对象卡在边缘,因为边界框边缘现在是圆形的。
我有两个带有盒子对撞机的游戏对象。一个是玩家,以固定的速度向另一个移动。碰撞停止了玩家(Poo 角色;D)
但是它们重叠了,你可以在这里看到:
我不知道为什么会这样。与顶部或底部碰撞效果很好......同样的效果发生在左侧。绿色方块只有碰撞器,没有刚体。
动图:
另一个 Gif,带有 MovePosition() ...从顶部碰撞有效,但 "reentering" 停止了角色。为什么?!:
- GIF,上下移动没问题,在方块顶部左右移动会减慢他的速度。诡异的...
移动脚本:
public class PlayerController : MonoBehaviour
{
public float Speed = 10f;
private Rigidbody2D rb2D;
private Vector2 DirectionLeft;
private Vector2 DirectionRight;
private Vector2 DirectionUp;
private Vector2 DirectionDown;
private Vector2 CurrentDirection;
// Use this for initialization
void Start()
{
rb2D = GetComponent<Rigidbody2D>();
DirectionLeft = new Vector2(Speed*-1, 0);
DirectionRight = new Vector2(Speed, 0);
DirectionUp = new Vector2(0, Speed * -1);
DirectionDown = new Vector2(0, Speed);
CurrentDirection = DirectionLeft;
}
void SetAnimationDirection()
{
Vector3 scale = transform.localScale;
if (CurrentDirection == DirectionLeft)
scale.x = 1;
else
scale.x = -1;
transform.localScale = scale;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
if (moveHorizontal > 0)
CurrentDirection = DirectionRight;
if (moveHorizontal < 0)
CurrentDirection = DirectionLeft;
if (moveVertical < 0)
CurrentDirection = DirectionUp;
if (moveVertical > 0)
CurrentDirection = DirectionDown;
Debug.Log(CurrentDirection);
SetAnimationDirection();
rb2D.velocity = CurrentDirection;
}
第一个问题(重叠)的解法:
我用 transform.localScale = scale
在每个 FixedUpdate()
上改变了精灵的方向,也忘了更新比例因子,因为我添加了一个新的扩展,它将我的对象大小调整了 1更多 Unity 单位。
通过将 Collider 2D 的 Edge Radius 设置为低于 1.0f
的值(例如 0.09f
) 并且 调整边界框的大小 。这将防止对象卡在边缘,因为边界框边缘现在是圆形的。