unity GET/POST 包装器 [英] Unity GET/POST Wrapper

查看:23
本文介绍了unity GET/POST 包装器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个 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?

最终,我需要一个解决方案,让我能够轻松发送 GETPOST 请求.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