1. ERROR:System.ArgumentException: Attempt to construct staged filesystem reference from absolute path
今天打Android包的时候突然出现了这个报错,也就是前2min的时候打包都还没有问题,后面突然出现了问题,去看了Log文件,报错也是只有这个。我采用的办法是将sdcard中的UE4Game删掉,然后重启UE,就可以。
打开命令行,输入
adb shell
然后会进入adb的shell中,在切换到sdcard下面
cd sdcrad
进入sdcard文件夹下面后,键入ls后,是可以找到UE4Game这个文件夹的,将这个文件夹删掉就可以
ls
删掉这个文件夹
rm -r UE4Game
然后重启你的UE就可以啦
2.如何查看Unreal Engine 的 UMG 中Draw Call数量
开启游戏界面后, 在Console Window中输入stat slate ,此时会弹出一个框框,里面有大量的参数和属性,找到Num Batches 属性,后面对应的数字就是Draw Call的数量。(一般在Android application中同时4指按下就可以就会弹出来Console Window)
3.在Xcode中编译UE4或Xcode -> Product -> clean时出现 exit with code 5 报错
有时Xcode编译UE4经常出现exit with code 5,再失败后执行clean操作也会因为这个报错失败。
至于报错原因在log里面有显示,此时打开Epic Game ,在UE4对应的引擎版本中选择“验证”,等待验证完毕后再重新编译或者Clean一般就可以成功了
4. 编译成功,启动UE4时在UClassCompiledInDefer()方法处崩溃
/**
* Specialized version of the deferred class registration structure.
*/
template <typename TClass>
struct TClassCompiledInDefer : public FFieldCompiledInInfo
{
TClassCompiledInDefer(const TCHAR* InName, SIZE_T InClassSize, uint32 InCrc)
: FFieldCompiledInInfo(InClassSize, InCrc)
{
UClassCompiledInDefer(this, InName, InClassSize, InCrc); // 会在此处崩溃
}
virtual UClass* Register() const override
{
LLM_SCOPE(ELLMTag::UObject);
return TClass::StaticClass();
}
virtual const TCHAR* ClassPackage() const override
{
return TClass::StaticPackage();
}
};
这种情况经常出现在我在远程仓库中拉取了新的代码后重新编译UE4(此处重新编译是指编译Unreal Engine,不是UE中打开的项目),此时点击Xcode -> Product -> Clean ,进行缓存文件的一个清理。清理成功后再次编译就不会再出现崩溃情况
5. UE 出现exit with code 5 ,Error : Action graph contains cycle!
检查一下是否出现了两个模块在build.cs中出现了相互依赖。因为在UE中是不允许模块互相依赖的,如果A模块依赖B模块,B模块依赖A模块则说明A,B模块设计是有问题的,两个模块中有耦合部分,要将公共部分抽离出来。从原因上来说就是在build.cs中,A依赖了B模块,则在生成动态链接库的时候会跳转到B模块寻找B模块的信息,而B模块的build.cs中又依赖了A模块,则在引入B模块的信息的时候,又要跳转到A模块,A模块又依赖了B模块,再跳转到B模块中,就变成了一个死循环(这和在C++ 中,A.h 中include了B.h,,而在B.h中又include了 A.h的问题是类似的)
6. 在UE中使用C++ 中的extern 关键字和namespace问题
在UE中使用C++的extern 关键字去声明一个变量是无法使用的,否则会编译报错。同样在namespace中,声明一个变量,使用namespace::变量名去声明一个变量也是无法在外部使用的,同样的编译报错 LNK2005:redefined error(vs 报错结果)。
UE在文档中说明不是标准的C++(可能他想表达这是他魔改过的C++),所以有一些C++ 的语法也是无法在UE中使用的。
7. UE 出现exit with code 5,UBT xxxx dylib/dll 编译错误
出现这个的问题有可能是代码写错了,尤其是一些预编译的代码(比如宏定义之类的,或者是在UE中不支持的C++ 语法用到了UE中)出现了错误,导致无法编译成功,因此也无法生成动态连接库。
8.多版本XCode并存使用
由于新版的UE4.24要求使用Xcode 11 及其以上的版本,所以要同时使用Xcode 11和10,所以在两个版本中进行切换,因此也就需要更Xcode打开的改默认版本,在命令行中输入
sudo xcode-select -s ~/Xcode.app/Contents/Developer