【问题标题】:Unity 2d collision with the edge of the cameraunity 2d 与相机边缘的碰撞
【发布时间】:2020-12-28 19:27:28
【问题描述】:

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

【问题讨论】:

  • 请提供您正在尝试做的代码示例,这将帮助您获得答案。
  • 您实际上确实添加了对撞机来做到这一点!

标签: unity3d camera collision


【解决方案1】:

我认为您可以尝试 2 件事(如果您不想在您的区域周围添加 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, 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);
}

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

【讨论】:

  • 好的,谢谢您的回复!!现在我知道这不是我应该做的事!
  • 感觉就是有点长,不过你可以试试边缘对撞机或者手动添加对撞机我猜@Nextgengamedeveloper
  • 伙计们,您不能手动添加它们......事实上,您必须让代码在运行时找到正确的位置。因为所有不同的屏幕形状。
  • 实际上你可以使用画布缩放模式,它仍然会保留,但我明白你的意思@Fattie
  • @Fattie 这就是我问它的原因,所以这是正确的方法吗?与那些screenToWorldPoint?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2016-01-21
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多