【问题标题】:How to get the result of a WWWPost in unity如何统一获取 WWWPost 的结果
【发布时间】:2019-09-30 15:15:03
【问题描述】:

我正在尝试学习如何在 C# 中使用统一的 WWWForms 制作 POST。但是,在文档中尝试了一些示例之后,我仍然无法弄清楚如何获得结果,甚至不知道它是否成功发布。这是我得到的代码来自https://docs.unity3d.com/ScriptReference/WWW.html的页面

我尝试在 main 中创建一个无限循环,并在帖子完成后分配一个静态变量,但它从未被分配。起初我以为是因为控制台关闭得太快,但事实并非如此。

class Program : MonoBehaviour
{
    public string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
    IEnumerator Start()
    {
        using (WWW www = new WWW(url))
        {
            yield return www;
            Renderer renderer = GetComponent<Renderer>();
            renderer.material.mainTexture = www.texture;
            Console.WriteLine("Success");
        }
    }

    static void Main(string[] args)
    {
    }
}

我希望它在响应被发回后打印成功,但它却关闭了。

【问题讨论】:

  • WWW 现已过时。根据您的代码,您似乎想要下载图像并将其显示为纹理,对吗?您不想为此使用 WWW(两者都不发布),您可以使用 UnityWebRequest。在此处查看文档:docs.unity3d.com/Manual//UnityWebRequest-RetrievingTexture.html
  • 我明白这一点,但我正在查看一些使用 WWW 的遗留代码,所以我想了解它是如何工作的以及如何使用它。
  • 顺便说一句,static void Main(string[] args) 是不需要的。 Unity 会为你调用所有的魔法方法,并且有自己的入口点。你的将被闲置。
  • 如果你想知道它是如何工作的,那么你的代码的实现是错误的。 (Unity 文档有时有一半的代码)。IEnumerator 不能被视为一种方法。 IEnumerators 也暂停并等待yield 返回。您必须启动 coroutine 传递您的 IEnumerator 才能工作。将您的 Start IEnumerator 更改为其他内容(例如:ImageDown)并从您的 Start 方法启动一个协程。 StartCoroutine(ImageDown());

标签: c# unity3d ienumerator


【解决方案1】:

两件事

  1. IEnumerator Start() 是一个协程。这意味着它将根据需要暂停和恢复执行,由yield 返回值指定。如果你想把协程想象成线程,你可以,但要明白(a)它们不是,(b)它们是为你管理的。

  2. 除非附加到场景中的游戏对象,否则您的代码不会运行。

您似乎是来自非 Unity 开发的新手,static void Main 和引用控制台窗口关闭太快证明了这一点。 Unity 不是控制台应用程序,只有在适当的情况下才会调用魔术方法,在这种情况下,当每个带有此组件的 GameObject 首次初始化时。您不能只是 import Unity 并期望它像任何其他库一样工作(Unity 不是库)。

【讨论】:

  • 非常感谢,这回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多