1

ゲームのリーダーボードを作成するための最初のステップとして、Unity3d から Web サーバーにデータを投稿する方法を学んでいます。現在、Unity には、サーバーに名前とスコアを投稿する非常に単純なスクリプトがあります。PostScoreURL は Rails の create アクションにマップされます (POST として送信される場合)。非常にシンプルですが、基本的なレベルで機能します。

Unity には、サーバーに POST するために使用している WWW クラスがあります。このクラスにはエラー プロパティがありますが、常に 500 Internal Server Error として表示されます。ユーザーが正常に作成された場合、または検証の問題のためにユーザーが作成されなかった場合、このエラーが発生します。Rails アプリに追加して、より意味のあるエラー メッセージを Unity に送り返し、ユーザーが何が起こっているかを把握できるようにしたいと考えています。たとえば、既存のユーザーを作成しようとすると、別の名前を使用する必要があることが通知されます。

これが私のコードです: Unityスクリプト:

string PostScoreURL = "http://localhost:3000/users";
string name = "Melanie";
int score = 8732;
WWW www;
bool requestSent = false;

void OnGUI()
{
    if (GUI.Button(new Rect(0, 0, 100, 100),"Post Score"))
    {
        WWWForm form = new WWWForm();
        form.AddField("user[name]", name);
        form.AddField("user[score]", score);

        www = new WWW(PostScoreURL,form);
        requestSent = true;
    }

    if(requestSent && www.isDone)
    {
        print (www.error);
        requestSent = false;
    }
}

Rails アプリから: user.rb:

class User < ActiveRecord::Base
    attr_accessible :name, :score
    validates_presence_of :name, :score
    validates_uniqueness_of :name
end

ここに私の作成アクションがあります:

def create
    @user = User.new(params[:user])
    @user.save
end

関連するエラー メッセージを Unity に返送したいと考えています。例: ユーザー名の欠落、スコアの欠落、ユーザー名の取得。

4

1 に答える 1

1

ビジネス ルール エラー接続エラーと見なすべきではありません。つまり、これらのエラーはサーバー側で処理し、定義した内部エラー コードを含む「成功」応答をクライアントに返す必要があります。

RoR はわかりません。おそらく、応答でエラー コードを定義できるようになりますが、私の場合 (RoR を使用しない)、シリアル化されてクライアントに返されるエラー コードを含む応答クラスを作成しました。その後、WWW クラスは、エラー コードを検証するパーサーを呼び出します。また、WWW は WWW.error で接続エラーを監視します。

于 2012-08-29T15:12:36.773 に答える