unity GET/POST 包装器 [英] Unity GET/POST Wrapper
问题描述
这是一个 Unity3d in C# 问题.目标是创建一个对象,以便我可以传入 URL 并通过 GET
接收数据,我将创建的对象将是 WWW 逻辑的包装器.我也想要一个POST"对象,我可以在其中提供一个 url 和一个键值对的字典"作为帖子争论.Sooo...我们最终想要这样的东西:
This is a Unity3d in C# question. The goal is to create an object such that I can pass in a URL and receive data via GET
, an object that I would create the would be a wrapper for the WWW logic. I would also like a 'POST' object too, where I could supply a url and a 'Dictionary' of key-value pairs as the post arguements. Sooo... we ultimately would like something like this:
get_data = GET.request("http://www.someurl.com/somefile.php?somevariable=somevalue");
和
post_data = POST.request("http://www.someurl.com/somefile.php", post)
// Where post is a Dictionary of key-value pairs of my post arguments.
为了尝试实现这一点,我使用了 WWW
对象.现在,为了让 WWW
对象有时间下载,我们需要在 MonoBehaviour
对象和 yield
对象中发生这种情况.所以我得到了这个,它有效:
To try and accomplish this, I use the WWW
object. Now, in order to give the WWW
object time to download, we need to have this happening inside a MonoBehaviour
object and yield
the results. So I got this, which works:
public class main : MonoBehavior
{
IEnumerator Start()
{
WWW www = new WWW("http://www.someurl.com/blah.php?action=awesome_stuff");
yield return www;
Debug.Log(www.text);
}
}
我真正想要的是:
public class main : MonoBehavior
{
IEnumerator Start()
{
GET request = new GET("http://www.someurl.com/blah.php?action=awesome_stuff");
Debug.Log(request.get_data()); // Where get_data() returns the data (which will be text) from the request.
}
}
现在我将主脚本附加到层次结构中的单个 GameObject
(称为 root).我是否需要将 GET
脚本附加到根 GameObject
上?我可以从 main
动态地做到这一点吗?
Now I have the main script attached to the single GameObject
in the hierarchy (called root). Do I need to have the GET
script attached to the root GameObject
as well? Can I do that dynamically from main
?
最终,我需要一个解决方案,让我能够轻松发送 GET
和 POST
请求.
Ultimately, I need a solution that allows me to easily send GET
and POST
requests.
干杯!
推荐答案
啊,明白了!
我的问题是对 MonoBehaviour 和 Coroutines 的工作方式的误解.解决方法很简单.
My problem was a misunderstanding of how MonoBehaviour and Coroutines worked. The solution is very simple.
在编辑器中,创建一个空的 GameObject.我将其命名为 DB.然后将以下脚本附加到它:
In the editor, make an empty GameObject. I named it DB. Then attach the following script to it:
using System;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
class DB : MonoBehaviour
{
void Start() { }
public WWW GET(string url)
{
WWW www = new WWW(url);
StartCoroutine(WaitForRequest(www));
return www;
}
public WWW POST(string url, Dictionary<string, string> post)
{
WWWForm form = new WWWForm();
foreach (KeyValuePair<String, String> post_arg in post)
{
form.AddField(post_arg.Key, post_arg.Value);
}
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www));
return www;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
// check for errors
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
}
}
然后,在主脚本的启动函数中,您可以这样做!
Then, in your main script's start function, you can do this!
private DB db;
void Start()
{
db = GameObject.Find("DB").GetComponentInChildren<DB>();
results = db.GET("http://www.somesite.com/someAPI.php?someaction=AWESOME");
Debug.Log(results.text);
}
还没有测试 POST 请求,但现在所有的逻辑都被包装了!发送 HTTP 请求到你心中的愿望,干杯!
Haven't tested the POST requests, but now all the logic is wrapped up! Send HTTP requests to your hearts desire, cheers!
这篇关于unity GET/POST 包装器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!