【问题标题】:Call once in Update() without boolean condition在没有布尔条件的 Update() 中调用一次
【发布时间】:2015-05-31 00:15:24
【问题描述】:

这个问题与 Unity3D C# 以及 AppGameKit C++ 有关。

如下例所示,是否建议使用布尔条件调用函数/语句一次?

Unity3D C#

bool _call = false;

void Update()
{
  if (!_call)
    {
      call = true;
      // statements
    }
}

AGK C++

bool _call = false;

void app::Loop(void)
{
  if (!_call)
    {
      _call = true;
      // statements
    }
}

我问这个是因为以下原因:

  1. 我在 Unity 和 AGK 论坛上都读到过,在更新每一帧的 Update() 函数中使用 if-else / switch 条件应尽可能少。

  2. 我很好奇是否有任何其他方式可以在 Update() 函数中调用语句/函数时只调用它们一次。如果没有,我可以让程序在 Update() / Loop() 函数中间返回到程序的 Start() / Begin() 部分,以便让函数/语句在那里被调用一次。

【问题讨论】:

  • _call 到底在做什么?这是一个非常不具描述性且模棱两可的名称。
  • “使用 if-else / switch 条件应该尽可能少” - 我认为你的意思是 if (.. .) 否则如果answers.unity3d.com/questions/337248/using-else-if.html if () else 太局限了。而且一般来说,不仅仅是Update()

标签: c# c++ unity3d


【解决方案1】:

1) 我在我的游戏中使用它,我没有问题,所以我不明白为什么在你的游戏中不能这样做

2) 您不能让程序转到 Start(),它在使用该脚本的屏幕开始时被调用一次。

【讨论】:

  • 这在我的游戏中也很有可能,我只是想知道是否有更好(也许更优化)的方法来代替 if-else 条件。我正在寻找更好的解决方案,仅此而已。
【解决方案2】:

1) 每帧有一个布尔条件不会对性能产生太大影响。也就是说,将逻辑保持在最低限度是一种很好的做法,因此这样做需要在设计方面有充分的理由。

2) 可以重新开始执行脚本。看看这个链接:OnEnable, Awake, Start order 这个链接在这里:Behaviour.enabled

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多