我正在学习如何从Unity3d将数据发布到Web服务器,这是为我的游戏创建排行榜的第一步。现在我在Unity中有一个非常简单的脚本,它将名称和分数发布到我的服务器上。 PostScoreURL映射到Rails中的创建操作(作为POST发送时)。它非常简单,但在基础层面上工作。
Unity有一个WWW类,我用它来POST到服务器。此类具有错误属性,但它始终显示为500内部服务器错误;如果成功创建用户或者由于验证问题而未创建用户,则会出现此错误。我想添加到我的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。例如:缺少用户名,缺少分数,用户名。
答案 0 :(得分:1)
您不应该将业务规则错误视为连接错误,也就是说,应该在服务器端处理这些错误,并向客户端返回“成功“使用您定义的内部错误代码进行响应。
我不知道RoR,它可能让你在响应中定义错误代码,但在我的情况下(不使用RoR),我们创建了一个带有错误代码的响应类,该错误代码被序列化并返回给客户端。之后,WWW类调用将验证错误代码的解析器。此外,WWW会监视WWW.error上的连接错误。