我正在使用Unity 5.4.1f1个人版并在Windows独立版本上工作。我想在我的游戏中使用多个显示器。我有2个摄像头,并设置一个摄像头的目标显示器显示1和第二个摄像头的目标显示器显示2.
另外,我已经激活了显示,但 Display.displays.Length在编辑器和构建时总是一个。
因此它不会在第二个屏幕上显示任何内容。我应该怎么做才能在第二个屏幕上显示?
答案 0 :(得分:5)
您需要使用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();
注意:激活监视器后,您无法停用它。
答案 1 :(得分:3)
你看到的实际上是错误。不要浪费你的时间来修复它。转到帮助 - > 报告错误... 然后报告问题。有许多错误报告针对此问题打开,但最好提交另一个以提醒他们这仍然没有修复。
以下是有关此问题的错误报告。 Unity声称已经修复了其中一些,但事实并非如此,因为我能够使用Unity 5.6重现这个问题。 Bug Report 1,Bug Report 2和Bug Report 3。
答案 2 :(得分:3)
这个错误是统一的5.4.1我已经测试了统一5.6.1f1及以上统一多个显示器工作得很好没有需要扩展屏幕或设置参数只需要激活显示器并设置目标相机的显示属性
Unity文档对此功能有点模棱两可。
同样Display.displays.Length总是在编辑器模式下返回1但在构建中它工作正常。
我找到了发布http://answers.unity3d.com/questions/309819/getting-unity-to-render-across-multiple-monitors.html的问题参考解决方案。那就是我们必须调用 Screen.SetResolution(所有显示的宽度之和,高度,假); false是因为我们不想在全屏模式下渲染。这是因为unity不创建多个窗口,它只创建一个窗口,我们必须扩展它以匹配多个显示器的分辨率。
通过调用Activate()激活aditional显示,然后设置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。
如果仍然无效,请打开屏幕分辨率对话框并验证显示器的位置。
效果很好,但会产生鱼眼效果。