C# 优化Unity代码-调用重复/startcootine
我有一个带倒计时的电源。对于计时器,我使用InvokeRepeating。但我也可以使用StartCustomer 那么选择哪一个呢?我真的不明白有什么不同 这是我的代码: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
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
获得“慢动作”效果。