unity-game-engine - 如何在Unity3D中高效、跨平台地捕捉当前桌面?

标签 unity-game-engine oculus

我有一个用于 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/

相关文章:

unity-game-engine - Unity + Oculus Rift : show both eyes?

android - 视频捕获和实现 Google Cardboard(如 Paul McCartney 应用程序)

user-interface - VR 中的 OnGUI 不显示

c# - 如何处理 Oculus Gear VR 触摸板上的滑动以避免点击事件

c# - 如何通过脚本统一制作多个网格?

unity-game-engine - 两个物体之间的夹持

android - 如何在 FirebaseAnalytics for Unity3D 中设置 userId?

c# - 我真的很难通过 Oculus VRC TestSubmitWhenNotVisible 测试

c# - 收集金币时不播放声音

c# - 如何根据 Unity 的文件夹结构设置命名空间