unity3d
サーバーとの通信
サーチ…
取得する
Webサーバーからデータを取得しています。 new WWW("https://urlexample.com");
URLを使用して2番目のパラメータがない場合はGetを実行しています。
すなわち、
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public string url = "http://google.com";
IEnumerator Start()
{
WWW www = new WWW(url); // One get.
yield return www;
Debug.Log(www.text); // The data of the url.
}
}
簡易投稿(投稿フィールド)
2番目のパラメータを持つWWWのすべてのインスタンスはポストです。
次に、 ユーザーIDとパスワードをサーバーに送信する例を示します。
void Login(string id, string pwd)
{
WWWForm dataParameters = new WWWForm(); // Create a new form.
dataParameters.AddField("username", id);
dataParameters.AddField("password", pwd); // Add fields.
WWW www = new WWW(url+"/account/login",dataParameters);
StartCoroutine("PostdataEnumerator", www);
}
IEnumerator PostdataEnumerator(WWW www)
{
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
}
else
{
Debug.Log("Data Submitted");
}
}
投稿(ファイルをアップロードする)
サーバーにファイルをアップロードすることもポストです。以下のように、 WWWから簡単にファイルをアップロードすることができます:
Zipファイルをサーバーにアップロードする
string mainUrl = "http://server/upload/";
string saveLocation;
void Start()
{
saveLocation = "ftp:///home/xxx/x.zip"; // The file path.
StartCoroutine(PrepareFile());
}
// Prepare The File.
IEnumerator PrepareFile()
{
Debug.Log("saveLoacation = " + saveLocation);
// Read the zip file.
WWW loadTheZip = new WWW(saveLocation);
yield return loadTheZip;
PrepareStepTwo(loadTheZip);
}
void PrepareStepTwo(WWW post)
{
StartCoroutine(UploadTheZip(post));
}
// Upload.
IEnumerator UploadTheZip(WWW post)
{
// Create a form.
WWWForm form = new WWWForm();
// Add the file.
form.AddBinaryData("myTestFile.zip",post.bytes,"myFile.zip","application/zip");
// Send POST request.
string url = mainUrl;
WWW POSTZIP = new WWW(url,form);
Debug.Log("Sending zip...");
yield return POSTZIP;
Debug.Log("Zip sent!");
}
あなたはユニティコルーチンについての詳細をお知りになりたい場合は、この例では、それは、準備してファイルをアップロードするためにコルーチンを使用して、ご覧くださいコルーチンを 。
サーバーへのリクエストの送信
Unityをクライアントとして使用してサーバと通信する方法はたくさんあります(目的に応じていくつかの方法が他の方法より優れています)。まず、サーバーとの間で操作を効率的に送信できるようにするために、サーバーの必要性を判断する必要があります。この例では、検証するためにいくつかのデータをサーバーに送信します。
ほとんどの場合、プログラマは、イベントを受信してクライアントに応じて応答するために、サーバ上に何らかのハンドラを設定しますが、それはこの例の範囲外です。
C#:
using System.Net;
using System.Text;
public class TestCommunicationWithServer
{
public string SendDataToServer(string url, string username, string password)
{
WebClient client = new WebClient();
// This specialized key-value pair will store the form data we're sending to the server
var loginData = new System.Collections.Specialized.NameValueCollection();
loginData.Add("Username", username);
loginData.Add("Password", password);
// Upload client data and receive a response
byte[] opBytes = client.UploadValues(ServerIpAddress, "POST", loginData);
// Encode the response bytes into a proper string
string opResponse = Encoding.UTF8.GetString(opBytes);
return opResponse;
}
まず、WebClientクラスとNameValueCollectionクラスを使用できるusingステートメントを使用します。
この例では、SendDataToServer関数は3つの(オプションの)文字列パラメータを取ります。
- 私たちが通信しているサーバーのURL
- 最初のデータ
- サーバーに送信するデータの2番目の部分
ユーザー名とパスワードは、サーバーに送信するオプションのデータです。この例では、データベースやその他の外部ストレージからさらに検証するために使用しています。
構造を設定したので、実際にデータを送信するために使用する新しいWebClientをインスタンス化します。これで、NameValueCollectionにデータをロードし、サーバーにデータをアップロードする必要があります。
UploadValues関数は3つの必要なパラメータも取ります:
- サーバのIPアドレス
- HTTPメソッド
- 送信しているデータ(ここのユーザー名とパスワード)
この関数は、サーバーからの応答のバイト配列を返します。返されたバイト配列を実際の文字列にエンコードして、レスポンスを操作して解読できるようにする必要があります。
次のようなことができます:
if(opResponse.Equals(ReturnMessage.Success))
{
Debug.Log("Unity client has successfully sent and validated data on server.");
}
今でもあなたは混乱しているかもしれないので、私は、応答サーバーを扱う方法について簡単に説明します。
この例では、PHPを使用してクライアントからの応答を処理します。私はPHPをバックエンドスクリプト言語として使用することをお勧めします。これは多用途で使いやすく、ほとんどの場合は高速です。サーバ上で応答を処理する他の方法は間違いありませんが、私の意見では、PHPはUnityへの最も簡単で簡単な実装です。
PHP:
// Check to see if the unity client send the form data
if(!isset($_REQUEST['Username']) || !isset($_REQUEST['Password']))
{
echo "Empty";
}
else
{
// Unity sent us the data - its here so do whatever you want
echo "Success";
}
これは最も重要な部分です - エコーです。クライアントがデータをサーバーにアップロードすると、クライアントはそのバイト配列に応答(またはリソース)を保存します。クライアントが応答を受け取ると、データが検証されたことを知っているので、そのイベントが発生するとクライアントで移動できます。また、送信しているデータの種類(ある程度)と実際に送信している量を最小限に抑える方法について考える必要があります。
これは、Unityからデータを送受信する唯一の方法です。プロジェクトによっては、より効果的な方法がいくつかあります。