2015-04-14 69 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在運行時被稱爲很多,所以出現了很多錯誤。 –