StartCoroutine | 开启协程 |
StopAllCoroutines | 停止所有的协程 |
StopCoroutine | 停止指定的协程 |
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class API08Coroutine : MonoBehaviour {
public GameObject cube;
void Start () {
StartCoroutine(ChangeColor());
//协程方法开启后,会继续运行下面的代码,不会等协程方法运行结束才继续执行
print("hahaha");
}
//Coroutines
//1,返回值是IEnumerator
//2,返回参数的时候使用yield return null/0;
//3,协程方法的调用StartCoroutine(method())
IEnumerator ChangeColor()
{
print("hahaColor");
yield return new WaitForSeconds(3); //3秒后执行下面的代码
cube.GetComponent<MeshRenderer>().material.color = Color.blue; //设置模型颜色为红色
print("hahaColor");
yield return null;
}
}
使用Coroutine实现颜色动画渐变
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class API08Coroutine : MonoBehaviour {
public GameObject cube;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(Fade());
}
}
IEnumerator Fade()
{
for (; ; )
{
Color color = cube.GetComponent<MeshRenderer>().material.color;
Color newColor = Color.Lerp(color, Color.red, 0.02f);//插值渐变到红色
cube.GetComponent<MeshRenderer>().material.color = newColor;
yield return new WaitForSeconds(0.02f);
if (Mathf.Abs(Color.red.g - newColor.g) <= 0.01f)
{
break;
}
}
}
}
Coroutine协程的开启和关闭
第一种
public class API08Coroutine : MonoBehaviour {
private IEnumerator ie;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
ie = Fade();
StartCoroutine(ie);
}
if (Input.GetKeyDown(KeyCode.S))
{
StopCoroutine(ie);
}
}
IEnumerator Fade()
{
......
}
}
第二种,方法名
public class API08Coroutine : MonoBehaviour {
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine("Fade");
}
if (Input.GetKeyDown(KeyCode.S))
{
StopCoroutine("Fade");
}
}
IEnumerator Fade()
{
......
}
}