当前位置:首页 > 动态 > UE4开发入门   > UE4开发N个坑,版本代号4.19
内容详情
UE4开发N个坑,版本代号4.19
来源:      发布时间:2018-06-02 15:39      浏览:4512     字体:    

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();
TArray actors;
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。。。







途联微信号