Version: 2020.3

AssetDatabase.AllowAutoRefresh

切换到手册
public static void AllowAutoRefresh ();

描述

递减 Unity 用于确定是否允许自动 AssetDatabase 刷新行为的内部计数器。

Unity 在内部将此方法和对应的 AssetDatabase.DisallowAutoRefresh 一起使用,以防止在某些操作过程中发生自动刷新。例如,Unity 的版本控制集成使用它来防止在获取新变更集时发生自动刷新。

如果要构建自己的编辑器工具,并且需要防止在自己的操作过程中发生自动刷新(例如,如果要构建与版本控制系统的自定义集成),此方法很有用。 此方法不只是简单地启用自动刷新功能。而是递减计数器,仅当计数器到达零时才允许自动刷新。它旨在用于在 AssetDatabase.DisallowAutoRefresh 调用以前禁用了自动刷新之后重新启用。

每次调用 DisallowAutoRefresh 时,都必须确保也对应地调用 AllowAutoRefresh。例如:

 AssetDatabase.DisallowAutoRefresh();
 // your code here, performed while auto-refresh is not allowed
 AssetDatabase.AllowAutoRefresh();

Unity 使用计数器而不是简单开/关布尔值的原因是,通过使用计数器,如果代码执行多个嵌套的“disable”和“enable”对,内部对不会意外地过早重新启用自动刷新。相反,每对会将计数器加一或减一,如果代码正确嵌套,则对 AllowAutoRefresh 的最终外部调用会将计数器设置为零。

重要注意事项:

此方法不会影响 AssetDatabase.Refresh 的行为。如果调用 AssetDatabase.Refresh,则资源数据库会始终执行刷新,无论是否使用此方法及其内部计数器。

此方法与 Unity Preferences 窗口中的自动刷新设置不同,该设置不修改此内部计数器。如果禁用了 Unity 的自动刷新偏好设置,则调用 Allow 和 Disallow 仍会修改内部计数器,但是编辑器不会自动刷新,无论内部计数器是否为零。

代码绝不应该使计数器降到零以下。此方法在内部计数器降到零以下时会进行断言,但仍会继续递减计数器。请注意这一点,因为如果不按照与 Disallow 相同的次数来调用此方法,则意味着自动刷新不起作用。

另请参阅:AssetDatabase.DisallowAutoRefresh