【发布时间】:2020-04-03 18:48:09
【问题描述】:
我正在 Unity 中制作游戏,其中对象在唤醒状态下生成为网格类型模式。我希望第一个对象生成在屏幕的左边缘,其他对象紧随其后。
当我在统一的内置游戏测试器中进行测试时,我已经或多或少地正常工作了。我什至尝试了不同的分辨率,但看起来还不错。
但是,当我构建项目然后对其进行测试时,所有对象都在镜头外,看起来与预览构建完全不同。
我已经尝试了许多可以在 google 上找到的各种建议,但它们似乎并没有更好
我实例化第一个对象的方式是首先使用 int ix = -(Camera.main.scaledPixelWidth / 2) 获取屏幕边缘的 X 值
然后我将添加对象的一半宽度,使用
var renderer = clone.GetComponent<Renderer>();
float width = renderer.bounds.size.x / 2f;
ix += (int) width;
我也尝试过使用 screen.width 和 Camera.main.PixelWidth 值,它们都是相同的......它们在 Unity 的内置游戏预览中的所有纵横比看起来都很好,但是当我这样做时Windows 或 WebGL 的构建对象在屏幕外开始,只有最后几个对象会在屏幕上呈现。
无论分辨率如何,是否有人对让对象精确呈现在边缘的方法有任何建议?
我意识到如果手动布置对象可能会更好,但是对象需要在关卡开始时渲染,因为想法是重用一个场景并根据解析的 xml 文件加载资产,因为这是一个难题游戏,我希望用户最终也能够创建自己的谜题。
【问题讨论】:
-
您在使用画布吗?您知道此值将在像素空间中,不一定在世界空间单位中
-
是的,我正在使用画布,它被设置为主摄像头并随屏幕大小缩放。 UI 元素正在正确呈现。那么对于世界空间单位,我是否需要以某种方式使用相机 ViewportToWorldPoint 函数?
-
如果您需要世界空间中的坐标,那么它将是
ScreenToWorldPoint.. 否则:只是使用 HorizontalLayoutGroup 并将您的对象作为它的子对象生成选项?有了这个,您根本不需要脚本,只需在 RectTransforms 中正确配置内容 -
好的,我会看看我是否能弄清楚如何使用 ScreenToWorldPoint。我想过一个布局组,但问题是元素的数量会变化,对象的大小可能会变化,所以看起来很奇怪。但是,如果我不能正确使用屏幕到世界点功能,我会尝试使用组。感谢您的提示。
-
刚刚尝试了该组,它破坏了我需要的拖放元素的能力,所以它必须是我认为的 screentoworldpoint 选项,或类似的东西