【发布时间】:2016-12-31 00:16:17
【问题描述】:
我正在构建一个非常简单的平台游戏,使用 2D 数组来构建基于它的地图。
我想要两个简单的目标,但我目前找不到答案:
- 确保相机为 16:9,并且我的场景将 100% 显示在其中
- 以数组形式构建 2D 平台图块集
我的环境:
- Unity 5.5.0f3(2D 模式)
- 相机投影正射尺寸 10.9
- 游戏以 16:9 显示
- 图块尺寸为 128x128 像素
这是我当前的代码:
public Camera camera;
public GameObject prefab;
void Start () {
Vector3 pos = camera.ScreenToWorldPoint(new Vector3 (0, 0, 0));
Vector3 nextPosition = pos;
for (int i = 0; i < 32; i++)
{
for(int j=0; j < 18; j++)
{
GameObject a = Instantiate(prefab, new Vector3(nextPosition.x, nextPosition.y, 0), Quaternion.identity);
nextPosition = new Vector3(pos.x+(prefab.GetComponent<Renderer>().bounds.size.x)*i, pos.y+(prefab.GetComponent<Renderer>().bounds.size.y)*j,0);
}
}
}
有 3 点需要注意:
- 我正在使用 ScreenToWorldPoint 获取 0,0,0 的位置
- 我的构建顺序是从左下角到右上角,每次迭代都被放置为过去的位置 + 块宽度/高度(x 和 y)
- 我正在使用 16:9 的方案,即 32:18
如您所见,它位于相机边界之外,即使相机和代码都是 16:9,它也超过了 1 列。另请注意,实例化点正好在我的游戏对象的中间,所以我开始将它实例化为游戏对象宽度和高度的一半,意思是:
Vector3 pos = camera.ScreenToWorldPoint(new Vector3 (64, 64, 0));
完全不是我所期望的,经过反复试验,我发现它应该是在 16,16:
Vector3 pos = camera.ScreenToWorldPoint(new Vector3 (16, 16, 0));
现在它非常适合,但它在顶部超过 1 行,在右侧超过 1,5 列。这不应该是因为它们都是 16:9
我显然做错了什么,但我看不出是什么,我过去曾遇到过这个问题,但我不记得我发现了什么。
【问题讨论】:
-
是你的inspector相机视图正交,以及游戏相机视图。检查器布局看起来像检查器中的相机视图仍然是 3D(透视)。
-
这是我的相机检查员:prntscr.com/dq44p0
-
不,我的意思是viewpoint gizmo。单击 Gizmo 中心的正方形以在检查器中的正交视图和透视视图之间切换。这能解决您的问题吗?
-
这里:prntscr.com/dq471b 在 Gizmos 下没有选择任何内容的 2D
-
啊抱歉,我从来没有构建 2D,所以不知道这是隐藏的。运行游戏时您的游戏视图是什么样的?