IEnumerator Load() { var sessionSubsystem = (ARKitSessionSubsystem)m_ARSession.subsystem; if (sessionSubsystem == null) { Log("No session subsystem available. Could not load."); yield break; } var DlUrl = "http://" + IP_InputField.text + ":" + _httpPort.ToString() + "/" + _GetDirectory; UnityWebRequest www = new UnityWebRequest(DlUrl); www.downloadHandler = new DownloadHandlerBuffer(); yield return(www.SendWebRequest()); byte[] worldMap_byte; var allBytes = new List <byte>(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { // または、バイナリデータで結果を表示 worldMap_byte = www.downloadHandler.data; Debug.Log("hash" + _GetHashedTextString(worldMap_byte)); allBytes.AddRange(worldMap_byte); var worldMap_nativearray = new NativeArray <byte>(allBytes.Count, Allocator.Temp); worldMap_nativearray.CopyFrom(allBytes.ToArray()); ARWorldMap worldMap; if (ARWorldMap.TryDeserialize(worldMap_nativearray, out worldMap)) { worldMap_nativearray.Dispose(); } if (worldMap.valid) { Log("Deserialized successfully."); } else { Log("Data is not a valid ARWorldMap."); yield break; } Log("Apply ARWorldMap to current session."); sessionSubsystem.ApplyWorldMap(worldMap); } }
IEnumerator Load() { var sessionSubsystem = (ARKitSessionSubsystem)m_ARSession.subsystem; if (sessionSubsystem == null) { Log("No session subsystem available. Could not load."); yield break; } var file = File.Open(path, FileMode.Open); if (file == null) { Log(string.Format("File {0} does not exist.", path)); yield break; } Log(string.Format("Reading {0}...", path)); int bytesPerFrame = 1024 * 10; var bytesRemaining = file.Length; var binaryReader = new BinaryReader(file); var allBytes = new List <byte>(); while (bytesRemaining > 0) { var bytes = binaryReader.ReadBytes(bytesPerFrame); allBytes.AddRange(bytes); bytesRemaining -= bytesPerFrame; yield return(null); } var data = new NativeArray <byte>(allBytes.Count, Allocator.Temp); data.CopyFrom(allBytes.ToArray()); Log(string.Format("Deserializing to ARWorldMap...", path)); ARWorldMap worldMap; if (ARWorldMap.TryDeserialize(data, out worldMap)) { data.Dispose(); } if (worldMap.valid) { Log("Deserialized successfully."); } else { Debug.LogError("Data is not a valid ARWorldMap."); yield break; } Log("Apply ARWorldMap to current session."); sessionSubsystem.ApplyWorldMap(worldMap); }
public void OnMessageReceived(byte[] msg) { try { BinaryFormatter bf = new BinaryFormatter(); MemoryStream serializationStream = new MemoryStream(msg, 0, msg.Length, false, false); //serializationStream.Write(msg, 0, msg.Length); object obj = bf.Deserialize(serializationStream); if (obj != null) { if (obj is AppState) { AppState appState = obj as AppState; Debug.Log("AppState received."); } } return; } catch (System.Exception) { } //string s = ""; //foreach (var b in msg) //{ // s = $"{s}, {b}"; //} //Debug.Log(s); SharedARUIManager.sharedARStatusMessage = $"MSG RECEIVED LENGTH: {msg.Length}"; //ARWorldMap if (ARWorldMapController != null) { NativeArray <byte> nativeArray = new NativeArray <byte>(msg, Allocator.Persistent); Debug.Log("Trying to deserialize ARWM"); bool success = ARWorldMap.TryDeserialize(nativeArray, out ARWorldMap worldMap); nativeArray.Dispose(); if (success) { Debug.Log("ARWM Deserialized"); if (worldMap.valid) { Debug.Log("ARWM Valid"); ARWorldMapController.LoadARWorldMap(worldMap); SharedARUIManager.sharedARStatusMessage = "SUCESS"; } } } }