首页 > 其他分享 >Unity-协程

Unity-协程

时间:2023-11-14 19:24:21浏览次数:29  
标签:协程 transform agent Update Unity attackTarget

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的优点(仅个人见解):

  1. 可以随时停止调用
  2. 在只调用一次的方法中启动一段每帧执行的代码片段

深入Unity Coroutine

深入Unity Coroutine - 知乎 (zhihu.com)

标签:协程,transform,agent,Update,Unity,attackTarget
From: https://www.cnblogs.com/MMMMrD/p/17832326.html

相关文章

  • Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器
    Unity3D是一款强大的游戏开发引擎,可以用于创建各种类型的游戏。在游戏开发过程中,经常需要与服务器进行通信来实现一些功能,比如保存和加载游戏数据、实现多人游戏等。本文将介绍如何使用Unity引擎和C#语言搭建自己的服务器,并给出技术详解以及代码实现。对惹,这里有一个游戏开发交流......
  • Unity播放Hap格式视频 (大分辨下流畅播放以及帧同步解决方案)
    前言:之前对于项目上播放大分辨率视频(特别是大于4k分辨率的)常常会感觉相当的头疼,最开始使用的是Unity自带的VideoPlayer,发现效果并不理想,更换为AVPro后发现播放是流畅了但不能操作视频快进,只要一快进就会出现卡顿,最后偶然间发现了一款用于播放Hap格式视......
  • Unity MMORPG 背包系统如何设计
    前言MMORPG游戏中背包系统是很重要的一个模块,大部分的背包系统的讲解,都是讲如何设计UI,如何显示这些,其实这些东西并不是背包系统的核心,接下来我们来分析一下背包系统的数据结构如何设计,能让策划和程序很好的工作,以及非常方便的扩展。对惹,这里有一个游戏开发交流小组,希望大家可......
  • Unity Android Studio 设置自启动应用
    前言最近有需求,需把Unity软件发布到android平台后开机启动应用,在网上查了很多资料,现整理如下Unity部分新建项目,平台设置为android tips:需要勾选ExportProject以便于导入AndroidStudio,使用Unity版本为2021.3.32f1AndroidStudio部分 androidstudio......
  • Unity底层是如何处理C#的
    在面试中,我们经常会被问到Unity的底层是如何处理C#,本节给通过一下3个点来给大家详细的分析这个问题:(1) C#的发展历史;(2) Unity为什么用C#;(3) il2cpp解决了什么问题;  C#的发展历史 C#没有出来之前,当时Java凭借Java虚拟机+Java字节码解释执行,让Java代码移植编写......
  • unity LookRotation LookAt 功能详解
    Quaternoin的旋转函数static Quaternion LookRotation(Vector3 forward, Vector3 upwards =Vector3.up); Transform中的旋转函数void LookAt(Transform target, Vector3 worldUp =Vector3.up);void LookAt(Vector3 worldPosition, Vector3 worldUp =V......
  • unity开发——打飞碟小游戏
    unity开发——打飞碟小游戏目录unity开发——打飞碟小游戏项目地址游戏规则及要求规则要求设计模式讲解代码剖析伪代码DiskDiskDataIUserActionIActionManagerCCActionManagerPhysisFlyActionPhysisActionManagerScoreRecorderUserGUI项目地址https://github.com/goodhuahua/un......
  • Unity 计算圆的切点
    ///<summary>///计算过圆外一点的切点,在圆上的切点///</summary>///<paramname="center"></param>///<paramname="radius"></param>///<paramname="point"></param>......
  • 基于Golang协程实现流量统计系统项目开发
    基于Golang协程实现流量统计系统项目开发上一节课我们已经架设好了一个网站。,但是因为我们的网站没有流量。也生成不了大量的日志,靠我们自己点击生成那点日志也不够测试的。所以这次我们就用GO语言批量生成我们想要的日志。好了。我们开始写代码我用的IDE工具是GOLAND,没有为......
  • GO实现分布式爬虫—掌握go语言通道与协程项目架构设计
    GO实现分布式爬虫—掌握go语言通道与协程项目架构设计Go高并发微服务分布式 1.命令行的用户管理 用户信息存储        =>内存        =>结构[]map        =>用户IDnameageteladdr            [len][]map......