Unity-协程
协程的简单实现
一般的程序执行都是线性的,也就是必须一行一行的执行代码。
使用Unity提供的协程,就可以类似于开辟另一条线程,调整根据你所写的代码,调整下一行代码执行的时间。
项目示例
下面的例子是一个 U3D Demo 中的代码,实现最简单的 Enemy 追击 Player 的功能。
IEnumerator MoveToAttackTarget()
{
agent.isStopped = false; // agent is NavMeshComponent
transform.LookAt(attackTarget.transform);
while(Vector3.Distance(attackTarget.transform.position,transform.position)>2)
{
agent.destination = attackTarget.transform.position; //Move to attack target
yield return null;
}
agent.isStopped = true;
if(LastAttackTime<0) //Attack
{
anim.SetTrigger("Attack");
LastAttackTime = 0.5f;
}
}
更多可能 - Update优化
使用协程模拟Update函数
protected virtual void Start()
{
StartCoroutine(IEUpdate());
}
protected virtual IEnumerator IEUpdate()
{
while(true)
{
yield return null;
//需要每帧执行的语句
}
}
相对于Update的优点(仅个人见解):
- 可以随时停止调用
- 在只调用一次的方法中启动一段每帧执行的代码片段
深入Unity Coroutine
深入Unity Coroutine - 知乎 (zhihu.com)
标签:协程,transform,agent,Update,Unity,attackTarget From: https://www.cnblogs.com/MMMMrD/p/17832326.html