コード例 #1
0
        // 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();
        }
コード例 #2
0
        // 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
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        // 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);
        }
コード例 #5
0
        // 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();
        }
コード例 #6
0
        // 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();
        }
コード例 #7
0
        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);
        }