【发布时间】:2018-11-10 00:39:08
【问题描述】:
我正在使用 Unity 5.4.1f1 个人版并在 Windows 独立版本上工作。我想在我的游戏中使用多个显示器。我有 2 个摄像头,将一个摄像头的目标显示设置为显示 1,将第二个摄像头的目标显示设置为显示 2。
另外,我已经激活了显示,但 Display.displays.Length 在编辑器和构建中始终为一个。
所以它不会在第二个屏幕上显示任何内容。我应该怎么做才能在第二个屏幕上显示?
【问题讨论】:
我正在使用 Unity 5.4.1f1 个人版并在 Windows 独立版本上工作。我想在我的游戏中使用多个显示器。我有 2 个摄像头,将一个摄像头的目标显示设置为显示 1,将第二个摄像头的目标显示设置为显示 2。
另外,我已经激活了显示,但 Display.displays.Length 在编辑器和构建中始终为一个。
所以它不会在第二个屏幕上显示任何内容。我应该怎么做才能在第二个屏幕上显示?
【问题讨论】:
您需要在代码中使用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();
注意:一旦监视器被激活,您就无法将其停用。
【讨论】:
您看到的实际上是错误。不要浪费时间尝试修复它。转到帮助 --> 报告错误... 然后报告问题。有许多针对此问题的错误报告打开,但最好提交另一个报告以提醒他们这仍未修复。
这里是关于此的错误报告。 Unity 声称已经修复了其中一些问题,但事实并非如此,因为我能够在使用 Unity 5.6 的计算机上重现此问题。 Bug Report 1、Bug Report 2 和 Bug Report 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。
如果仍然无法正常工作,请打开屏幕分辨率对话框并验证显示器的位置。
效果不错,但会产生鱼眼效果。
【讨论】:
null,我认为这是一个错误。如果它在您的编辑器中返回 null,它仍然是一个错误。