【问题标题】:Get MTP Device in Unity在 Unity 中获取 MTP 设备
【发布时间】:2020-05-22 17:16:39
【问题描述】:

您好,我目前正在为一个课程项目开发一个统一的游戏,我绝对必须能够将我的备份文件从我的电脑存储在我的手机上,而且我必须能够检索它们。 我在使用 Android 手机和 Unity 2019.3.14f1 的 Windows 10 上。

我尝试使用 NuGet MediaDevice 包,如下所示:

 public static void CopySaveFromDevice()
    {
        var devices = MediaDevice.GetDevices();
        Debug.Log(devices);
        using (var device = devices.First(d => d.FriendlyName == "Mi Note 10"))
        {
            Debug.Log(device);
            device.Connect();
            var savesDir = device.GetDirectoryInfo(@"/Treen/Saves");

            var files = savesDir.EnumerateFiles("*.tree", SearchOption.TopDirectoryOnly);

            foreach (var file in files)
            {
                MemoryStream memoryStream = new System.IO.MemoryStream();
                device.DownloadFile(file.FullName, memoryStream);
                memoryStream.Position = 0;
                WriteStreamToDisk(Application.persistentDataPath + "/Saves/" + file.Name, memoryStream);
            }
            device.Disconnect();
        }

    }

    static void WriteStreamToDisk(string filePath, MemoryStream memoryStream)
    {
        using (FileStream file = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write))
        {
            byte[] bytes = new byte[memoryStream.Length];
            memoryStream.Read(bytes, 0, (int)memoryStream.Length);
            file.Write(bytes, 0, bytes.Length);
            memoryStream.Close();
        }
    }

但我有这个错误:

NullReferenceException: Object reference not set to an instance of an object
MediaDevices.MediaDevice.GetDevices () (at <016781043aa441d5b0169b9d5116ee77>:0)
ManageSaves.CopySaveFromDevice () (at Assets/Scripts/ManageSaves.cs:65)
ManageSaves.Testing () (at Assets/Scripts/ManageSaves.cs:57)
MainMenu.Testing () (at Assets/Scripts/MainMenu.cs:69)
UnityEngine.Events.InvokableCall.Invoke () (at <23a7799da2e941b88c6db790c607d655>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <23a7799da2e941b88c6db790c607d655>:0)
UnityEngine.UI.Button.Press () (at C:/Program Files/Unity/Hub/Editor/2019.3.14f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:68)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/Program Files/Unity/Hub/Editor/2019.3.14f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:110)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/Program Files/Unity/Hub/Editor/2019.3.14f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/Program Files/Unity/Hub/Editor/2019.3.14f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update() (at C:/Program Files/Unity/Hub/Editor/2019.3.14f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/EventSystem.cs:377)

当我不团结时,代码会检测设备。所以我得出结论,它在统一环境中不起作用:/

您知道如何解决此问题或以其他方式在有线模式下保存到我的手机吗? 也许是免费资产?

【问题讨论】:

    标签: c# windows unity3d mtp


    【解决方案1】:

    我强烈建议你不要使用MTP Device 文件路径。为了您的目的,我可以告诉您制作一个 TCP 套接字来将您的文件移动到您的设备。阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2016-02-24
      • 2023-03-31
      • 2014-12-18
      • 2018-01-25
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多