版权声明:未经本人同意不得转载 https://blog.csdn.net/jjjndk1314/article/details/84980770
练习 :物体本身是白色,当点击攻击按钮后,物体变红,1秒后变回原来的颜色
public class ChangeColor : MonoBehaviour
{
private Color oldColor;
private MeshRenderer render;
private void Start(){
render = this.GetComponent<MeshRenderer>();
oldColor = render.material.color;
}
private void Damage(){
StartCoroutine("ChangeColorFunc"); //调用
// StartCoroutine(ChangeColorFunc()); //函数参数调用
// StopCoroutines();只能停止一字符串启动的协程
}
private IEnumerator ChangeColorFunc() { //定义协程
render.material.color = Color.red;
yield return new WaitForSeconds(1);
render.material.color = oldColor;
}
private void OnGUI()
{
if (GUILayout.Button("攻击"))
Damage();
}
}
多个路点巡逻:每到一点等待一段时间再继续巡逻
/// <summary>
/// 路点巡逻
/// </summary>
public class PathTest : MonoBehaviour{
public Transform[] points;//路点
public float speed = 5;
private bool loop = true;
private void OnGUI() {//找到一个路点等待2秒,并且可以循环巡逻
if (GUILayout.Button("开始"))
StartCoroutine(MoveToPath());
else if (GUILayout.Button("停止"))
StopAllCoroutines();//停止本对象中所有协程
}
private IEnumerator MoveToPath(){
do
{
foreach (var point in points)
{
//协程嵌套
//找到目标点后再找下一个点,等待MoveToTarget()方法执行结束后再启用协程
yield return StartCoroutine(MoveToTarget(point.position));
yield return new WaitForSeconds(2);
}
} while (loop);
}
//找目标点,不是一次,而是分多次,所以此处适宜用协程
private IEnumerator MoveToTarget(Vector3 target){
while (transform.position != target){
transform.position = Vector3.MoveTowards(transform.position, target,
speed * Time.deltaTime);
yield return new WaitForFixedUpdate();
}
//yield return new WaitForSeconds(2);
}
}