Unity学习笔记<1>,脚本更新和协程任务

Update():每一帧执行时都会调用

LateUpdate():Update执行后调用

上面两种是不定频率的立即更新,会受到当前帧调用时间的影响

FixedUpdate():默认情况下,0.02s调用一次(此时间可在Editor->Project Settings->Time中TimeManager中配置);

平滑更新,虽然也会因为某一帧耗时较多而卡住,但是正常程序会优化这一过程。

 协程(模拟多线程)

【例】每次等待一秒则创建一个游戏物体,Update中写就很麻烦(要用一个Time.DeltaTime作计时器,使用判断语句来写),通过引入协程,就可以直接使用for循环来操作

StartCoroutine():协程!启动!

yield return:告诉Unity需要等待多久执行下一个循环

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Script:MonoBehaviour
{
   void Start()
   {
       StartCoroutine(CreatCube())//开始CreatCube()协程任务
   }
   IEnumerator CreatCube()
   {
       for(int i=0;i<100;i++)
       {
           //创建基本物体CreatePrimitive          
           GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position=Vector3.one*i);
           yield return new WaitForSeconds(1f);//等待一秒 
       }
   }
}

IEnumerator 可以理解为一个函数对象的容器(函数对象1 函数对象2 .....),通过使用yield关键字,将yield关键字部分的函数代码抽出并生成一个函数,放到IEnumerator容器中。

IEnumerator 可以依次执行容器中的函数

Yield Return关键字的作用就是退出当前函数,并且会保存当前函数执行到什么地方,也就上下文。

 下面是关闭协程代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Script : MonoBehaviour
{
    private Coroutine m_Coroutine = null;//创建协程类;

    IEnumerator CreatCube()
    {
        for (int i = 0; i < 100; i++)
        {
            //创建基本物体CreatPrimitive          
            GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = Vector3.one * i);
        yield return new WaitForSeconds(1f);//等待一秒 
    }


    void OnGUI()
    {
        if (GUILayout.Button("StartCoroutine"))
        {
            if (m_Coroutine != null)
                StopCoroutine(m_Coroutine);
            m_Coroutine = StartCoroutine(CreatCube());
        }
        if (GUILayout.Button("StopCoroutine"))
        {
            if (m_Coroutine != null)
                StopCoroutine(m_Coroutine);
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值