我是否需要担心调用Repaint();多次?

时间:2019-05-20 23:21:42

标签: unity3d

我目前正在Unity中开发自定义EditorWindow扩展名。

我已覆盖Update()函数,当满足某些条件时,我调用Repaint();方法来相应地更新UI。

public class MyAwesomePlugin : EditorWindow
{
    ...

    public void Update()
    {
        if (condition_1())
        {
            ...
            Repaint();
        }

        if (condition_2())
        {
            ...
            Repaint();
        }
    }
}

我的问题是,在同一执行时间范围内多次调用Repaint();是否会导致多次重复重画,或者Unity是否足够聪明来聚合它们并只重画一次。

1 个答案:

答案 0 :(得分:1)

创建并设置标志变量bool isDirty = false会更好。

public void Update()
{
    bool isDirty = false;

    if (condition_1())
    {
        ...
        isDirty = true;
    }

    if (condition_2())
    {
        ...
        isDirty = true;
    }

    if (isDirty) Repaint();
}

这绕过了问题,但是任何不必要的函数调用都会对性能产生不利影响。

如果return中有Update条语句,可以将isDirty设置为True之后,将if (isDirty) Repaint();放在return之前。 / p>