Vico Bill< 刘 利 波 > 的个人网站

记录关于学习、工作中的技术点滴

C,C++,Rust,Ruby爱好者;热衷于游戏开发、任务自动化与跨平台;沉迷于游戏引擎与图形表现;深信'简单、多元'哲学的力量。


访问主页

游戏引擎-UE4 加载关卡

虚幻4引擎中与场景相关的几个概念:

  • 关卡(Level):UE4中的游戏场景,最为常用的概念。

  • 地图(Map):地图是编辑好的场景,保存为.umap文件。一个工程可以有很多umap文件。在UE4中,一个Level可由多个umap组合而成。在UE4中,只有UEngine::LoadMap与之相关。

    /// 通过UMAP文件资源加载关卡
      
    UWorld* PersistentWorld = GetWorld();
      
    // 新建流式关卡
    UClass* StreamingClass = ULevelStreamingKismet::StaticClass();
    ULevelStreaming* StreamingLevel = Cast<ULevelStreaming>(StaticConstructObject(StreamingClass, PersistentWorld, NAME_None, RF_Transient, NULL));
       
    // FName PackageName = TEXT("/Game/TempUmap/Level_01") 根据项目实际情况获取并设置PackageName
    StreamingLevel->SetWorldAssetByPackageName(PackageName);
       
    StreamingLevel->bShouldBeLoaded = true;
    StreamingLevel->bShouldBeVisible = true; // 加载后可见
    StreamingLevel->bShouldBlockOnLoad = false;
       
    StreamingLevel->PackageNameToLoad = PackageName; // !非常重要:加载的资源包名称
      
    PersistentWorld->StreamingLevels.Add(StreamingLevel); 
      
    
  • 世界(World):可由多个子Level组成。

基于此,虚幻4提供了以下击中加载场景方式:

  • LevelStreamingVolume:是可放置在关卡中的Actor,当Pawn进入此Volume时,即可加载对应关卡。可实现无缝地图加载。
  • 使用蓝图加载:需要用到LoadStreamLevel或OpenLevel节点。
    • OpenLevel:会阻塞式加载,游戏会在加载时“卡死”。
    • LoadStreamLevel:会异步加载,此时可显示加载界面或播放过程动画等。
  • 使用代码加载:通过UGameplayStatics::LoadStreamLevel加载。
最近的文章

游戏引擎-UE4 引擎流程

入口点:不同平台调用GuardMain入口函数。GuardMain: EnginePreInit():引擎预先初始化。=>GEngineLoop::PreInit() EngineInit/EditorInit(GEngineLoop):引擎或编辑器初始化。=>GEngineLoop::Init() EngineTIck():主循环每次调用的函数。=> GEngineLoop::Tick() EngineExit/EditorExit():引擎或编辑器退出。=&g...…

继续阅读