【发布时间】:2015-08-01 05:41:23
【问题描述】:
我是 Unity 新手,我不知道如何在 unity 中创建 callBack function。
现在我正在做的是查询以从parse.com 获取数据。当我设置禁用/启用任何gameobject 时,数据正在正确但在相同的功能中,然后我得到主线程的错误。确切的错误信息是:-
错误-
SetActive 只能从主线程调用。 加载场景时,构造函数和字段初始化程序将从加载线程中执行。 不要在构造函数或字段初始化程序中使用此函数,而是将初始化代码移至 Awake 或 Start 函数。
我用来获取数据的以下代码/函数。
public void GetTop10ScoreClassic()
{
List<string> fbscores=new List<string>();
List<string> fbplayer=new List<string>();
int i = 0;
int rank = 0;
// Debug.Log (PlayerPrefs.GetString ("FBUserId"));
Debug.Log ("Classic top 10 1");
var query = ParseObject.GetQuery ("ClassicFacebookScore").OrderByDescending("score").Limit(10).WhereContainedIn("userId",FBLogin.friendIDsFromFB);
query.FindAsync().ContinueWith(t =>
{
Debug.Log ("Classic top 10 2");
comments = t.Result;
Debug.Log(t.Result);
foreach (var obj in comments) {
i++;
int score = obj.Get<int>("score");
Debug.Log(score);
string playerName = obj.Get<string>("playerName");
Debug.Log(playerName);
string playerId=obj.Get<string>("userId");
Debug.Log(playerId);
fbscores.Add(score.ToString());
fbplayer.Add(playerName);
if(playerId==userId)
{
rank=i;// to highlight the user's score
}
}
//enable the colliders
foreach (BoxCollider2D colliders in Userrankscore.instance.myColliders)
colliders.enabled = true;
FbLeaderboard.instance.NetworkError = false;
scoreapp42.instance.loadingwindow.SetActive (false);
//Pass the list of score;
App42Score.instance.list (fbscores,fbplayer,"fb",Convert.ToInt32(rank));
if(t.IsFaulted)
{
//enable the colliders
foreach (BoxCollider2D colliders in Userrankscore.instance.myColliders)
colliders.enabled = true;
if(FbLeaderboard.instance.NetworkError)
{
scoreapp42.instance.errorwindow.SetActive(true);
scoreapp42.instance.loadingwindow.SetActive (false);
Debug.LogError("Network Error");
}
foreach(var e in t.Exception.InnerExceptions) {
ParseException parseException = (ParseException) e;
Debug.Log("Error message " + parseException.Message);
Debug.Log("Error code: " + parseException.Code);
}
}
});
}
【问题讨论】:
标签: c# multithreading parse-platform unity3d callback