ゲームのリーダーボードを作成するための最初のステップとして、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 に返送したいと考えています。例: ユーザー名の欠落、スコアの欠落、ユーザー名の取得。