1、Shipping模式下打包(Package)VR应用,打包失败有N个情况:
A、GetActorLabel() 和 GetName() 通过 label 名称和 Name名称在World中找Actor是有问题的,因为这两个方法只在Debug模式之下才可以使用,也就是说在Shipping模式下打包,那你就要完蛋了。所以,我们的Dorctor.Zhou写了一个工具类,如下
Tools::Tools() { } Tools::~Tools() { } FString Tools::EncryptString(FString StrData) { const TCHAR* tmp = *StrData; FMD5 MD5; FString ret = MD5.HashAnsiString(tmp); return ret; } bool Tools::HasTag(AActor* actor, FString tag, bool fullMatch) { TArraytags = actor->Tags; bool ret = false; for (int i = 0; i < tags.Num(); i++) { FString tmpTag = tags[i].ToString(); if (fullMatch) { if (tmpTag.Compare(tag) == 0) { ret = true; break; } } else { if (tmpTag.Contains(tag)) { ret = true; break; } } } return ret; } bool Tools::HasTag(UActorComponent* component, FString tag, bool fullMatch) { TArraytags = component->ComponentTags; bool ret = false; for (int i = 0; i < tags.Num(); i++) { FString tmpTag = tags[i].ToString(); if (fullMatch) { if (tmpTag.Compare(tag) == 0) { ret = true; break; } } else { if (tmpTag.Contains(tag)) { ret = true; break; } } } return ret; } FString Tools::GetLicenseNum() { return FPlatformMisc::GetMachineId().ToString(); } FString Tools::GetFirstTag(AActor* actor) { TArraytags = actor->Tags; if (tags.Num() > 0) { FString tmpTag = tags[0].ToString(); return tmpTag; } else { return TEXT(""); } }引用方法如下:
UWorld * world = GetWorld(); TArrayactors; if (world != NULL) { UGameplayStatics::GetAllActorsOfClass(world, AActor::StaticClass(), actors); while (actors.Num() > 0) { AActor * tmpActor = actors.Pop(); if (tmpActor != NULL) { if (Tools::HasTag(tmpActor,TEXT("DisasterInforActor"), true)) { DisasterInforActor = tmpActor; //break; } } } }
2、好不容易打包(Package)成功,打算移植到另外一台HP的背包电脑上面测试运行,发现无法进入VR模式。当前环境是我们安装了steamVR。
经过2天的问题排查之后,我们有考虑过是不是电脑显卡驱动问题、是不是我们打包的方法问题(Debug、Development、Shipping)各种打包模式都试过了,一样像死猪一样没有反应。
最后排查的结果是:
SteaVR是基于steam的,所以我们只是安装了SteamVR而没有安装Steam,所以需要安装Steam并且更新一下SteamVR的列表。
在安装Steam 和 SteamVR 之后,见证奇迹的时候来了。
3、关于打包(Package)的问题,最好不要使用中文的命名,包括Actor等和模型、材质等等,否则会出现 Unknow Error 死给你看。
4、项目备份(移植)到另外一个文件夹名称,导致cook、打包(Package)都失败。
因为UE4的项目会在 /Intermediate 里面的文件有数据文件,它会自动记录原来的参数和配置,所有,最好重新创建这个文件。可以先把这个文件夹改名,然后把 /ProjectFiles 拷贝过去,打开程序就可以正常编译 \ Cook \ Package 了。
如图:
/ProjectFiles 是VS 的项目文件,最好保留
其他文件都可以通过编译、Cook、打包(Package)自动生成。
5、因为第4个操作,引发了另外一个新的问题 vs 在debug 调试程序的时候出现 " failed to open descriptor file " 的错误。
这个错误造成的问题主要是因为移植了程序,VS这个SB不会自己更新项目树的,主要是没有更新/Engine 的c++等文件过来,所以需要手动加载更新一下。
6、挖坑继续ing。。。