2015-04-14 45 views
0

首先,我是Unity新手,我正在开发Unity 5.0.0。我一直在研究Unity文档中的WWW类,并关注它,但尚未得到它的工作。我看了其他问题,并搜索了很多,无法使其工作。这是我在APImanager拿到代码:WWW类不能在团结中工作

using UnityEngine; using System.Collections; 

public class apiManager : MonoBehaviour 

{ 

public string url = "URL"; 

public string temp; 

public void Start(){ 
    WWW w = new WWW (url); 
    StartCoroutine (WaitForRequest (w)); 

} 
IEnumerator WaitForRequest(WWW w){ 
    yield return w; 
    temp = w.text.ToString(); 
} 
public string getTemp(){ 
    return temp; 
} 

} 

而且在我要拨打的字符串getTemp方法,这个和标签这是行不通的显示数据我的主要文件。什么都没有出现,我正在努力弄清楚。 (我想显示在标签中的数据为文本(字符串)。)

public class main : MonoBehaviour { 

apiManager myApiManager = new apiManager(); 

void OnGUI() { 

GUI.Label(ScreenPosition(0, 500, 300,300), myApiManager.getTemp()); 

} 
} 

能请您提供信息,它应该如何工作,或者如果我错过了什么?谢谢。

回答

0

问题是您正在创建协同方法之外的WWW对象。内WaitForRequest移动它:

using UnityEngine; using System.Collections; 

public class apiManager : MonoBehaviour 

{ 

public string url = "URL"; 

public string temp; 

public void Start(){ 
    StartCoroutine (WaitForRequest (w)); 
} 

IEnumerator WaitForRequest(){ 
    WWW w = new WWW (url); 
    yield return w; 
    temp = w.text.ToString(); 
} 
public string getTemp(){ 
    return temp; 
} 

} 

而且你不应该从你的主要monobehavior中创建一个monobehavior对象。相反,将其定义为公共财产,并在编辑器中分配(您也可以在运行时使用FindObjectOfType):

public class main : MonoBehaviour { 

public apiManager myApiManager; 

void OnGUI() { 

GUI.Label(ScreenPosition(0, 500, 300,300), myApiManager.getTemp()); 

} 
} 
+0

但是,当我下移WWW对象我上StartCoroutine方法的错误..括号内因为w在我呼吁它后初始化... – Pajala

+0

另外,我发现这个问题。由于没有参数,因此需要删除“w”。但我得到这个错误信息......实际上,它很多: NullReferenceException:未将对象引用设置为对象的实例 main.OnGUI()(在Assets/Scripts/main.cs:680) – Pajala

+0

Did you将属性myApiManager分配给Unity编辑器中的任何内容?您需要将apiManager脚本拖放到游戏对象上,然后将该游戏对象拖到编辑器中的myApiManager属性上。有意义的是,由于onGui在运行时被称为很多,所以出现了很多错误。 –