// StreamingAssetsからテクスチャをロードする public static IEnumerator CoLoad( CoroutineReturnValue <Texture2D> ret, string pathInStreamingAssets, bool overrideEnabled = true, bool readable = false) { string url = MakeUrl(pathInStreamingAssets, overrideEnabled); var req = new UnityWebRequest(url); req.method = UnityWebRequest.kHttpVerbGET; var handler = new DownloadHandlerTexture(readable); req.downloadHandler = handler; yield return(req.SendWebRequest()); if (req.error != null) { ret.Fail(new System.IO.FileLoadException(url)); } else { ret.Succeed(handler.texture); } req.Dispose(); }
// StreamingAssetsからファイルテキストをロードする public static IEnumerator CoLoad( CoroutineReturnValue <string> ret, string pathInStreamingAssets, bool overrideEnabled = true) { #if UNITY_IOS // iOS13+iPhoneXで死ぬので回避を試みる try { var text = System.IO.File.ReadAllText(System.IO.Path.Combine(Application.streamingAssetsPath, pathInStreamingAssets)); ret.Succeed(text); } catch (System.Exception e) { ret.Fail(e); } yield break; #else string url = MakeUrl(pathInStreamingAssets, overrideEnabled); var req = UnityWebRequest.Get(url); yield return(req.SendWebRequest()); Debug.Assert(req.isDone); if (req.error != null) { ret.Fail(new System.IO.FileLoadException(url)); } else { ret.Succeed(req.downloadHandler.text); } req.Dispose(); #endif }
IEnumerator CoProcessFileGet(HttpListenerContext context, string path) { var request = context.Request; Debug.Assert(request.HttpMethod == "GET"); var ret = new CoroutineReturnValue <string>(); yield return(DebugServerUtil.CoLoad(ret, path, overrideEnabled: true)); var response = context.Response; if (ret.Exception != null) { response.StatusCode = (int)HttpStatusCode.InternalServerError; response.Close(); } else { var ext = System.IO.Path.GetExtension(path); var isText = (ext == ".txt") || (ext == ".json") || (ext == ".html") || (ext == ".htm") || (ext == ".xml") || (ext == ".yaml") || (ext == ".csv"); var sb = new StringBuilder(); var writer = HtmlUtil.CreateWriter(sb); var title = path; HtmlUtil.WriteHeader(writer, title); writer.WriteStartElement("body"); writer.WriteElementString("h1", title); if (isText) { HtmlUtil.WriteTextarea(writer, "text", 20, 60, ret.Value); HtmlUtil.WriteBr(writer); HtmlUtil.WriteInput(writer, "update", "button", "submit"); } HtmlUtil.WriteInput(writer, "delete", "button", "delete file"); HtmlUtil.WriteBr(writer); HtmlUtil.WriteInput(writer, "file", "file"); HtmlUtil.WriteInput(writer, "upload", "button", "upload file"); HtmlUtil.WriteBr(writer); HtmlUtil.WriteOutput(writer, "log"); writer.WriteStartElement("script"); writer.WriteString(fileGetScript); writer.WriteEndElement(); //script writer.WriteEndElement(); //body writer.WriteEndElement(); //html writer.Close(); var html = sb.ToString(); var bytes = Encoding.UTF8.GetBytes(html); response.Close(bytes, willBlock: false); } }
// StreamingAssetsからファイルバイナリをロードする public static IEnumerator CoLoad( CoroutineReturnValue <byte[]> ret, string pathInStreamingAssets, bool overrideEnabled = true) { string url = MakeUrl(pathInStreamingAssets, overrideEnabled); var req = UnityWebRequest.Get(url); req.SendWebRequest(); yield return(req); if (req.error != null) { ret.Fail(new System.IO.FileLoadException(url)); yield break; } ret.Succeed(req.downloadHandler.data); }
// StreamingAssetsからファイルテキストをロードする public static IEnumerator CoLoad( CoroutineReturnValue <string> ret, string pathInStreamingAssets, bool overrideEnabled = true) { string url = MakeUrl(pathInStreamingAssets, overrideEnabled); var req = UnityWebRequest.Get(url); yield return(req.SendWebRequest()); Debug.Assert(req.isDone); if (req.error != null) { ret.Fail(new System.IO.FileLoadException(url)); } else { ret.Succeed(req.downloadHandler.text); } req.Dispose(); }
// StreamingAssetsからAudioClipをロードする public static IEnumerator CoLoad( CoroutineReturnValue <AudioClip> ret, string pathInStreamingAssets, bool overrideEnabled = true, bool readable = false) { string url = MakeUrl(pathInStreamingAssets, overrideEnabled); var req = new UnityWebRequest(url); req.method = UnityWebRequest.kHttpVerbGET; AudioType type = AudioType.UNKNOWN; var ext = System.IO.Path.GetExtension(url).ToLower(); switch (ext) { case ".wav": type = AudioType.WAV; break; case ".wave": type = AudioType.WAV; break; case ".ogg": type = AudioType.OGGVORBIS; break; case ".mp3": type = AudioType.MPEG; break; case ".aiff": type = AudioType.AIFF; break; } var handler = new DownloadHandlerAudioClip(url, type); req.downloadHandler = handler; yield return(req.SendWebRequest()); if (req.error != null) { ret.Fail(new System.IO.FileLoadException(url)); } else { ret.Succeed(handler.audioClip); } req.Dispose(); }
public static IEnumerator CoGetScreenshot( CoroutineReturnValue <byte[]> retVal, bool withAlpha = true, int waitFrameCount = 0, // デバグUIを消すなどがすぐに済まない場合、ここにフレーム数を指定 FileType fileType = FileType.Png) { for (int i = 0; i < waitFrameCount; i++) { yield return(null); } yield return(new WaitForEndOfFrame()); var width = Screen.width; var height = Screen.height; var format = withAlpha ? TextureFormat.RGBA32 : TextureFormat.RGB24; var texture = new Texture2D(width, height, format, mipChain: false); texture.ReadPixels(new Rect(0, 0, width, height), 0, 0); var bytes = ConvertReadableTextureToFile(texture, fileType); retVal.Succeed(bytes); }