在制作游戏时如何继续学习UE4

所有人的美好一天


在本文中,我想谈谈我在继续开发汽车模拟器时遇到的问题,以及在解决这些问题时所遇到的问题。

世界构成


上一篇文章中,我讨论了在UE4中如何轻松快速地建立一个广阔的世界,将其分成多个部分以优化加载。结果,出于以下原因,我放弃了此模式:

  • 首先,我提请注意以下事实:在所有示例和视频中,Epics本身(和其他开发人员)使“ 8 km x 8 km”卡“整体”。这甚至超出了我的需要,因此对我来说,“世界构图”显然是一种过度优化。
  • 我在使用“景观样条线”铺路时,注意到UE4不会按地图单元的大小(在接缝处)将其分解,而是通过生成的样条线的大小来扩展其边界。这在尝试移动地图时会导致问题,并且似乎也破坏了动态加载逻辑,立即加载道路经过的所有内容(在我的情况下,这是世界的一半)。
  • 地图各部分的边界通常是一个有趣的问题。我为自制的“蓝图样条线”(Blueprint Spline)重铺了道路(以下更多内容),为了不重复“景观样条线”的“错误”,我必须在水平边界处实现自动样条线分割,在这些位置同步弯曲,创建子对象(以便每个对象都有自己的对象)放置用于自动加载的关卡)...我不确定原则上是否可行,并且肯定会花费很多时间(我在蓝图中找不到对关卡边界函数的引用等)
  • 落入地图。关于使用BlockTillLevelStreamingCompleted()绕过此“功能”的问题,我已经在该文章中谈到过。但是,此解决方案导致以下问题:
  • 在世界之间的过渡期间起。当选择一个任务(在菜单级别)并启动OpenLevel(向具有World Composition的世界发布)时,上面的修复导致游戏“淡入淡出”了半秒钟,即 玩家的生成发生了,绘制了第一帧,整个游戏冻结,直到动态加载关卡结束为止。为了找到解决该问题的方法,大约花了一天的时间,我不得不再次降至C ++级别,插入StreamingPauseRendering模块,并为BeginLoadingScreen进行覆盖。最后,我只是通过一个黑屏在世界之间进行了过渡,这比绘制一辆对控制无响应的汽车要好。
  • 在撰写本文时,我记得当您从菜单切换到带有“世界合成”的世界时,流式传输本身并不是开始的,我不得不通过C ++再次触发它

    void UMyGameInstance::OnWorldChanged(UWorld * OldWorld, UWorld * NewWorld)
    {
    	Super::OnWorldChanged(OldWorld, NewWorld);
    
    	if (NewWorld) {
    		if (NewWorld->WorldComposition) {
    			const TArray<ULevelStreaming*> TilesStreaming = NewWorld->WorldComposition->TilesStreaming;
    			NewWorld->ClearStreamingLevels();
    			NewWorld->SetStreamingLevels(TilesStreaming);
    		}
    	}
    }
    

用蓝图样条线创建道路


, Blueprints Spline «» ( , , «» ), Landscape Splines «Deform Landscape to Splines». , «», "Editor Apply Spline" Landscape + Spline! «Call In Editor» Blueprint Spline ( ) . .


Widgets


, Vehicle Variety Pack , , , , , . 3D , Widget, , ! Workaround' «Render Target», 3 , «» , , , Widget. , « » .



, UE4, ( , ). Udemy , , , , , \ . , , , «» ( PlayerController) . AI Controller Class «dummy» AIController, .



突然发现按Esc键关闭游戏菜单是一个问题。在游戏中抓住Esc,暂停游戏并全屏打开Menu Widget并没有困难...但是他不急于再次关闭Esc,在某些不明显的情况下,如“调用控制台”,覆盖“ On Key Down”开始起作用UE4 by〜,然后将其关闭,然后按一下按钮。。。结果非常简单-在根元素(在Widget本身上)的Widget设计器中选中“ Is Focusable”复选框。


感谢您的关注,如果我设法脱离已发布的《 Mount&Blade II:Bannerlord》,而不是陷入即将离任的Snowrunner,那么我将继续开发我的项目,并写出所有花费很多时间和精力的不明显的事情。


All Articles