我想在Unity中构建一个曲线网格 . 我们的想法是将所有GameObject放在球体上并从内部显示球体 .

我做了它没有任何问题与画布上的相机生成的渲染纹理(1500 * 1500) . 它按预期工作 .

但是,正如您所猜测的那样,事件不起作用,因为创建渲染纹理的画布是处理事件的画布,而不是纹理本身 .

为了解决这个问题,我创建了一个脚本,用于在画布的坐标中平移球体上的坐标,并使用raycaster将事件发送到正确的GameObject .

eventSystem.RaycastAll(computedPosition, raycastList);
var raycast = FindFirstRaycast(raycastList);

此代码允许我将事件传播到画布上的GameObject . 而且效果很好 .

当我在编辑器中开始游戏时,一切都正如我想要的那样 . 但是,我无法理解为什么,当我构建项目并开始游戏时,它不起作用 .

我在编辑器中对构建的游戏和游戏进行了一些比较:

  • 所有组件的位置完全相同

  • 无论分辨率如何,画布上的计算位置都相同

  • 在构建的游戏中,计算出的Y值高于1080的所有组件都能正常工作

  • 在构建的游戏中,计算Y值低于1080的所有组件都不起作用

当我说“不工作”时,我的意思是这个功能

eventSystem.RaycastAll(computedEvent, raycastList);

正在返回一个空列表 . 在构建模式下,光线投射无法找到任何游戏对象,而在编辑器模式下也是如此 .

我的第一个猜测是,如果它们看起来毫无用处,则会从屏幕上移除元素以进行优化 . 但似乎并非如此 .

我的问题是为什么会有不同的行为?我错过了什么?我认为1080值非常重要,但我找不到任何关系 .