Unity 2d 与相机边缘的碰撞

问题描述

我不确定标题是否正确我是 unity 的新手,我正在尝试制作一个简单的 (2D) pong。问题是我试图做一些不同于教程的事情,我希望与屏幕边缘碰撞。当然我可以简单地放置一个物体并给它一个碰撞器并手动放置在边缘,但是有没有办法让球与相机的边缘碰撞? 谢谢!

解决方法

我认为您可以尝试两件事(如果您不想在您的区域周围添加 4 个对撞机),您需要了解的第一件事是相机实际上不在您正在观看的位置-游戏视图,它只是一个投影。相机可能远远落后,因此您不是在寻找与相机的碰撞,而是与相机所见的碰撞。

  1. 添加边缘碰撞器

边缘对撞机只是在对象的边缘周围放置一个对撞机,但它不会像那样工作,因为相机远远落后,因此您需要稍微缩放对撞机以适应实际的游戏视图。

  1. 添加执行此操作的代码

这有点愚蠢但可以工作,我的意思是,添加 4 个对撞机要容易得多,但我想您可以使用代码来完成并获得相同的结果。例如,如果我想要顶部边框,我可以使用:

GameObject top;
void Awake()
 {
     top = new GameObject("Top");
 }


void Start()
{
BoxCollider2D collider = top.AddComponent<BoxCollider2D>();
     collider.size = new Vector3(Mathf.Abs(Camera.main.ScreenToWorldPoint(new Vector3(0f,0f,0f)).x - Camera.main.ScreenToWorldPoint(new Vector3(Screen.width,Screen.height,0f)).x),0.1f,0f);
     collider.offset = new Vector2(collider.size.x / 2f,collider.size.y / 2f);

     top.transform.position = new Vector3((Camera.main.ScreenToWorldPoint(new Vector3(0f,0f)).x) / 2f,Camera.main.ScreenToWorldPoint(new Vector3(Screen.width,0f)).y,0f);
}

我认为这样做有点愚蠢,因为这只是针对顶级对撞机,也许您应该考虑在检查器中与他们一起工作