状态机的Unity性能:委托还是条件?

时间:2019-07-12 18:40:41

标签: c# .net unity3d

关于CPU优化,我不是专家,但我读到一般情况很糟糕,因为CPU可能会不断更改(即使不会更改),也无法优化正在运行的代码。所以这是我对Unity和状态机的看法:

通常,您有一个Update方法,该方法根据您的MonoBehaviour当前所处的状态来执行不同的操作。现在,您可以这样做:

// this is only called once when the state switches
private void switchState(State newState) {
  state = newState;
}
private void Update() {
  switch(state) {
    case IDLE:
      doIdle();
      break;
    case ATTACKING:
      doAttack();
      break;
  // [...]
  }
}

或者您可以这样做:

// this is only called once when the state switches
private void switchState(State newState) {
  switch(newState) {
    case IDLE:
      _stateUpdateDelegate = doIdle;
      break;
    case ATTACKING:
      _stateUpdateDelegate = doAttack;
      break;
// [...]
  }
}
private void Update() {
  _stateUpdateDelegate();
}

现在,我的问题不是关于状态机如何工作,而是关于在实时情况下更快的状态。我也知道“不要进行预优化”之类的东西,这也不是这个问题的范围。所以我的问题是:什么更快?为什么?(在哪里可以学到更多关于此类事物的信息?)?

0 个答案:

没有答案