在 GearVR 中使用 Unity (C#) Android 应用程序检测 USB 驱动器



正如标题所述,我有一个用于Samsung Gear VR的Unity3D应用程序,我希望能够检测到何时有东西插入Gear上的USB-C端口。

在这里和其他相关论坛上搜索,我可能已经找到了一种使用 Android Intents (ACTION_USB_DEVICE_ATTACHED( 执行此操作的方法,但看起来这不是 Unity 应用程序的选项(或者至少我找不到使用它的方法,Unity 论坛似乎再次关闭(。

现在,我基本上跳过了"检测"步骤,而是在适当的场景中在后台运行一个枚举器,检查 Android 上"/storage"中的任何文件夹是否有名为"test"的子文件夹。Android 似乎将来自外部驱动器的数据存储在"/storage"中,文件夹名称看似随机的字母数字字符,因此我发现确定它是否是我正在寻找的驱动器的唯一方法是检查 1 层深度以找到"test"文件夹。

IEnumerator DirectoryReadTest()
{
Debug.Log("Running DirectoryReadTest...");
while (true)
{
DirectoryInfo info = new DirectoryInfo("/storage");
DirectoryInfo[] subs = info.GetDirectories();
foreach (DirectoryInfo d in subs)
{
Debug.Log("Directory: " + d.Name);
DirectoryInfo[] subd = d.GetDirectories("test");
if (subd.Length > 0)
{
Debug.Log("Found a test directory in storage.");
usbExternalDirectory = subd[0];
break;
}
}
yield return null;
}
}

这种方法目前有效,但意味着我必须在后台不断运行此过程,因此效率不高。我似乎无法过滤掉正在寻找诸如"如何判断Android手机是否已插入计算机USB"之类的Google结果,因此我将不胜感激任何指向正确方向的指示。

虽然不是直接答案,但有两个建议如何优化你的代码: 我相信您可以返回 WaitForSeconds(1( 或 (2( 而不是每帧都进行检查,所以这已经快了 50 个数量级。 其次,DirectoryInfo非常高效,尤其是在闪存驱动器上,它的Debug.Log正在为您提供循环(每个调试日志都会执行堆栈跟踪转储(,永远不会调试.log在每一帧中,它是最被低估的性能杀手之一

相关内容

  • 没有找到相关文章

最新更新