1

我正在学习如何从 Unity3d 将数据发布到 Web 服务器,作为为我的游戏创建排行榜的第一步。现在,我在 Unity 中有一个非常简单的脚本,可以将名称和分数发布到我的服务器。PostScoreURL 映射到 Rails 中的创建操作(当作为 POST 发送时)。它非常简单,但在基本层面上工作。

Unity 有一个 WWW 类,我用它来 POST 到服务器。此类具有错误属性,但始终显示为 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 回答