Unity]UnityWebRequestのGet、Postの使用


UnityWebRequestを使って外部からファイルをダウンロードしてみました

UnityWebRequest.Get(URL)


まずGoogleドライブにダウンロードリンクを作成しました
コードを書きました
FilePathは権限を拒否しました.どうやって許可すればいいか分かりません.
しかし後で権限設定を触る必要がないことを知り、
パスは変更する必要がありますが、ディレクトリではなくファイル名を含める必要があります.
string FilePath = "Assets/Resources" // (Error)
string FilePath = "Assets/Resources/hp.png"; // (Ok!)
File.WriteAllBytes()自体が元のファイルを上書きするように…!
これにより、保存するフォルダに同名のファイルを配置できます.
次のコードをテストして、正常にダウンロードしました


最後に、フォルダに同じ名前のファイルを配置する手順をスキップします.
File.先にCreate()で同じ名前の空のファイルを作成しました
using System.IO;
using UnityEngine.Networking;

public class WebRequestTest : MonoBehaviour
{
    string FilePath = "Assets/Resources/hp.png";
    string createFilePath = "Assets/Resources/hp.png";
   
    void Start()
    {
        File.Create(createFilePath);
        StartCoroutine(DownLoadGet("{다운로드 링크}"));        
            public IEnumerator DownLoadGet(string URL)
    {
        UnityWebRequest request = UnityWebRequest.Get(URL);

        yield return request.SendWebRequest();
        // 에러 발생 시
        if(request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
        {
            Debug.Log(request.error);
        }
        else
        {
            File.WriteAllBytes(FilePath, request.downloadHandler.data); // 파일 다운로드
        }
    }

}

UnityWebRequest.Post(URL)

  • unityはJsonUtilityをサポートし、ゲームオブジェクトはJsonfileによって
  • を生成して伝送することもできる.
  • アップグレード可能なサーバがなく、
  • をテストしたことがありません.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Networking;
    
    public class WebRequestPostTest : MonoBehaviour
    {
        public GameObject postObj;
        // Start is called before the first frame update
        void Start()
        {
            string jsonfile = JsonUtility.ToJson(postObj);
            StartCoroutine(Upload("http://URL", jsonfile));
            
        }
    
        IEnumerator Upload(string URL, string jsonfile)
        {
            using (UnityWebRequest request = UnityWebRequest.Post(URL, jsonfile))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(jsonfile);
                request.uploadHandler = new UploadHandlerRaw(jsonToSend);
                request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
                request.SetRequestHeader("Content-Type", "application/json");
    
                yield return request.SendWebRequest();
                if(request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
                {
                    Debug.Log(request.error);
                }
                else
                {
                    Debug.Log(request.downloadHandler.text);
                }
            }
        }
    }
    
    次はサーバーを掘り出してJsonを掘り出します
    リファレンス
  • https://timeboxstory.tistory.com/81
  • https://stackoverflow.com/questions/46182381/c-sharp-file-writeallbytes-doesnt-work-filepath-doesnt-work
  • https://doggie-development.tistory.com/3
  • https://docs.unity3d.com/kr/2017.4/Manual/UnityWebRequest-SendingForm.html
  • https://timeboxstory.tistory.com/83