Intro
参考视频:# Unity async / await: Coroutine’s Hot Sister [C# & Unity]
协程是Unity提供的异步解决方法,但是实际应用时有诸多不便与不优雅之处。本文将用几个例子对比参照协程与await/async
关键字。当然,Unity指出,在Unity中写多线程代码应当参考Unity - Manual: C# Job System
旧例
利用协程转动三个物体,并使得这三个物体逐个停止。
给出下列协程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| using System.Collections; using UnityEngine;
public class Shape: MonoBehaviour() { public IEnumerator RotateForSeconds(float duration) { var end = Time.time + duration; while(Time.time < end) { transform.Rotate(new Vector3(1,1)*Time.deltaTime*150; yield return null; } } }
|
给出下列调用协程的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| using System.Collections; using UnityEngine;
public class ShapeManager: MonoBehaviour() { [SerializeField] private Shape[] _shapes;
public void BeginTest() { for(var i = 0; i<_shapes.Length;i++) { StartCoroutine(_shapes[i].RotateForSeconds(1+1*i); } } }
|