我有一个用于 Oculus Rift 的简单 Unity3D 场景,并希望添加向用户(从主显示器)显示自己的桌面的功能。我发现我可以将其渲染为 Texture2D但如何高效地截取桌面呢?
实际上,我需要提供类似 http://www.vrdesktop.net/ 的内容,这允许用户在 VR 中看到显示器的内容。但我需要将其实现为 Unity3D 的库。那么最好的方法是什么?
附注如果有一个跨平台的解决方案就好了,至少是 Windows 和 Linux/Mac。
最佳答案
这个可以工作(至少对于 Windows):
Texture2D tex = new Texture2D (200, 300, TextureFormat.RGB24, false);
Rectangle screenSize = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
Bitmap target = new Bitmap (screenSize.Width, screenSize.Height);
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(target)) {
g.CopyFromScreen (0, 0, 0, 0, new Size (screenSize.Width, screenSize.Height));
}
MemoryStream ms = new MemoryStream ();
target.Save (ms, ImageFormat.Png);
ms.Seek (0, SeekOrigin.Begin);
tex.LoadImage (ms.ToArray ());
renderer.material.mainTexture = tex;
但是这里的效率是有问题的 - 每个帧都转换为 PNG,另一方面使用 CopyFromScreen 捕获效果很好。
(限制)正如 Mono 文档中所述:“适用于 Win32 和 X11(但不适用于 Cocoa 和 Quartz)”
关于unity-game-engine - 如何在Unity3D中高效、跨平台地捕捉当前桌面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27099328/