【问题标题】:Unity Multiple displays not workingUnity 多个显示器不工作
【发布时间】:2018-11-10 00:39:08
【问题描述】:

我正在使用 Unity 5.4.1f1 个人版并在 Windows 独立版本上工作。我想在我的游戏中使用多个显示器。我有 2 个摄像头,将一个摄像头的目标显示设置为显示 1,将第二个摄像头的目标显示设置为显示 2。

另外,我已经激活了显示,但 Display.displays.Length 在编辑器和构建中始终为一个

所以它不会在第二个屏幕上显示任何内容。我应该怎么做才能在第二个屏幕上显示?

【问题讨论】:

    标签: unity3d unity5


    【解决方案1】:

    您需要在代码中使用Display.Activate 激活每个额外的显示。

    查看the docs 上面写的:

    激活附加显示器的最佳时间是在创建新显示器时 场景。一个很好的方法是将脚本组件附加到 默认相机。确保您只调用一次 Display.Activate 启动。您可能会发现创建一个小的初始场景很有帮助 测试一下。

    从例子中,在Start()方法中:

    if (Display.displays.Length > 1)
        Display.displays[1].Activate();
    if (Display.displays.Length > 2)
        Display.displays[2].Activate();
    

    注意:一旦监视器被激活,您就无法将其停用。

    【讨论】:

    • 是的,我已经完成了这一步,但是由于 Display.displays.Length 返回 1,它永远不会激活第二个显示。
    • @Nain 也许更新您的问题以更清楚地表明您已经完成了此操作。我知道你写了“我已经激活了显示”,但是你可以通过提供一个代码示例来更清楚地说明。
    【解决方案2】:

    您看到的实际上是错误。不要浪费时间尝试修复它。转到帮助 --> 报告错误... 然后报告问题。有许多针对此问题的错误报告打开,但最好提交另一个报告以提醒他们这仍未修复。

    这里是关于此的错误报告。 Unity 声称已经修复了其中一些问题,但事实并非如此,因为我能够在使用 Unity 5.6 的计算机上重现此问题。 Bug Report 1Bug Report 2Bug Report 3

    【讨论】:

    • 我不会为同一问题创建新的错误报告。我会赞成已经存在的错误报告。
    • @PJvG 您可以为错误修复投票,但您需要积分。大多数人都用完了积分(我做到了)。您有两个选择:为新错误创建新帐户或文件,然后让 Unity 解决它。有时,是另一个问题导致了新问题。其他时候,这是同样的问题,Unity 会将其标记为重复。
    • 我明白了。不过还有第三种选择:您可以从您认为不那么重要的其他问题中删除您的投票。如果你去here,你可以看到你投票的内容。不过,如果有办法获得更多积分,那就太好了。
    • 我的投票都是严重的错误报告,因此删除它们并没有真正的帮助。另外,我认为如果问题没有解决,您只能删除投票。如果问题解决了,积分就没有了,你不能拿回来。在这点上我可能是错的,但在修复了一些错误后,我未能重新获得我的观点。将登录您今天发布的链接,看看是否属实。
    【解决方案3】:

    这个 bug 是在 unity 5.4.1 中我用 unity 5.6.1f1 及更高版本测试过 unity 多显示器工作正常不需要扩展屏幕或设置参数只需要激活显示器并设置目标相机的显示属性

    Unity 文档对此功能有点模糊。

    此外,Display.displays.Length 在编辑器模式下总是返回 1,但在构建中它工作正常。

    我找到了解决此问题的方法,请参阅帖子http://answers.unity3d.com/questions/309819/getting-unity-to-render-across-multiple-monitors.html。那就是我们必须调用 Screen.SetResolution(sum of all displays , height, false); 是因为我们不想在全屏模式下渲染。这是因为 unity 不会创建多个窗口,它只会创建一个窗口,我们必须扩展它以匹配多个显示器的分辨率。

    通过调用 Activate() 激活附加显示,并设置 setparams 为每个显示提供一个起始值。我为 3 台显示器设计了它。

    if (Display.displays.Length > 1)
    {
     //display 0 is set by default
        Display.displays[1].Activate();
        Display.displays[1].SetParams(Width of display 1,height of display 1,starting x for display 1,starting y for display 1);
    }
    if (Display.displays.Length > 2)
    {
        Display.displays[2].Activate();
        Display.displays[2].SetParams(Width of display 2,height of display 2,starting x for display 2,starting y for display 2);
    }
    

    在构建设置中将“显示分辨率对话框”设置为“已禁用”,确保未选中“默认为全屏”。

    创建构建,然后是最后一步,使用 -popupwindow 或 -multidisplay 命令行参数运行 exe。

    如果仍然无法正常工作,请打开屏幕分辨率对话框并验证显示器的位置。

    效果不错,但会产生鱼眼效果

    【讨论】:

    • 所以这意味着您的声明“但 Display.displays.Length 在编辑器和 build 上始终为一”是错误的。哦,好吧,它仍然在编辑器和构建中为我返回null,我认为这是一个错误。如果它在您的编辑器中返回 null,它仍然是一个错误。
    • 是的,你是对的,我后来检查了一下,发现它只是在编辑器上返回 1。
    • 哎呀。打了个大错字。当我说 null 时,我的意思是 1。看起来你明白了。
    猜你喜欢
    • 2022-07-25
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多