Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 优化Unity代码-调用重复/startcootine_C#_Unity3d - Fatal编程技术网

C# 优化Unity代码-调用重复/startcootine

C# 优化Unity代码-调用重复/startcootine,c#,unity3d,C#,Unity3d,我有一个带倒计时的电源。对于计时器,我使用InvokeRepeating。但我也可以使用StartCustomer 那么选择哪一个呢?我真的不明白有什么不同 这是我的代码: float powerUpDuration = 5; // the duration of the buff float slowMotionTimeScale = 0.5f; // slow down the player by 0.5 float defaultTime

我有一个带倒计时的电源。对于计时器,我使用InvokeRepeating。但我也可以使用StartCustomer

那么选择哪一个呢?我真的不明白有什么不同

这是我的代码:

float powerUpDuration = 5;               // the duration of the buff
    float slowMotionTimeScale = 0.5f;     // slow down the player by 0.5
    float defaultTimeScale = 1;              // the normal game speed
    private void OnTriggerEnter(Collider collision)     // player colliding with powerUp
    {
            if (collision.gameObject.tag == "Player")
            {
                    Time.timeScale = slowMotionTimeScale;     // time gets slowed
                    Time.fixedDeltaTime = Time.fixedDeltaTime * Time.timeScale;     // smooth slow down
                    InvokeRepeating("SpeedManager", 0, 1); // start countdown
            }
    }
    void SpeedManager()
    {
            if (powerUpDuration > 0)         // count to 0
            {
                    powerUpDuration--;
            }
            else              // stop countdown, set timespeed to default
            {
                    CancelInvoke("SpeedManager");
                    Time.timeScale = defaultTimeScale;
                    powerUpDuration = 5;                 // reset timer
            }
    }
invokeerepeating()
允许您以设置的间隔调用某些内容

startcroutine()

因此,使用哪一个与另一个没有多大区别。但当您需要更改功能时,它可能会发生更改

但请考虑,如果您不需要在函数中执行一些<代码>淡入淡出> /代码>,则它通常更适合于Unity的多个<代码> UpDebug()/<代码>函数。p>

InvokeRepeating()
internaly使用反射,在99.99%的场景中,反射比使用内置更新慢

决定哪个更新最适合功能

更新
:输入、平移/旋转(非物理)

FixedUpdate
:物理

LateUpdate
:摄影机移动、动画

invokererepeating()
允许您以设定的间隔调用某些内容

startcroutine()

因此,使用哪一个与另一个没有多大区别。但当您需要更改功能时,它可能会发生更改

但请考虑,如果您不需要在函数中执行一些<代码>淡入淡出> /代码>,则它通常更适合于Unity的多个<代码> UpDebug()/<代码>函数。p>

InvokeRepeating()
internaly使用反射,在99.99%的场景中,反射比使用内置更新慢

决定哪个更新最适合功能

更新
:输入、平移/旋转(非物理)

FixedUpdate
:物理

最新更新
:摄像机移动、动画

如上所述:

InvokeRepeating更易于学习和使用,但显然只能 定期做事。任何奇怪的多步骤,淡入淡出,等等 东西,你必须使用一个协同程序(不是因为一个规则)-- 因为没有办法扭转调用重复来做那件事。)我会 比如说,任何你可以使用InvokeRepeating的东西,都可以去做

我猜invokereepeating实际上只是在运行startcroutine 对你来说,有一个免费的“每X秒”延迟。所以这真的没有什么意义 你使用的不同

如上所述:

InvokeRepeating更易于学习和使用,但显然只能 定期做事。任何奇怪的多步骤,淡入淡出,等等 东西,你必须使用一个协同程序(不是因为一个规则)-- 因为没有办法扭转调用重复来做那件事。)我会 比如说,任何你可以使用InvokeRepeating的东西,都可以去做

我猜invokereepeating实际上只是在运行startcroutine 对你来说,有一个免费的“每X秒”延迟。所以这真的没有什么意义 你使用的不同


您也可以只使用
Update()
中的计时器,只需将
时间添加到计时器中。deltaTime
也可以只使用
Update()
中的计时器,只需将
时间添加到timerok中。deltaTime
以“慢动作”方式使用固定更新?但当我只需要使用一次时,它是否可行?@Garzec是的。之后只需处理掉电源。假设是这样oop@Garzec你也可以使用
Time.timeScale
获得“慢动作”效果。好的,那么在“慢动作”中我使用固定更新?但当我只需要使用一次时,它是否可行?@Garzec是的。之后只需处理掉电源。假设是这样oop@Garzec您还可以使用
Time.timeScale
获得“慢动作”效果。