避免使用“更新”?

时间:2016-04-04 09:59:22

标签: c# events unity3d

我有一个单独的时间脚本,我用它来显示我的场景中的时间。它包含小时,分钟和秒变量。我想做一些指定的工作,例如,在指定时间执行代码,目前我正在做这样的事情。在更新中。我正在运行一个函数,它会连续检查时间变量,以便运行动画。

void Update()
    {
        checkTrainArriveTime();
      }
      void checkTrainArriveTime()
    {
        if (timeManager.GetComponent<Scale2>().hour == trainArriveTimeHour && timeManager.GetComponent<Scale2>().min == trainArriveTimeMin
            && isTrainArriveConditionExecute)
        {

            isTrainArriveConditionExecute = false;
            PlayAnimationClip("Start");
        }
        else if (timeManager.GetComponent<Scale2>().min != trainArriveTimeMin)
        {
            isTrainArriveConditionExecute = true;
        }
    }

随着时间的推移,此功能将播放动画。现在我有50个脚本附加到50个不同的游戏对象。它是      工作正常但绝对不是使用Update Event的正确方法。在我的代码中,有必要检查每一帧的时间     更新时额外负载。有没有有效的方法来做这个工作?。

1 个答案:

答案 0 :(得分:0)

我可以看到你的斗争。你是对的,绝对不是最好的前进方式。

我在这里可以看到的最佳选择是创建一个singleton实例的动画管理器(每个应用程序只允许一个实例)。

我建议将动画触发逻辑移动到Update AnimationManager方法。

一旦你做完了。您将能够访问其实例调用AnimationManager.getInstance()方法。

下一步是创建内部注册表,它只不过是您想要触发动画的已注册游戏对象的列表。

我不知道你的timeManager到底是什么,但我可以想象你可能是TimeManager控制器的一个实例,你拖放到你的公共timeManager属性上。考虑将其转换为单身,或者至少将timeManager.GetComponent<Scale2>()的分配转移到Awake()方法。

GetComponent() GetComponent`内部调用 Update()', as it has an impact on performance.方法非常重要。

希望它有所帮助。