2022-03-24 16:51:30.515351+0800 FUPTAG[2005:770154] FUAvatarFactory 的版本为:1.2.0
[2022-03-24 16:51:30.531] [faceunity] [info] [CNamaSDK.cpp:267] fuSetup_Impl: sdk version 8.1.0_phy_3efcb51cb_84c733281
FaceUnity-Auth: [2022-01-15 14:57:53 +0800][f550dc6] fix memory leak in fuauth_setup_internal_check_package_bind
FaceUnity-Auth: dde real thread setup
FaceUnity-Auth: xnr0314_test_MOD2126479231-1048575_With_Avatar
2022-03-24 16:51:30.552840+0800 FUPTAG[2005:770154] Nama version : 8.1.0_phy_3efcb51cb_84c733281
2022-03-24 16:51:30.555068+0800 FUPTAG[2005:770352] <FURenderKit-info: FURenderKit 130>-: FURenderKit Version: 8.0.2, GitCommitId: (null)
[2022-03-24 16:51:30.605] [faceunity] [info] [ControllerManager.cpp:370] Init: called
[2022-03-24 16:51:30.605] [faceunity] [info] [ControllerGlobalParams.cpp:43] ControllerGlobalParams: controller version = 3efcb51cb
搜索控制台日志,即可看到。搜索关键字:
FUAvatarFactory 的版本为:
Nama version :
1、当前渲染的 FUGLDisplayView 如下设置
glDisplayView.alphaEnable = YES;
2、实现下面这个代理方法
- (void)renderKitWillRenderFromRenderInput:(FURenderInput *)renderInput {renderInput.renderConfig.keepAlpha = YES;
}
3、当前的场景如下设置
self.scene.background = nil; // 清空背景道具
self.scene.backgroundColor = nil; // 清空背景颜色
self.scene.enableReflection = NO; // 关掉地面反射
1、截图保存事发Xcode调用堆栈。
2、保存整个控制台输出的日志。
3、记录崩溃或者异常发生的场景或者操作流程。
后续我们分析问题的时候,需要上述三个线索。
当展示虚拟人需要的道具都存在时,此时可以先加载显示虚拟人,然后再走资源更新下载。
- (void)setupResourceCheck {__weak typeof(self) weakSelf = self;
[[FUResourceManager sharedManager] checkIsEnableShowAvatarDirectlyWithSceneName:SceneName avatarId:AvatarId completion:^(NSError * _Nullable error, NSArray * _Nullable needDownloadItemPaths) {weakSelf.isShowAvatarDirectly = !error && !needDownloadItemPaths;
if (weakSelf.isShowAvatarDirectly) {[weakSelf setupAvatarData];
}
[weakSelf setupAppResource];
}];
}
当回调中没有错误 【!error】,且没有需要下载的道具【!needDownloadItemPaths】那么可以直接加载显示虚拟人。否则需要把要下载的道具下载完成后才能加载显示虚拟人。
FUResourceManager
/// 加载Avatar 的基础道具
/// @param avatarModel avatar模型
/// @param completion 结果回调
- (void)loadAvatarBaseItemsWithAvatarModel:(FUAvatarModel *)avatarModel completion:(FUResourceManageCompletion)completion;
- (void)loadAvatarBaseItemsWithAvatarModel:(FUAvatarModel *)avatarModel
progress:(nullable FUResourceManageProgressBlock)progress
completion:(FUResourceManageCompletion)completion;
使用上面的接口就可以给Avatar加基础道具;
如果没有使用相芯云平台的,且所有道具都已在本地的,可以使用下面的方式给Avatar加基础道具:
------------------------------------------ 有兜底逻辑 --------------------------------------
1、配置 FUPathsHelper 的 defaultJsonPath;【defaultJsonPath 中的道具需要在本地存在】
2、加载兜底道具
NSArray *defaultPaths = [FUPathsHelper shareHelper].defaultPaths;
NSMutableArray *temp = [NSMutableArray array];
for (NSString *path in defaultPaths) {[temp addObject:[[FUPathsHelper shareHelper].assetsRootPath stringByAppendingPathComponent:path]];
}
[FUPathsHelper loadDefaultBundleWithPaths:[temp copy]];
3、Avatar 加载道具
if (!avatarModel.addedBaseComponents) {avatarModel loadWhenItemsAvailable];
}
------------------------------------------ 没有兜底逻辑 --------------------------------------
if (!avatarModel.addedBaseComponents) {NSArray *surfacePaths = [avatarModel avatarJsonItemPaths];
FUEAResultModel *resultModel = [FUEAResultModel new];
resultModel.addFileIds = surfacePaths;
[avatarModel updateComponentsWithExcludeAssociateResultModel:resultModel];
avatarModel.addedBaseComponents = YES;
}
FUComicFilter *filter = [FUComicFilter itemWithPath:[[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:@"fuzzytoonfilter.bundle"] name:@"fuzzytoonfilter"];
[FURenderKit shareRenderKit].comicFilter = filter;
在渲染的每帧中给 FUAvatar对象设置uvAnimationDatas即可。
FUAvatar
/// UV 动画数据【数据需要为 int 类型】
@property (nonatomic, strong) NSArray <NSNumber *> *uvAnimationDatas;