Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading.Tasks;
public class AsyncAwaitTask : MonoBehaviour
{
public GameObject go;
public List<GameObject> gos = new List<GameObject>();
async void Update()
{
await AsyncMethod();
}
int cycles = 10000;
async Task AsyncMethod()
{
for (int i = 0; i < cycles; i++)
{
Vector3 pos = new Vector3(Random.Range(0, 100), 2f, Random.Range(0, 100));
GameObject obj = Instantiate(go, pos, Quaternion.identity);
gos.Add(obj);
}
}
}
using System.Collections.Generic;
using UnityEngine;
using System.Threading.Tasks;
public class AsyncAwaitTask : MonoBehaviour
{
public GameObject go;
public List<GameObject> gos = new List<GameObject>();
async void Update()
{
await AsyncMethod();
}
int cycles = 10000;
async Task AsyncMethod()
{
for (int i = 0; i < cycles; i++)
{
Vector3 pos = new Vector3(Random.Range(0, 100), 2f, Random.Range(0, 100));
GameObject obj = Instantiate(go, pos, Quaternion.identity);
gos.Add(obj);
}
}
}
Изначально хотел потоки изучить, но так такая жесть, нельзя использовать api Unity вне главного потока! У меня нет тяжелых вычислений, которые можно было бы изолировать вне основного потока. Самое тяжелое связано с getPosition/setPosition, setActive и пр- как раз то, что не работает из сторонних потоков. Я подумал, ну их на фиг, эту мультипоточность, буду асинхронные штуки изучать. В await'ах вызовы Unity api вроде должны работать.