当前位置:首页 > 运营类 > (每日一题)资源数据库使用批处理使用处理

(每日一题)资源数据库使用批处理使用处理

微信用户2年前 (2023-07-07)运营类1058

the Asset

names

批处理

使用批处理可以减少在代码更改资源时所需的时间和处理量。

如果在代码中对多个资源进行更改(例如,复制或移动资源文件),则资源数据库 (Asset ) 的默认行为是依次处理每个更改,并对资源执行完整的“刷新”过程,然后再转到下一行代码。

以下示例中将更改三个资源。执行的操作是复制 、移动 和删除 :

AssetDatabase.CopyAsset("Assets/Asset1.txt", "Assets/Text/Asset1.txt");
AssetDatabase.MoveAsset("Assets/Asset2.txt", "Assets/Text/Asset2.txt");
AssetDatabase.DeleteAsset("Assets/Asset3.txt");

如果不进行批处理,Unity 会在处理每个更改后移到下一行代码。这不仅会花费不必要的时间,还会触发许多回调(如果使用批处理的话,则可以避免)。

另一种替代做法是可以指定资源数据库应该一次性处理一组操作。为此,需要告诉资源数据库在您进行更改之前暂停其正常行为,然后在您更改完成后告诉它恢复。

具体而言,如果您要执行以下任意多项操作,则应尝试使用批处理:

处理操作的方法

要指定资源数据库应该一次性处理一组操作,可以使用以下方法:. 和 .。

.

此方法告诉资源数据库您正在开始对资源进行编辑。资源数据库进入暂停状态,并在您调用相应的 方法告诉您已完成之前,不会对资源进行任何进一步的更改。

.

完成所有的资源更改后,请调用此方法告诉资源数据库处理您的更改并恢复其立即自动处理更改的正常行为。然后,资源数据库以批处理方式处理您在 和 之间进行的更改,这种处理方法比逐个处理的速度要快。

嵌套调用 和

如果您对 进行了多次调用,必须对 进行相应次数的调用,使资源数据库恢复其自动处理更改的正常行为。

这是因为这些函数会递增和递减计数器,而不是充当简单的开/关功能。调用 将递增计数器,而调用 将递减计数器。当计数器达到零时,资源数据库将恢复其正常行为。

Unity 使用计数器而不是简单开/关布尔值的原因是,通过使用计数器,如果您的代码执行多个嵌套的“start”和“stop”对,内部对不会意外地过早恢复资源数据库的正常行为。相反,每对会将计数器加一或减一,并且如果您的代码正确嵌套,则对 的最终外部调用会将计数器设置为零。

注意:您的代码绝不应该使计数器降到零以下。这样做会产生错误。

示例

以下示例显示了这些方法的推荐使用方式:

using UnityEditor;
public class StartStopAssetEditingExample : MonoBehaviour
{
    [MenuItem("APIExamples/StartStopAssetEditing")]
    static void CallAssetDatabaseAPIsBetweenStartStopAssetEditing()
    {
        try
        {
            //将资源数据库置于大多数 API
            //都暂停导入的状态
            AssetDatabase.StartAssetEditing();
            AssetDatabase.CopyAsset("Assets/Asset1.txt", "Assets/Text/Asset1.txt");
            AssetDatabase.MoveAsset("Assets/Asset2.txt", "Assets/Text/Asset2.txt");
            AssetDatabase.DeleteAsset("Assets/Asset3.txt");
        }
        finally
        {
            //在 "finally" 代码块中添加
            //对 StopAssetEditing 的调用可确保
            //在离开此函数时重置 AssetDatabase 状态
            AssetDatabase.StopAssetEditing();
        }
    }
}

使用 try… 进行资源编辑

调用 . 时,Unity 会将整个 的 置于暂停状态。因此,如果您没有对 . 进行相应的调用,则在涉及任何与资源相关的操作(导入、刷新等)时, 会看起来无响应,并需要重新启动 以恢复其正常运行状态。

不使用 try … 代码块时,如果任何用于修改资源的代码导致了错误,则可能会阻止调用 。为了避免这种情况,请将这些调用与 一起包裹在一个 try… 代码块中,然后将资源修改代码包含在 try 代码块中,而将 调用放在 代码块中。这样可以确保,如果在 try 代码块中进行更改时发生了任何异常,仍可以保证将会调用 .。

