Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post and the FAQ. |
Existen dos funciones principales para enviar datos a un servidor formateado como un formulario HTML. Si está migrando desde el sistema WWW, consulte Uso de WWWForm, a continuación.
Para proporcionar un mayor control sobre cómo especificar los datos de su formulario, el sistema UnityWebRequest
contiene una interfaz IMultipartFormSection` implementable por el usuario. Para aplicaciones estándar, Unity también proporciona implementaciones predeterminadas para secciones de datos y archivos:
MultipartFormDataSectiony
MultipartFormFileSection``.
Una sobrecarga de UnityWebRequest.POST
acepta, como segundo parámetro, un argumento de lista, cuyos miembros deben ser todos IMultipartFormSections
. La firma de la función es:
UnityWebRequest.Post(string url, List<IMultipartFormSection> formSections);
UnityWebRequest
y establece la URL de destino en el primer parámetro de string. También establece el encabezado Content-Type de UnityWebRequest
de forma adecuada para los datos del formulario especificados en la lista de objetosIMultipartFormSection
.DownloadHandlerBuffer
a laUnityWebRequest
. Esto es por comodidad, puede usarlo para verificar las respuestas de su servidor.WWWForm POST
, esta función HLAPI llama a su vez cadaIMultipartFormSection
suministrada y los formatea en una forma multiparte estándar como se especifica en RFC 2616.UploadHandlerRaw
, que luego se adjunta a laUnityWebRequest
. Como resultado, los cambios en los objetos IMultipartFormSection
realizados después de la llamadaUnityWebRequest.POST
no se reflejan en los datos enviados al servidor.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!");
}
}
}
Para ayudar a migrar del sistema WWW, el sistema UnityWebRequest le permite a usted utilizar el anterior objeto WWWForm para proporcionar datos de formulario.
En este caso, la signature de la función es:
UnityWebRequest.Post(string url, WWWForm formData);
UnityWebRequest
y establece la URL de destino al valor del primer argumento de cadena. También lee cualquier encabezado personalizado generado por el argumento WWWForm
(como Content-Type) y los copia en elUnityWebRequest
.DownloadHandlerBuffer
a laUnityWebRequest
. Esto es por comodidad, puede usarlo para verificar las respuestas de su servidor.objeto WWWForm
y los almacena en un objetoUploadHandlerRaw
, que se adjunta a la UnityWebRequest
. Por lo tanto, los cambios en el objeto WWWForm
después de llamar aUnityWebRequest.POST
no alteran el contenido de 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!");
}
}
}