Lua文件加载

大纲

  • 文件加载的接口
  • 文件的使用

文件加载的接口

LuaState->setLoadFileDelegate(&LuaFileLoader);

setLoadFileDelegate是slua提供的修改lua执行require加载时的接口,(这里要说明一下,只有require才有效果哦!)

一下是简单的loader实现

TArray<uint8> ULuaMgr::LuaFileLoader(const char* fn, FString& filepath)
{
	IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
	FString path = FPaths::ProjectContentDir();
	path = FPaths::Combine(path, TEXT("/Lua"));
	FString filename = UTF8_TO_TCHAR(fn);
	path /= filename.Replace(TEXT("."), TEXT("/"));
	TArray<uint8> Content;
	TArray<FString> luaExts = { UTF8_TO_TCHAR(".lua"), UTF8_TO_TCHAR(".luac") };
	for (auto& it : luaExts) {
		auto fullPath = path + *it;

		FFileHelper::LoadFileToArray(Content, *fullPath);
		if (Content.Num() > 0) {
			filepath = fullPath;
			return MoveTemp(Content);
		}
	}

	return MoveTemp(Content);
}

文件的使用

要执行文件就简单多了,使用doFile函数就可以!

luaState->doFile("Launch");

或者通过doString('require('luaFileName')')来启动!