首页 > 解决方案 > 更改对象比例后对撞机不起作用

问题描述

在我的 2d 游戏中,改变它的比例后没有对撞机工作。我的 Spaceship/Sprite 周围环绕着 Box collider 2D。现在我想使用边框,这就是使用 Cube 和 Cylinder 对象的原因。在我使用 Box collider 2D 的地方,它工作正常。但是当我改变立方体/圆柱体比例时[我的意图是使用一个立方体来覆盖整个边界] 然后它不起作用,我的宇宙飞船进入那个立方体/圆柱体对象。我也尝试过不同类型的对撞机,但缩放后没有人工作。

我在立方体(墙)上使用 BoxCollider2D。

我正在检查器中更改立方体变换的本地 y 比例:

在此处输入图像描述

标签: unity3dcollision-detectioncollision

解决方案


由于我没有得到正确的答案,所以我改变了主意,以不同的方式解决问题。这里我使用坐标轴来检查边界。现在我的宇宙飞船不会出现在屏幕之外。

public Rigidbody2D player;
private Vector2 screenBounds;
private float playerWidth;
private float playerHeight;

void Start()
{
    player = this.GetComponent<Rigidbody2D>();
    screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, Camera.main.transform.position.z));
    playerWidth = transform.GetComponent<SpriteRenderer>().bounds.size.x / 2;
    playerHeight = transform.GetComponent<SpriteRenderer>().bounds.size.y / 2;
}

void FixedUpdate()
{
    MovePlayer();
}

public void MovePlayer()
{
    player.velocity = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
    this.transform.Translate(Input.GetAxis("Horizontal"), 0, 0);

    Vector3 viewPos = transform.position;
    viewPos.x = Mathf.Clamp(viewPos.x, -screenBounds.x + playerWidth, screenBounds.x - playerWidth);
    viewPos.y = Mathf.Clamp(viewPos.y, -screenBounds.y + playerHeight, screenBounds.y - playerHeight);
    transform.position = viewPos;

}

推荐阅读