Я сделал звонок в Firebase, чтобы получить случайную фотографию (так как у нас есть категории фотографий, сначала я пытаюсь получить случайную категорию, а затем случайную фотографию из нее).После этого я хочу сделать асинхронный UnityWebRequest, чтобы получить фотографию и добавить ее в качестве текстуры.Код попадает внутрь Задачи, но вызов базы данных никогда не выполняется.Я попробовал код, чтобы получить изображение отдельно, и он работал просто отлично.Я также пытался использовать делегат и действие, но не сильно помог.Я все еще новичок в C # и Unity, так что мой код не так хорош.Буду признателен за все отзывы.
Я попробовал код, чтобы получить изображение отдельно, и он работал просто отлично.Я также пытался использовать делегат и действие, но не сильно помог.Я все еще новичок в C # и Unity, так что мой код не так хорош.Буду благодарен за все отзывы.
// Получение случайной фотографии
асинхронная задача GetRandomPhoto () {await photosDbReference.GetValueAsync (). ContinueWith (task => {
List<string> snapshotList = new List<string>();
List<string> snapsnotList2 = new List<string>();
if(task.IsCompleted){
int catNumber = Convert.ToInt32(task.Result.ChildrenCount);
System.Random rnd = new System.Random();
int randCat = rnd.Next(0, catNumber);
foreach (DataSnapshot snapshot in task.Result.Children)
{
snapshotList.Add(snapshot.Key.ToString());
}
photosDbReference.Child(snapshotList[randCat]).GetValueAsync().ContinueWith(task2 =>{
if(task2.IsCompleted){
int photosNumber = Convert.ToInt32(task2.Result.ChildrenCount);
System.Random rnd2 = new System.Random();
int randPhoto = rnd.Next(0, photosNumber);
foreach(DataSnapshot snap2 in task2.Result.Children){
snapsnotList2.Add(snap2.Child("Dblink").Value.ToString());
}
string photoLink = snapsnotList2[randPhoto];
}
});
}
});
}
// Попытка установить фотографию в качестве текстуры public async void PutTheTexture (string url) {
Texture2D texture = await GetTexture(url);
myImage.texture = texture;
}
public async Task<Texture2D> GetTexture(string url){
Debug.Log("Started");
UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
Debug.Log("Sending request: " + url);
var asyncOp = www.SendWebRequest();
Debug.Log("Request sent");
while( asyncOp.isDone==false )
{
await Task.Delay( 1000/30 );
}
if( www.isNetworkError || www.isHttpError )
{
#if DEBUG
Debug.Log( $"{ www.error }, URL:{ www.url }" );
#endif
return null;
}
else
{
return DownloadHandlerTexture.GetContent( www );
}
}
Код попадает в Debug.Log ("Started"); внутри Задачи, но, по-видимому,запрос никогда не отправляется.