the Asset

names

免责声明
    本网站在国家相关法律法规规定的范围内,只按现有状况提供文章发布第三方网络平台服务,本网站及其所有者非交易一方,也非交易任何一方之代理人或代表;同时,本网站及其所有者也未授权任何人代表或代理本网站及其所有者从事任何网络交易行为或做出任何承诺、保证或其他类似行为,除非有明确的书面授权。
    鉴于互联网的特殊性,本网站无法鉴别和判断相关交易各主体之民事权利和行为能力、资质、信用等状况,也无法鉴别和判断虚拟交易或正在交易或已交易之虚拟物品来源、权属、真伪、性能、规格、质量、数量等权利属性、自然属性及其他各种状况。因此,交易各方在交易前应加以仔细辨明,并慎重考虑和评估交易可能产生的各项风险。

扫描二维码推送至手机访问。

版权声明:本文由点度点度金讯时代-BLOG发布,如需转载请注明出处。

本文链接:https://lmwmm.com/post/1159.html

分享给朋友:

“(每日一题)资源数据库使用批处理使用处理” 的相关文章

《暗黑破坏神:不朽》肝爆要10年,氪金更是...

《暗黑破坏神:不朽》肝爆要10年,氪金更是...

6 月初,暴雪出品的手游《暗黑破坏神:不朽》(以下简称《不朽》)“终于”于国际服上线,由于“那个”知名的梗,国内玩家都翘首以盼着它能有什么表现。当然,渴望着它能翻身的算少数,许多人还是想看个笑话。看笑话的成了,无奈中带着些许的滑稽。截至 6...

台媒曝王力宏乱战3人欢爱照!范玮琪徐若瑄动作娴熟,尺度太辣眼

台媒曝王力宏乱战3人欢爱照!范玮琪徐若瑄动作娴熟,尺度太辣眼

范玮琪徐若瑄王力宏等4人欢爱照曝光,画面太辣眼,尺度太大。这些天,娱乐圈的爆炸性新闻多到数不胜数。陈建州的事情还没结束,已经在热搜上挂了好几天了,一家子也跟着陷入舆论的漩涡,一起被抵制。继范玮琪公开力挺陈建州之后,其演唱会也遭到了网友的抵制...

俄媒:对俄制裁“上头”的恶果初步显现

俄媒:对俄制裁“上头”的恶果初步显现

当今世界哪个国家遭受制裁最多?俄罗斯。 俄罗斯卫星通讯社8日援引某制裁跟踪平台数据报道称,自2014年以来,俄罗斯共计受到5532项制裁,远超其后的伊朗和叙利亚等国,而其中2778项制裁又是在今年2月22日以来新增加的。 2月24日,俄罗...

联合国安理会就美国阿尔巴尼亚提交关于乌克兰局势的决议草案进行表决

联合国安理会就美国阿尔巴尼亚提交关于乌克兰局势的决议草案进行表决

当地时间2月25日,联合国安理会就美国、阿尔巴尼亚提交的关于乌克兰局势的决议草案进行投票。由于俄罗斯投票否决 ,该决议草案未能通过。 联合国安理会25日举行会议,就美国等提出的关于乌克兰当前局势的决议草案进行表决。中国常驻联合国代表张军出席...

俄罗斯暂停向波兰供应天然气27日起暂停供应石油

俄罗斯暂停向波兰供应天然气27日起暂停供应石油

当地时间26日,保加利亚和波兰表示,俄罗斯将从27日起暂停向两国供应天然气。据塔斯社此前报道,俄罗斯停止了向波兰供应石油。 今日俄罗斯报道截图 保加利亚能源部26日发表声明说,俄罗斯当天早些时候通知保方将从27日开始暂停供应天然气,对此...

普京:西方冻结俄罗斯外汇储备等同于宣布对俄债务违约

普京:西方冻结俄罗斯外汇储备等同于宣布对俄债务违约

当地时间16日,俄罗斯总统普京发表电视讲话。 普京表示,特别军事行动进展顺利,正在按计划执行。俄军虽然接近基辅和乌克兰其他城市,但是没有占领乌克兰的计划和目的。 俄罗斯有充分理由相信生物武器的部件已在乌克兰被造出来 普京说,乌克兰有着一个...