<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Projects on 云笺小筑</title>
    <link>https://imrcao.top/projects/</link>
    <description>Recent content in Projects on 云笺小筑</description>
    <generator>Hugo -- 0.122.0</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 29 May 2026 17:13:09 +0800</lastBuildDate>
    <atom:link href="https://imrcao.top/projects/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>预演系统-Pak资产挂载流程记录</title>
      <link>https://imrcao.top/projects/0.1%E9%A2%84%E6%BC%94%E7%B3%BB%E7%BB%9F-pak%E8%B5%84%E4%BA%A7%E6%8C%82%E8%BD%BD%E6%B5%81%E7%A8%8B%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Fri, 29 May 2026 17:13:09 +0800</pubDate>
      <guid>https://imrcao.top/projects/0.1%E9%A2%84%E6%BC%94%E7%B3%BB%E7%BB%9F-pak%E8%B5%84%E4%BA%A7%E6%8C%82%E8%BD%BD%E6%B5%81%E7%A8%8B%E8%AE%B0%E5%BD%95/</guid>
      <description>这里记录程序线执行流程
一、pak资产挂载流程
目前有两个挂载入口：
0.1加载本地pak资产 /Game/Blueprints/UI/CoreUI/WPT_AssetLibraryMenu.WPT_AssetLibraryMenu蓝图中ConstructSkuClass函数调用void UCPT_UnitSkuButton::RequestMountPak(const FString&amp;amp; LocalPakPath)函数进行pak挂载请求；
0.2下载云端资产 void FCPT_AssetDownloadService::OnDownloadFinished函数中调用void UCPT_UnitSkuButton::RequestMountPak(const FString&amp;amp; LocalPakPath)函数进行pak挂载请求。
挂载委托关系梳理：
UCPT_UnitSkuButton类 有代理：OnMountPakRequested（声明：DECLARE_DELEGATE_TwoParams(FOnMountPakRequested, UCPT_UnitSkuButton*, const FString&amp;amp;);） 有函数： void UCPT_UnitSkuButton::RequestMountPak(const FString&amp;amp; LocalPakPath) { OnMountPakRequested.ExecuteIfBound(this, LocalPakPath); }
UCPT_AssetLibraryMenu类 有代理：DE_MountPakRequested（声明DECLARE_DELEGATE_TwoParams(FOnPakMountRequested, UCPT_UnitSkuButton*, const FString&amp;amp;)） 有函数： void UCPT_AssetLibraryMenu::RegisterSkuButton(UCPT_UnitSkuButton* Button) { Button-&amp;gt;OnMountPakRequested.BindLambda([this](UCPT_UnitSkuButton* Btn, const FString&amp;amp; PakPath) { DE_MountPakRequested.ExecuteIfBound(Btn, PakPath); }); }
UCPT_MainUI类 在函数void UCPT_MainUI::LoadLocalAssets()中进行了绑定： LeftMenuBar-&amp;gt;AssetLibraryMenu-&amp;gt;DE_MountPakRequested.BindUObject(this, &amp;amp;UCPT_MainUI::HandlePakMountRequested);
流程如下： 1、首先会在函数void UCPT_MainUI::LoadLocalAssets()中绑定DE_MountPakRequested代理。
2、然后在构建资产缩略图按钮时会调用RegisterSkuButton注册代理。
请求挂载：RequestMountPak -&amp;gt; 由于在（2）中绑定了lambda函数，所以会执行DE_MountPakRequested -&amp;gt; 由于在（1）中绑定代理，所以最终执行：HandlePakMountRequested。
流程图/拓扑图
整体挂载流程拓扑图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ┌─────────────────────────────────────────────────────────────────────────────┐ │ Pak 资产挂载流程总览 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ 入口A：启动时加载本地pak 入口B：下载云端资产 │ │ ┌─────────────────────┐ ┌──────────────────────┐ │ │ │ UCPT_MainUI:: │ │ UCPT_UnitSkuButton:: │ │ │ │ LoadLocalAssets() │ │ RequestDownload() │ │ │ └─────────┬───────────┘ └──────────┬───────────┘ │ │ │ │ │ │ │ 读取本地清单 入队下载 │ │ │ │ manifest_cache.</description>
    </item>
  </channel>
</rss>
