ノート: UNet は非推奨となり、今後 Unity から削除される予定です。新しいシステムが開発中です。詳細は ブログ と FAQ を参照してください。 |
HTML フォームにフォーマットされたデータをサーバーに送信する 2 つの主要機能があります。WWW システムからの移行については、後述の WWWForm の使用 を参照してください。
フォームデータをどのように指定するかをより細かく制御するために、UnityWebRequest
システムにはユーザーにより実装可能な IMultipartFormSection
インターフェースが含まれています。 標準的なアプリケーションでは、Unity はデータセクションとファイルセクションのデフォルト実装の MultipartFormDataSection
と MultipartFormFileSection
が利用できます。
多重定義である UnityWebRequest.POST
は 2 番目の引数として List を受け取ります。List の要素はすべて IMultipartFormSections
でなければなりません。関数のシグネチャは以下のとおりです。
UnityWebRequest.Post(string url, List<IMultipartFormSection> formSections);
UnityWebRequest
を作成し、ターゲット URL を 1 番目の文字列のパラメーターに設定します。また、この関数は、UnityWebRequest
の Content-Type ヘッダーをIMultipartFormSection
オブジェクトのリストで指定されたフォームデータ用に、適切に設定します。DownloadHandlerBuffer
を UnityWebRequest
にアタッチします。これは便宜上のもので、これを利用してサーバーの応答を確認することができます。WWWForm POST
関数と同様に、この HLAPI 関数は、提供された IMultipartFormSection
を順番に呼び出し、それらを RFC 2616 で指定されている標準マルチパート形式にフォーマットします。UploadHandlerRaw
オブジェクトに格納され UnityWebRequest
にアタッチされます。その結果、UnityWebRequest.POST
の呼び出し後に実行される IMultipartFormSection
オブジェクトでの変更は、サーバーに送信されるデータに反映されません。using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
public class MyBehavior : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}
IEnumerator Upload()
{
List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
formData.Add(new MultipartFormFileSection("my file data", "myfile.txt"));
UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", formData);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Form upload complete!");
}
}
}
WWW システムから移行するために、UnityWebRequest システムでは古い WWWForm オブジェクトを使用してフォームデータを渡すことが可能です。
この場合、関数のシグネチャは以下のようになります。
UnityWebRequest.Post(string url, WWWForm formData);
UnityWebRequest
を作成し、ターゲット URL を 1 番目の文字列引数に設定します。WWWForm
引数 (Content-Type など) で生成されたカスタムヘッダーも読み込み、UnityWebRequest
にコピーします。DownloadHandlerBuffer
を UnityWebRequest
にアタッチします。これは便宜上のもので、これを利用してサーバーの応答を確認することができます。WWWForm オブジェクト
によって生成された生データを読み込み、UnityWebRequest
にアタッチされる UploadHandlerRaw
オブジェクトにバッファリングします。したがって、UnityWebRequest.POST
を呼び出した後に WWWForm
オブジェクトを変更しても、UnityWebRequest
の内容は変更されません。using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class MyBehavior : public MonoBehaviour {
void Start() {
StartCoroutine(Upload());
}
IEnumerator Upload() {
WWWForm form = new WWWForm();
form.AddField("myField", "myData");
UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", form);
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError) {
Debug.Log(www.error);
}
else {
Debug.Log("Form upload complete!");
}
}
}