Unity 2d与相机边缘的碰撞
Unity 2d collision with the edge of the camera
我不确定标题是否正确。 我是 unity 的新手,我正在尝试制作一个简单的 (2D) 乒乓球。问题是我正在尝试做一些与教程不同的事情,我希望 球 与屏幕边缘碰撞 。当然我可以简单地放一个 object 并给它一个碰撞器并手动放在边缘,但是有没有办法让球与相机的边缘发生碰撞?
谢谢!
我认为您可以尝试 2 件事(如果您不想在您的区域周围添加 4 个碰撞器)并且您需要了解的第一件事是相机实际上并不在您所在的位置观看游戏中的视图,它只是一个投影。相机可能落后很多,所以您不是在搜索与相机的碰撞,而是与相机所见.[=11=的碰撞]
- 添加边缘碰撞器
边缘碰撞器只是在对象的边缘周围放置一个碰撞器,但它不会像那样工作,因为相机在后面很远,因此您需要稍微缩放碰撞器以适应实际的游戏视图.
- 添加执行此操作的代码
这有点愚蠢,但可以工作,我的意思是,添加 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, 0f)).x - Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0f)).x) / 2f, Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0f)).y, 0f);
}
我认为这样做有点愚蠢,因为这只是针对顶部碰撞器的,也许你应该考虑一种在检查器中与它们一起工作的方法
我不确定标题是否正确。 我是 unity 的新手,我正在尝试制作一个简单的 (2D) 乒乓球。问题是我正在尝试做一些与教程不同的事情,我希望 球 与屏幕边缘碰撞 。当然我可以简单地放一个 object 并给它一个碰撞器并手动放在边缘,但是有没有办法让球与相机的边缘发生碰撞? 谢谢!
我认为您可以尝试 2 件事(如果您不想在您的区域周围添加 4 个碰撞器)并且您需要了解的第一件事是相机实际上并不在您所在的位置观看游戏中的视图,它只是一个投影。相机可能落后很多,所以您不是在搜索与相机的碰撞,而是与相机所见.[=11=的碰撞]
- 添加边缘碰撞器
边缘碰撞器只是在对象的边缘周围放置一个碰撞器,但它不会像那样工作,因为相机在后面很远,因此您需要稍微缩放碰撞器以适应实际的游戏视图.
- 添加执行此操作的代码
这有点愚蠢,但可以工作,我的意思是,添加 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, 0f)).x - Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0f)).x) / 2f, Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0f)).y, 0f);
}
我认为这样做有点愚蠢,因为这只是针对顶部碰撞器的,也许你应该考虑一种在检查器中与它们一起工作的方法