• Unity 之 使用定时调用与Update 正常帧更新的运行答疑


    在这里插入图片描述

    疑惑

    就是说,当我们在Start 函数里面定义了一个InvokeRepeating 函数,那么我们又在Update 定义了一个基本操作,想联合控制物体一个往返的一个运动时,我们应该怎么办?
    就是说系统是怎么编译的呢?

    代码辨析

    这里我提供两个代码,大家看一下区别

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class SimpleLogic : MonoBehaviour
    {
        public float speed = 1f;
    
        // Start is called before the first frame update
        void Start()
        {
            InvokeRepeating("DoSomesing", 2,2);
        }
    
        // Update is called once per frame
        void Update()
        {
            Debug.Log("***this is Update ***" + Time.time);
    
            transform.Translate(0, speed * Time.deltaTime, 0, Space.Self);
        }
        void DoSomesing()
        {
            Debug.Log("***use Dosing ***"+ Time.time);
            //transform.Translate(0, -1*speed * Time.deltaTime, 0, Space.Self);
            speed = 0 - speed;
        }
    }
    
    
    另一个代码和它非常像
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

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

    public class SimpleLogic : MonoBehaviour
    {
    public float speed = 1f;

    // Start is called before the first frame update
    void Start()
    {
        InvokeRepeating("DoSomesing", 2,2);
    }
    
    // Update is called once per frame
    void Update()
    {
        Debug.Log("***this is Update ***" + Time.time);
    
        transform.Translate(0, speed * Time.deltaTime, 0, Space.Self);
    }
    void DoSomesing()
    {
        Debug.Log("***use Dosing ***"+ Time.time);
        transform.Translate(0, -1*speed * Time.deltaTime, 0, Space.Self);
        //speed = 0 - speed;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    }

    这两个代码就是一行的差别,那么你知道哪一个可以真正实现往返运动吗?

    其实第一个代码正确

    具体解释

    在这里插入图片描述

    就是说我们的Update 是每一帧都运行,而InvokeRepeating 只有特定的时间才运行,那么我们把控制物体运行的关键点速度就只能放在InvokeRepeating 里面了,而对于控制前进的代码就应该放在Update 中,毕竟每一帧都要前进的!

  • 相关阅读:
    JVM相关面试题(每日一练)
    图像与点云三维重建算法
    尚医通_第10章_后台医院管理模块
    HTML复习笔记
    swoole是怎么提高php系统的性能的
    glog与pugi::xml使用方法
    鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))
    win11部署自己的privateGpt(2024-0304)
    A (1087) : DS单链表--类实现
    日联科技在科创板过会:上半年营收约2亿元,宁德时代等为股东
  • 原文地址:https://blog.csdn.net/weixin_74850661/article/details/132773501