[{"data":1,"prerenderedAt":1194},["ShallowReactive",2],{"\u002F2026-02-06-send-to-unreal-texture-fix":3},{"id":4,"title":5,"body":6,"date":1179,"description":12,"extension":1180,"meta":1181,"navigation":288,"path":1187,"seo":1188,"stem":1189,"tags":1190,"__hash__":1193},"blogs\u002F_legacy\u002F2026\u002F2026-02-06-send-to-unreal-texture-fix.md","Send to unreal贴图丢失问题",{"type":7,"value":8,"toc":1174},"minimark",[9,13,24,37,41,44,50,53,56,59,62,175,181,184,191,194,794,805,814,817,1167,1170],[10,11,12],"p",{},"在使用Send to Unreal的过程中，发现对于部分模型，会出现贴图导入错误的问题。",[10,14,15,16,23],{},"目前使用的其实是第三方维护的",[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fgithub.com\u002Fpoly-hammer\u002FBlenderTools",[21],"nofollow","Send to Unreal","，因为官方的已经很久没有更新了。使用的工具的版本信息：",[25,26,27,31,34],"ul",{},[28,29,30],"li",{},"UE5.7",[28,32,33],{},"Send to Unreal 2.6.7",[28,35,36],{},"Blender4.2",[38,39,40],"h2",{"id":40},"贴图丢失",[10,42,43],{},"在进行模型导入后，部分贴图会进入一种错误的状态，当保存时会报错并提示：",[45,46,47],"blockquote",{},[10,48,49],{},"Filename '_11' resolves to 'None' and cannot be used",[10,51,52],{},"且在编辑器中无法看到贴图资产。材质和Mesh表现正常，但是重启后由于这些贴图没有保存，就会变成没有贴图的状态。",[10,54,55],{},"这个问题可以手动解决，只要在材质中打开使用的贴图，然后另存为一下就可以了。但是由于有的模型材质比较多，手动处理会非常麻烦，介于手动处理的步骤只是在使用编辑器功能，所以肯定是能自动处理的。",[38,57,58],{"id":58},"查找未保存的资产",[10,60,61],{},"引擎是有提供接口的，毕竟当点击关闭的时候编辑器会提示需要保存的资产，用这个窗口的文本直接搜索就能找到对应的代码了。",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-cpp shiki shiki-themes github-light-high-contrast github-dark monokai","\u002F\u002F A list of all packages that need to be saved\nTArray\u003CUPackage*> PackagesToSave;\nif (bSaveMapPackages)\n{\n    FEditorFileUtils::GetDirtyWorldPackages(PackagesToSave, ShouldIgnorePackageFunction);\n}\n\u002F\u002F Don't iterate through content packages if we don't plan on saving them\nif (bSaveContentPackages)\n{\n    FEditorFileUtils::GetDirtyContentPackages(PackagesToSave, ShouldIgnorePackageFunction);\n}\n","cpp","",[70,71,72,81,101,110,116,133,139,145,153,158,170],"code",{"__ignoreMap":68},[73,74,77],"span",{"class":75,"line":76},"line",1,[73,78,80],{"class":79},"sZdD5","\u002F\u002F A list of all packages that need to be saved\n",[73,82,84,88,92,95,98],{"class":75,"line":83},2,[73,85,87],{"class":86},"s0idv","TArray",[73,89,91],{"class":90},"sLXdl","\u003C",[73,93,94],{"class":86},"UPackage",[73,96,97],{"class":90},"*>",[73,99,100],{"class":86}," PackagesToSave;\n",[73,102,104,107],{"class":75,"line":103},3,[73,105,106],{"class":90},"if",[73,108,109],{"class":86}," (bSaveMapPackages)\n",[73,111,113],{"class":75,"line":112},4,[73,114,115],{"class":86},"{\n",[73,117,119,123,126,130],{"class":75,"line":118},5,[73,120,122],{"class":121},"sfUV7","    FEditorFileUtils",[73,124,125],{"class":86},"::",[73,127,129],{"class":128},"scAT4","GetDirtyWorldPackages",[73,131,132],{"class":86},"(PackagesToSave, ShouldIgnorePackageFunction);\n",[73,134,136],{"class":75,"line":135},6,[73,137,138],{"class":86},"}\n",[73,140,142],{"class":75,"line":141},7,[73,143,144],{"class":79},"\u002F\u002F Don't iterate through content packages if we don't plan on saving them\n",[73,146,148,150],{"class":75,"line":147},8,[73,149,106],{"class":90},[73,151,152],{"class":86}," (bSaveContentPackages)\n",[73,154,156],{"class":75,"line":155},9,[73,157,115],{"class":86},[73,159,161,163,165,168],{"class":75,"line":160},10,[73,162,122],{"class":121},[73,164,125],{"class":86},[73,166,167],{"class":128},"GetDirtyContentPackages",[73,169,132],{"class":86},[73,171,173],{"class":75,"line":172},11,[73,174,138],{"class":86},[10,176,177,178,180],{},"由于只关注贴图保存问题，所以使用",[70,179,167],{},"就可以了。",[38,182,183],{"id":183},"资产重新保存",[10,185,186,187,190],{},"一开始是想用",[70,188,189],{},"UEditorAssetLibrary::RenameLoadedAsset","来解决的，但是发现无论怎么修改调用方式都会出现错误。",[10,192,193],{},"与ChatGpt沟通了半天，终于找到了解决方案：",[63,195,199],{"className":196,"code":197,"language":198,"meta":68,"style":68},"language-c shiki shiki-themes github-light-high-contrast github-dark monokai","bool FixInvalidTexture(UTexture2D* Texture)\n{\n    if (!Texture)\n    {\n        UE_LOG(LogTemp, Warning, TEXT(\"FixInvalidTexture: Bad texture\"));\n        return false;\n    }\n\n    UPackage* OldPackage = Texture->GetOutermost();\n    FString OldPackageName = OldPackage->GetName();\n    FString OldTexturePath = GetPathNameSafe(Texture);\n\n    \u002F\u002F ---------- 1. 生成合法新路径 ----------\n    FString AssetName = FPackageName::GetShortName(OldPackageName);\n\n    \u002F\u002F 以数字或 _ 开头 → 修复\n    if (!FChar::IsAlpha(AssetName[0]))\n    {\n        AssetName = TEXT(\"T\") + AssetName;\n    }\n\n    FString NewPackagePath =\n        FPackageName::GetLongPackagePath(OldPackageName) \u002F AssetName;\n\n    \u002F\u002F ---------- 2. 创建新 Package ----------\n    UPackage* NewPackage = CreatePackage(*NewPackagePath);\n    if (!NewPackage)\n        return false;\n\n    \u002F\u002F ---------- 3. 重命名 UObject 到新 Package ----------\n    Texture->Rename(\n        *AssetName,\n        NewPackage,\n        REN_DontCreateRedirectors | REN_NonTransactional);\n\n    \u002F\u002F ---------- 4. 标记 & 注册 Asset ----------\n    Texture->MarkPackageDirty();\n    Texture->PostEditChange();\n\n    FAssetRegistryModule::AssetRenamed(Texture, OldTexturePath);\n    FAssetRegistryModule::AssetCreated(Texture);\n\n    \u002F\u002F ---------- 5. 保存 ----------\n    FString Filename =\n        FPackageName::LongPackageNameToFilename(\n            NewPackagePath,\n            FPackageName::GetAssetPackageExtension());\n\n    UE_LOG(LogTemp, Log, TEXT(\"FileName=%s\"), *Filename);\n\n    FSavePackageArgs TsArgs;\n    TsArgs.TopLevelFlags = EObjectFlags::RF_Public | EObjectFlags::RF_Standalone;\n    bool bSaveSuccess = UPackage::SavePackage(\n        NewPackage,\n        Texture,\n        *Filename,\n        TsArgs\n    );\n\n    return bSaveSuccess;\n}\n","c",[70,200,201,223,227,241,246,267,279,284,290,312,327,340,345,351,365,370,376,403,408,433,438,443,452,466,471,477,499,511,520,525,531,543,552,558,570,575,581,591,601,606,615,623,628,634,642,650,656,665,670,701,706,712,728,744,749,755,763,769,775,780,789],{"__ignoreMap":68},[73,202,203,207,210,213,216,220],{"class":75,"line":76},[73,204,206],{"class":205},"sGZGq","bool",[73,208,209],{"class":128}," FixInvalidTexture",[73,211,212],{"class":86},"(UTexture2D",[73,214,215],{"class":90},"*",[73,217,219],{"class":218},"sbfHu"," Texture",[73,221,222],{"class":86},")\n",[73,224,225],{"class":75,"line":83},[73,226,115],{"class":86},[73,228,229,232,235,238],{"class":75,"line":103},[73,230,231],{"class":90},"    if",[73,233,234],{"class":86}," (",[73,236,237],{"class":90},"!",[73,239,240],{"class":86},"Texture)\n",[73,242,243],{"class":75,"line":112},[73,244,245],{"class":86},"    {\n",[73,247,248,251,254,257,260,264],{"class":75,"line":118},[73,249,250],{"class":128},"        UE_LOG",[73,252,253],{"class":86},"(LogTemp, Warning, ",[73,255,256],{"class":128},"TEXT",[73,258,259],{"class":86},"(",[73,261,263],{"class":262},"sZnmU","\"FixInvalidTexture: Bad texture\"",[73,265,266],{"class":86},"));\n",[73,268,269,272,276],{"class":75,"line":135},[73,270,271],{"class":90},"        return",[73,273,275],{"class":274},"stP0Q"," false",[73,277,278],{"class":86},";\n",[73,280,281],{"class":75,"line":141},[73,282,283],{"class":86},"    }\n",[73,285,286],{"class":75,"line":147},[73,287,289],{"emptyLinePlaceholder":288},true,"\n",[73,291,292,295,297,300,303,306,309],{"class":75,"line":155},[73,293,294],{"class":86},"    UPackage",[73,296,215],{"class":90},[73,298,299],{"class":86}," OldPackage ",[73,301,302],{"class":90},"=",[73,304,305],{"class":86}," Texture->",[73,307,308],{"class":128},"GetOutermost",[73,310,311],{"class":86},"();\n",[73,313,314,317,319,322,325],{"class":75,"line":160},[73,315,316],{"class":86},"    FString OldPackageName ",[73,318,302],{"class":90},[73,320,321],{"class":86}," OldPackage->",[73,323,324],{"class":128},"GetName",[73,326,311],{"class":86},[73,328,329,332,334,337],{"class":75,"line":172},[73,330,331],{"class":86},"    FString OldTexturePath ",[73,333,302],{"class":90},[73,335,336],{"class":128}," GetPathNameSafe",[73,338,339],{"class":86},"(Texture);\n",[73,341,343],{"class":75,"line":342},12,[73,344,289],{"emptyLinePlaceholder":288},[73,346,348],{"class":75,"line":347},13,[73,349,350],{"class":79},"    \u002F\u002F ---------- 1. 生成合法新路径 ----------\n",[73,352,354,357,359,362],{"class":75,"line":353},14,[73,355,356],{"class":86},"    FString AssetName ",[73,358,302],{"class":90},[73,360,361],{"class":128}," FPackageName::GetShortName",[73,363,364],{"class":86},"(OldPackageName);\n",[73,366,368],{"class":75,"line":367},15,[73,369,289],{"emptyLinePlaceholder":288},[73,371,373],{"class":75,"line":372},16,[73,374,375],{"class":79},"    \u002F\u002F 以数字或 _ 开头 → 修复\n",[73,377,379,381,383,385,388,390,394,397,400],{"class":75,"line":378},17,[73,380,231],{"class":90},[73,382,234],{"class":86},[73,384,237],{"class":90},[73,386,387],{"class":128},"FChar::IsAlpha",[73,389,259],{"class":86},[73,391,393],{"class":392},"sQA8F","AssetName",[73,395,396],{"class":86},"[",[73,398,399],{"class":274},"0",[73,401,402],{"class":86},"]))\n",[73,404,406],{"class":75,"line":405},18,[73,407,245],{"class":86},[73,409,411,414,416,419,421,424,427,430],{"class":75,"line":410},19,[73,412,413],{"class":86},"        AssetName ",[73,415,302],{"class":90},[73,417,418],{"class":128}," TEXT",[73,420,259],{"class":86},[73,422,423],{"class":262},"\"T\"",[73,425,426],{"class":86},") ",[73,428,429],{"class":90},"+",[73,431,432],{"class":86}," AssetName;\n",[73,434,436],{"class":75,"line":435},20,[73,437,283],{"class":86},[73,439,441],{"class":75,"line":440},21,[73,442,289],{"emptyLinePlaceholder":288},[73,444,446,449],{"class":75,"line":445},22,[73,447,448],{"class":86},"    FString NewPackagePath ",[73,450,451],{"class":90},"=\n",[73,453,455,458,461,464],{"class":75,"line":454},23,[73,456,457],{"class":128},"        FPackageName::GetLongPackagePath",[73,459,460],{"class":86},"(OldPackageName) ",[73,462,463],{"class":90},"\u002F",[73,465,432],{"class":86},[73,467,469],{"class":75,"line":468},24,[73,470,289],{"emptyLinePlaceholder":288},[73,472,474],{"class":75,"line":473},25,[73,475,476],{"class":79},"    \u002F\u002F ---------- 2. 创建新 Package ----------\n",[73,478,480,482,484,487,489,492,494,496],{"class":75,"line":479},26,[73,481,294],{"class":86},[73,483,215],{"class":90},[73,485,486],{"class":86}," NewPackage ",[73,488,302],{"class":90},[73,490,491],{"class":128}," CreatePackage",[73,493,259],{"class":86},[73,495,215],{"class":90},[73,497,498],{"class":86},"NewPackagePath);\n",[73,500,502,504,506,508],{"class":75,"line":501},27,[73,503,231],{"class":90},[73,505,234],{"class":86},[73,507,237],{"class":90},[73,509,510],{"class":86},"NewPackage)\n",[73,512,514,516,518],{"class":75,"line":513},28,[73,515,271],{"class":90},[73,517,275],{"class":274},[73,519,278],{"class":86},[73,521,523],{"class":75,"line":522},29,[73,524,289],{"emptyLinePlaceholder":288},[73,526,528],{"class":75,"line":527},30,[73,529,530],{"class":79},"    \u002F\u002F ---------- 3. 重命名 UObject 到新 Package ----------\n",[73,532,534,537,540],{"class":75,"line":533},31,[73,535,536],{"class":86},"    Texture->",[73,538,539],{"class":128},"Rename",[73,541,542],{"class":86},"(\n",[73,544,546,549],{"class":75,"line":545},32,[73,547,548],{"class":90},"        *",[73,550,551],{"class":86},"AssetName,\n",[73,553,555],{"class":75,"line":554},33,[73,556,557],{"class":86},"        NewPackage,\n",[73,559,561,564,567],{"class":75,"line":560},34,[73,562,563],{"class":86},"        REN_DontCreateRedirectors ",[73,565,566],{"class":90},"|",[73,568,569],{"class":86}," REN_NonTransactional);\n",[73,571,573],{"class":75,"line":572},35,[73,574,289],{"emptyLinePlaceholder":288},[73,576,578],{"class":75,"line":577},36,[73,579,580],{"class":79},"    \u002F\u002F ---------- 4. 标记 & 注册 Asset ----------\n",[73,582,584,586,589],{"class":75,"line":583},37,[73,585,536],{"class":86},[73,587,588],{"class":128},"MarkPackageDirty",[73,590,311],{"class":86},[73,592,594,596,599],{"class":75,"line":593},38,[73,595,536],{"class":86},[73,597,598],{"class":128},"PostEditChange",[73,600,311],{"class":86},[73,602,604],{"class":75,"line":603},39,[73,605,289],{"emptyLinePlaceholder":288},[73,607,609,612],{"class":75,"line":608},40,[73,610,611],{"class":128},"    FAssetRegistryModule::AssetRenamed",[73,613,614],{"class":86},"(Texture, OldTexturePath);\n",[73,616,618,621],{"class":75,"line":617},41,[73,619,620],{"class":128},"    FAssetRegistryModule::AssetCreated",[73,622,339],{"class":86},[73,624,626],{"class":75,"line":625},42,[73,627,289],{"emptyLinePlaceholder":288},[73,629,631],{"class":75,"line":630},43,[73,632,633],{"class":79},"    \u002F\u002F ---------- 5. 保存 ----------\n",[73,635,637,640],{"class":75,"line":636},44,[73,638,639],{"class":86},"    FString Filename ",[73,641,451],{"class":90},[73,643,645,648],{"class":75,"line":644},45,[73,646,647],{"class":128},"        FPackageName::LongPackageNameToFilename",[73,649,542],{"class":86},[73,651,653],{"class":75,"line":652},46,[73,654,655],{"class":86},"            NewPackagePath,\n",[73,657,659,662],{"class":75,"line":658},47,[73,660,661],{"class":128},"            FPackageName::GetAssetPackageExtension",[73,663,664],{"class":86},"());\n",[73,666,668],{"class":75,"line":667},48,[73,669,289],{"emptyLinePlaceholder":288},[73,671,673,676,679,681,683,686,690,693,696,698],{"class":75,"line":672},49,[73,674,675],{"class":128},"    UE_LOG",[73,677,678],{"class":86},"(LogTemp, Log, ",[73,680,256],{"class":128},[73,682,259],{"class":86},[73,684,685],{"class":262},"\"FileName=",[73,687,689],{"class":688},"sAO_F","%s",[73,691,692],{"class":262},"\"",[73,694,695],{"class":86},"), ",[73,697,215],{"class":90},[73,699,700],{"class":86},"Filename);\n",[73,702,704],{"class":75,"line":703},50,[73,705,289],{"emptyLinePlaceholder":288},[73,707,709],{"class":75,"line":708},51,[73,710,711],{"class":86},"    FSavePackageArgs TsArgs;\n",[73,713,715,718,720,723,725],{"class":75,"line":714},52,[73,716,717],{"class":86},"    TsArgs.TopLevelFlags ",[73,719,302],{"class":90},[73,721,722],{"class":86}," EObjectFlags::RF_Public ",[73,724,566],{"class":90},[73,726,727],{"class":86}," EObjectFlags::RF_Standalone;\n",[73,729,731,734,737,739,742],{"class":75,"line":730},53,[73,732,733],{"class":205},"    bool",[73,735,736],{"class":86}," bSaveSuccess ",[73,738,302],{"class":90},[73,740,741],{"class":128}," UPackage::SavePackage",[73,743,542],{"class":86},[73,745,747],{"class":75,"line":746},54,[73,748,557],{"class":86},[73,750,752],{"class":75,"line":751},55,[73,753,754],{"class":86},"        Texture,\n",[73,756,758,760],{"class":75,"line":757},56,[73,759,548],{"class":90},[73,761,762],{"class":86},"Filename,\n",[73,764,766],{"class":75,"line":765},57,[73,767,768],{"class":86},"        TsArgs\n",[73,770,772],{"class":75,"line":771},58,[73,773,774],{"class":86},"    );\n",[73,776,778],{"class":75,"line":777},59,[73,779,289],{"emptyLinePlaceholder":288},[73,781,783,786],{"class":75,"line":782},60,[73,784,785],{"class":90},"    return",[73,787,788],{"class":86}," bSaveSuccess;\n",[73,790,792],{"class":75,"line":791},61,[73,793,138],{"class":86},[10,795,796,797,800,801,804],{},"这里传入的是贴图，执行成功时会自动将",[70,798,799],{},"_","开头的贴图名称添加",[70,802,803],{},"T","前缀进行保存。",[45,806,807],{},[10,808,809,810,813],{},"如果要修复的贴图不是这个规则的，可以在",[70,811,812],{},"以数字或 _ 开头 → 修复","处修改名称逻辑",[10,815,816],{},"结合上面的寻找未保存资产的接口使用即可：",[63,818,820],{"className":65,"code":819,"language":67,"meta":68,"style":68},"TArray\u003CUPackage*> PackagesToSave;\n\u002F\u002FFEditorFileUtils::GetDirtyWorldPackages(PackagesToSave);\nFEditorFileUtils::GetDirtyContentPackages(PackagesToSave);\nUEditorLoadingAndSavingUtils::SavePackages(PackagesToSave, false);\n\n\u002F\u002F 理论上这里其实不需要两层遍历，不过为了日志清晰，还是按照Package为单位来处理\nfor (UPackage* IterPkg : PackagesToSave)\n{\n    if (!IterPkg)\n    {\n        continue;\n    }\n\n    UE_LOG(LogTemp, Log, TEXT(\"UCommonAssetEditFuncLib::SaveBadTextures: Inspecting Package=(%p)%s\"), IterPkg, *GetFullNameSafe(IterPkg));\n    \u002F\u002F 获取包内主资源（贴图）\n    TArray\u003CUObject*> PkgObjects;\n    TArray\u003CUPackage*> PackagesTmp = { IterPkg };\n    UPackageTools::GetObjectsInPackages(&PackagesTmp, PkgObjects);\n    for (UObject* IterObj : PkgObjects)\n    {\n        \u002F\u002F 仅处理贴图\n        UTexture2D* Texture = Cast\u003CUTexture2D>(IterObj);\n        if (!Texture)\n        {\n            UE_LOG(LogTemp, Log, TEXT(\"UCommonAssetEditFuncLib::SaveBadTextures: Object no texture=(%p)%s\"), IterObj, *GetFullNameSafe(IterObj));\n            continue;\n        }\n        UE_LOG(LogTemp, Log, TEXT(\"UCommonAssetEditFuncLib::SaveBadTextures: Object=(%p)%s\"), IterObj, *GetFullNameSafe(IterObj));\n        FixInvalidTexture(Texture);\n    }\n}\n",[70,821,822,834,839,851,870,874,879,893,897,908,912,919,923,927,961,966,981,999,1017,1031,1035,1040,1063,1074,1079,1111,1118,1123,1152,1159,1163],{"__ignoreMap":68},[73,823,824,826,828,830,832],{"class":75,"line":76},[73,825,87],{"class":86},[73,827,91],{"class":90},[73,829,94],{"class":86},[73,831,97],{"class":90},[73,833,100],{"class":86},[73,835,836],{"class":75,"line":83},[73,837,838],{"class":79},"\u002F\u002FFEditorFileUtils::GetDirtyWorldPackages(PackagesToSave);\n",[73,840,841,844,846,848],{"class":75,"line":103},[73,842,843],{"class":121},"FEditorFileUtils",[73,845,125],{"class":86},[73,847,167],{"class":128},[73,849,850],{"class":86},"(PackagesToSave);\n",[73,852,853,856,858,861,864,867],{"class":75,"line":112},[73,854,855],{"class":121},"UEditorLoadingAndSavingUtils",[73,857,125],{"class":86},[73,859,860],{"class":128},"SavePackages",[73,862,863],{"class":86},"(PackagesToSave, ",[73,865,866],{"class":274},"false",[73,868,869],{"class":86},");\n",[73,871,872],{"class":75,"line":118},[73,873,289],{"emptyLinePlaceholder":288},[73,875,876],{"class":75,"line":135},[73,877,878],{"class":79},"\u002F\u002F 理论上这里其实不需要两层遍历，不过为了日志清晰，还是按照Package为单位来处理\n",[73,880,881,884,886,888,890],{"class":75,"line":141},[73,882,883],{"class":90},"for",[73,885,234],{"class":86},[73,887,94],{"class":121},[73,889,215],{"class":90},[73,891,892],{"class":86}," IterPkg : PackagesToSave)\n",[73,894,895],{"class":75,"line":147},[73,896,115],{"class":86},[73,898,899,901,903,905],{"class":75,"line":155},[73,900,231],{"class":90},[73,902,234],{"class":86},[73,904,237],{"class":90},[73,906,907],{"class":86},"IterPkg)\n",[73,909,910],{"class":75,"line":160},[73,911,245],{"class":86},[73,913,914,917],{"class":75,"line":172},[73,915,916],{"class":90},"        continue",[73,918,278],{"class":86},[73,920,921],{"class":75,"line":342},[73,922,283],{"class":86},[73,924,925],{"class":75,"line":347},[73,926,289],{"emptyLinePlaceholder":288},[73,928,929,931,933,935,937,940,943,946,948,950,953,955,958],{"class":75,"line":353},[73,930,675],{"class":128},[73,932,678],{"class":86},[73,934,256],{"class":128},[73,936,259],{"class":86},[73,938,939],{"class":262},"\"UCommonAssetEditFuncLib::SaveBadTextures: Inspecting Package=(",[73,941,942],{"class":688},"%p",[73,944,945],{"class":262},")",[73,947,689],{"class":688},[73,949,692],{"class":262},[73,951,952],{"class":86},"), IterPkg, ",[73,954,215],{"class":90},[73,956,957],{"class":128},"GetFullNameSafe",[73,959,960],{"class":86},"(IterPkg));\n",[73,962,963],{"class":75,"line":367},[73,964,965],{"class":79},"    \u002F\u002F 获取包内主资源（贴图）\n",[73,967,968,971,973,976,978],{"class":75,"line":372},[73,969,970],{"class":121},"    TArray",[73,972,91],{"class":86},[73,974,975],{"class":121},"UObject",[73,977,215],{"class":90},[73,979,980],{"class":86},"> PkgObjects;\n",[73,982,983,985,987,989,991,994,996],{"class":75,"line":378},[73,984,970],{"class":121},[73,986,91],{"class":86},[73,988,94],{"class":121},[73,990,215],{"class":90},[73,992,993],{"class":86},"> PackagesTmp ",[73,995,302],{"class":90},[73,997,998],{"class":86}," { IterPkg };\n",[73,1000,1001,1004,1006,1009,1011,1014],{"class":75,"line":405},[73,1002,1003],{"class":121},"    UPackageTools",[73,1005,125],{"class":86},[73,1007,1008],{"class":128},"GetObjectsInPackages",[73,1010,259],{"class":86},[73,1012,1013],{"class":90},"&",[73,1015,1016],{"class":86},"PackagesTmp, PkgObjects);\n",[73,1018,1019,1022,1024,1026,1028],{"class":75,"line":410},[73,1020,1021],{"class":90},"    for",[73,1023,234],{"class":86},[73,1025,975],{"class":121},[73,1027,215],{"class":90},[73,1029,1030],{"class":86}," IterObj : PkgObjects)\n",[73,1032,1033],{"class":75,"line":435},[73,1034,245],{"class":86},[73,1036,1037],{"class":75,"line":440},[73,1038,1039],{"class":79},"        \u002F\u002F 仅处理贴图\n",[73,1041,1042,1045,1047,1050,1052,1055,1057,1060],{"class":75,"line":445},[73,1043,1044],{"class":121},"        UTexture2D",[73,1046,215],{"class":90},[73,1048,1049],{"class":86}," Texture ",[73,1051,302],{"class":90},[73,1053,1054],{"class":128}," Cast",[73,1056,91],{"class":86},[73,1058,1059],{"class":121},"UTexture2D",[73,1061,1062],{"class":86},">(IterObj);\n",[73,1064,1065,1068,1070,1072],{"class":75,"line":454},[73,1066,1067],{"class":90},"        if",[73,1069,234],{"class":86},[73,1071,237],{"class":90},[73,1073,240],{"class":86},[73,1075,1076],{"class":75,"line":468},[73,1077,1078],{"class":86},"        {\n",[73,1080,1081,1084,1086,1088,1090,1093,1095,1097,1099,1101,1104,1106,1108],{"class":75,"line":473},[73,1082,1083],{"class":128},"            UE_LOG",[73,1085,678],{"class":86},[73,1087,256],{"class":128},[73,1089,259],{"class":86},[73,1091,1092],{"class":262},"\"UCommonAssetEditFuncLib::SaveBadTextures: Object no texture=(",[73,1094,942],{"class":688},[73,1096,945],{"class":262},[73,1098,689],{"class":688},[73,1100,692],{"class":262},[73,1102,1103],{"class":86},"), IterObj, ",[73,1105,215],{"class":90},[73,1107,957],{"class":128},[73,1109,1110],{"class":86},"(IterObj));\n",[73,1112,1113,1116],{"class":75,"line":479},[73,1114,1115],{"class":90},"            continue",[73,1117,278],{"class":86},[73,1119,1120],{"class":75,"line":501},[73,1121,1122],{"class":86},"        }\n",[73,1124,1125,1127,1129,1131,1133,1136,1138,1140,1142,1144,1146,1148,1150],{"class":75,"line":513},[73,1126,250],{"class":128},[73,1128,678],{"class":86},[73,1130,256],{"class":128},[73,1132,259],{"class":86},[73,1134,1135],{"class":262},"\"UCommonAssetEditFuncLib::SaveBadTextures: Object=(",[73,1137,942],{"class":688},[73,1139,945],{"class":262},[73,1141,689],{"class":688},[73,1143,692],{"class":262},[73,1145,1103],{"class":86},[73,1147,215],{"class":90},[73,1149,957],{"class":128},[73,1151,1110],{"class":86},[73,1153,1154,1157],{"class":75,"line":522},[73,1155,1156],{"class":128},"        FixInvalidTexture",[73,1158,339],{"class":86},[73,1160,1161],{"class":75,"line":527},[73,1162,283],{"class":86},[73,1164,1165],{"class":75,"line":533},[73,1166,138],{"class":86},[10,1168,1169],{},"这样处理其实还是有问题的，需要在编辑器中选中材质所在文件夹然后点击右键全部重新保存一次。目测是相关的引用没有正确的更新，但是一时半会也找不到自动关联到这些材质或者触发保存的方式，所幸只是手动点击一下鼠标，就不继续投入时间了。",[1171,1172,1173],"style",{},"html pre.shiki code .sZdD5, html code.shiki .sZdD5{--shiki-default:#66707B;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html pre.shiki code .s0idv, html code.shiki .s0idv{--shiki-default:#0E1116;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sLXdl, html code.shiki .sLXdl{--shiki-default:#A0111F;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sfUV7, html code.shiki .sfUV7{--shiki-default:#702C00;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .scAT4, html code.shiki .scAT4{--shiki-default:#622CBC;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sGZGq, html code.shiki .sGZGq{--shiki-default:#A0111F;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sbfHu, html code.shiki .sbfHu{--shiki-default:#702C00;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .sZnmU, html code.shiki .sZnmU{--shiki-default:#032563;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .stP0Q, html code.shiki .stP0Q{--shiki-default:#023B95;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sQA8F, html code.shiki .sQA8F{--shiki-default:#702C00;--shiki-dark:#FFAB70;--shiki-sepia:#F8F8F2}html pre.shiki code .sAO_F, html code.shiki .sAO_F{--shiki-default:#A0111F;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}",{"title":68,"searchDepth":83,"depth":103,"links":1175},[1176,1177,1178],{"id":40,"depth":83,"text":40},{"id":58,"depth":83,"text":58},{"id":183,"depth":83,"text":183},"2026-02-06","md",{"layout":1182,"excerpt":1183},"post",{"type":7,"value":1184},[1185],[10,1186,12],{},"\u002F2026-02-06-send-to-unreal-texture-fix",{"title":5,"description":12},"_legacy\u002F2026\u002F2026-02-06-send-to-unreal-texture-fix",[1191,1192],"UE5","Blender","OyC8nTZpLwnhpQh5SWX0QCKQZ3XzQItDOM9CDyTs94Q",1788763176489]