使对象在不同的​​屏幕宽度尺寸统一内正确生成

Mar*_*rić 5 screen spawning unity-game-engine

我在 Unity 中制作了第一款游戏。它应该发布到 Android 和 iOS。一切工作正常,除了当我将屏幕比例更改为 9:18(三星 S8、Lg G6...)时小行星被切断之外,小行星被切断是因为生成点固定为 -2.4f 到 2.4f。我尝试了各种方法,但没有任何效果...我已经被告知要使用 screen.width,然后制作一些逻辑,但我不知道如何制作逻辑,以便它真正起作用。 在此输入图像描述

这是我在场景中生成小行星的代码:Instantiate(asteroid1prefab, new Vector3(Random.Range(-2.4f, 2.4f), 6, 0), Quaternion.identity);

任何形式的帮助将不胜感激,谢谢

Bas*_*oud 6

您需要将生成范围替换为基于屏幕尺寸的范围。为此,您可以将视口坐标投影到世界坐标

引用文档:

视口空间点被标准化并相对于相机。相机的左下角是(0,0);右上角是(1,1)。z 位置采用相机的世界单位。

使用带有输入 (0, 0) 和 (1, 1) 的Camera.ViewportToWorldPoint来获取屏幕右上角和左下角点的世界坐标。这些将允许您设置适当的范围来生成对象

编辑:

这应该给你一些看起来像

Vector3 bottomLeftWorld = camera.ViewportToWorldPoint(new Vector3(0, 0, camera.nearClipPlane));
Vector3 topRightWorld = camera.ViewportToWorldPoint(new Vector3(1, 1, camera.nearClipPlane));

Instantiate(asteroid1prefab, new Vector3(Random.Range(bottomLeftWorld.x, topRightWorld.x), topRightWorld.y, 0), Quaternion.identity);
Run Code Online (Sandbox Code Playgroud)