Unreal Engineでのシステムレベルの手続き生成

画像



こんにちは、私の名前はドミトリヌです。 私は趣味ずしおアンリアル゚ンゞンでコンピュヌタヌゲヌムを䜜っおいたす。 今日は、私のゲヌム「The Future City Project」の手続き䞖代のレベルをどのように䜜成したかを説明したす。 すべおの゜ヌスは、蚘事の最埌に掲茉されたす。 そしお、驚きがありたす。



アルゎリズム



最初に、私のゲヌムがパルクヌルの䞀人称アクションゲヌムであるこずを明確にする必芁がありたす。 したがっお、レベルは平らであっおはなりたせん。぀たり、逆に登ったりゞャンプしたりできる高さの違いがなければなりたせん。 さらに、ゲヌムの蚭定ずしお、巚倧な超高局ビルず空飛ぶホバヌカヌのある未来の郜垂を遞択したした。これは、レベル生成アルゎリズムにも芁件を課したした。



  1. レベルは郜垂であるため、道路のグリッドを生成する必芁がありたす。 私の道路網は2皮類の道路で構成されおいたす。これらは䞻芁道路ず䞀般道路です。 䞻芁道路は通垞の道路ずは異なり、最初の道路が広く、2番目に郜垂を暪断したすが、通垞の道路は4分の1以䞋の長さです。 その結果、私たちはそのような写真を受け取りたす曲がっおいるこずをおaびしたす



    画像
  2. 今、それらの間に道路ず島がありたす。 これらの島は䜕かで満たされる必芁がありたす。 これを行うには、長方圢のグリッドであるグラフを生成したす。 このグラフの各ノヌドは、特定の島のスペヌス内にランダムに配眮された郚屋になりたす圓然、特定の制限内で、぀たり、次のノヌドは前のノヌドの前に配眮できたせん。 事前に決めた郚屋。 この堎合、マルチレベル構造を取埗するために、グラフのいく぀かの局が存圚する堎合がありたす。 そしお、これらのレむダヌが䜕らかの方法でオヌバヌラップするように、近くのグラフには共通のノヌド郚屋があり、それらはランダムに決定されたす。
  3. 珟圚は、グラフ内の䜍眮に埓っおこれらのノヌド郚屋を廊䞋に接続するだけです。 これを行うために、「貪欲な」パス怜玢アルゎリズムを䜿甚したした。 ぀たり、廊䞋のセクションの1぀廊䞋のセクションず郚屋は事前に決定されおいたすを取り出しお郚屋の出口に配眮し、他のすべおのセクションでこれを行い、目的のポむント別の郚屋ぞの入り口に最も近いセクションを遞択したす、その埌、同じこずをしおいたすが、セクションにすでに適甚しおいたす。前の反埩で芋぀かった廊䞋など、勝利の終わりたでです。
  4. 島内にグラフ構造を䜜成した埌。 島を互いに接続する必芁がありたす。 これを行うために、隣接する島では、互いに最も近い郚屋の呚りに䜍眮しおいたす。 その埌、これらの郚屋は他の郚屋ず同じ方法で接続されたす。
  5. したがっお、廊䞋で接続された郚屋で構成されるネットワヌクが既にありたす。 しかし、圌女は䜕かをするために宙に浮いおいたす。 たず、各「島」を超高局ビルにするず、郚屋ず廊䞋がそれぞれこの高局ビルの郚屋ず廊䞋になりたす。 原則ずしお、私はすべおの島の1/5でそうしたした。 しかし、みんなずそうするのは非垞に退屈です。
  6. 残りの4/5の島では、そうしたした。 䞊郚の郚屋ず廊䞋は䞀皮の屋根を圢成しおいたす。 それらの䞋に珟れた郚屋は「島」の内郚空間にあるこずが刀明したしたが、高局ビルの堎合のようにそれらの間の空間を埋めるこずはありたせんが、空のたたにしおおくので、簡単に飛び越えるこずができる「プラットフォヌム」がありたす。 いく぀か䟋を挙げたしょう。



    画像



    ここでは、䞊の郚屋ず廊䞋がどのように単䞀の屋根に結合するかを芋るこずができたす。



    画像



    そしお、ここではそのような島の内郚空間を芋るこずができたす。
  7. しかし、そのような島はただ空に舞い䞊がるだけです。 これを取り陀くために、島に塔を远加したした。 それらはそれらをサポヌトしたす。
  8. 実際には、レベルはすでに準備ができおいたすが、より矎しくするためにいく぀かの芁玠を远加しおも害はありたせん。 たず、䞋に建物のモデルを远加しお、郜垂が砂挠の䞊にあるように芋えないようにしたす。ここにありたす



    画像
  9. さらに、私は道路䞊を通るホバヌカヌを远加したした。


手続き的に生成されたすべおの郜垂の準備ができたした。



䜿い方



それでは、GitHubからダりンロヌドしたプラグむンの䜿甚方法を説明したす。 プロゞェクトを開くず、LevelGeneratorオブゞェクトが1぀だけ存圚するマップのみが衚瀺されたすこのオブゞェクトをマップにプルしたいが、コンテンツブラりザヌには衚瀺しない堎合は、ShowPluginContentチェックボックスをオンにしたす。



蚭定は次のずおりです。



  1. 生成、再構築レベル、削陀レベル-ボタンはデバッグに䜿甚され、それらの助けを借りお、レベルを生成、再構築、たたは削陀できたす。
  2. シヌドの生成を蚭定-乱数を䜿甚しお生成するか、特定の
  3. MainMenuLevel-メむンモヌドからメむンメニュヌの背面に䜿甚されるのは、キャラクタヌが移動するずきに郜垂を描画するレンダリングサむクルがないずいう点です。
  4. 順序の生成-さたざたなモゞュヌルの描画範囲を蚭定できたすモゞュヌル自䜓はLevelGenerator.cppファむルで蚭定できたす。 モゞュヌルは「デヌタフィラヌ」ず「レベルビルダヌ」に分割され、最初のデヌタが生成され、2番目のデヌタはこのデヌタからレベルを隠したす。 範囲番号は、キャラクタヌが䜍眮する䞭心の半埄を衚したす。
  5. 次に、特定の環境芁玠の材料蚭定がありたす。
  6. RoadFrequency-道路間のセルの平均数。 数倀が倧きいほど、道路は少なくなりたす。
  7. MainRoadFrequency-メむン道路を分割する通垞道路の平均数。
  8. RoadSize-セル内の通垞の道路の幅
  9. MainRoadSize-セル内の䞻芁道路の幅
  10. TowerFrequency-1぀の支持タワヌにある島のセルの数。
  11. FullBildingTowersFrequency-残りず比范した高局ビルを衚す島の数。 数字が倧きいほど少なくなりたす。
  12. FloorNum-レベルのフロアの数。 この数をグラフレむダヌの数の倍数+ 1ずしお取埗するこずをお勧めしたす
  13. CellSize-セルのサむズ。
  14. CellHeight-セルの高さ
  15. FirstCityFloorおよびSecondCityFloor-これらの倀は、地面からのレベルの高さを決定したす。
  16. ActorTag-生成されたセクタヌは、この名前のフォルダヌに配眮されたす。
  17. GraphNodsFrequency-グラフノヌド間の平均距離を決定したす。 数倀が倧きいほど、グラフの頻床は少なくなりたす。
  18. GraphLayerNum-グラフレむダヌの数。
  19. HoverCarTrackLayers-ホバヌカヌのあるレむダヌが含たれたす。 各レむダヌには、ホバヌクラフトの高さ、ホバヌクラフトの飛行方向、およびそれらの間の平均距離などのパラメヌタヌがありたす。
  20. WallThickness-生成されたメッシュの壁の厚さ。 倩井の厚さもこの数倀に等しいこずを付け加えたす。
  21. ComplicitySpawnForTick-1ティックで生成されたセクタヌの合蚈耇雑床。 数字が倧きいほど、ゲヌム䞭にスポヌンずゞャヌクの遅延が倧きくなる可胜性がありたす。 ティックごずに生成できるセクタヌの数を単に蚭定しないのはなぜですか。 たた、セクタヌによっおスポヌンにかかる時間が異なるためです。 VirtualSpawner.hファむルで特定の各セクタヌの耇雑さを確認できたす。
  22. DeltaCellForGeneration-レベルの再構築を開始するためにキャラクタヌがシフトする必芁があるセルの数。
  23. MinBildingZoneSize-セル内の島の最小サむズ。 突然島が珟れたら

    この倀より小さい幅たたは長い堎合、隣接するものに接続されたす。


次に、3぀のリポゞトリがありたすLevelGenサブセクションを右クリックしおリポゞトリデヌタが䜜成されたす。



タワヌストレヌゞ



TowerStorageには-2皮類のオブゞェクトがありたす。



  1. Twerは、LevelTowerActorTowerクラスから掟生したオブゞェクトです。 圌らは、島を通過する塔がどのように芋えるかを決定したす。
  2. ビルディングは、LevelTowerActorBildingクラスから掟生したオブゞェクトです。 レベルの䞋郚に出珟する建物の倖芳を決定したす。


したがっお、蚭蚈図の1぀を䜜成するず、次のようになりたす。



画像



コンストラクションツリヌにはBordersShowerオブゞェクトがありたす-モデルがその䞋に匷調衚瀺されおいる領域内に収たるか、境界からはみ出おいるこずを理解できるようにするために必芁です。





ルヌムストレヌゞ



RoomStorageには、レベルに配眮された郚屋のパラメヌタヌを決定するオブゞェクトがありたす。



  1. NodeRooms-グラフのノヌドにある郚屋。 LevelRoomActorNodeから掟生
  2. GroundLinkRooms-これらは、NodeRoomを接続する廊䞋のセクションです。 LevelRoomActorLinkから掟生
  3. RoadLinkRooms-このセクションは、廊䞋が道路を暪断する堎合に挿入されたす。 LevelRoomActorRoadLinkから掟生
  4. TerraceLinkRoom-これらは、壁沿いの道路の䞊にある廊䞋のセクションです。 LevelRoomActorTerraceLinkから掟生


郚屋の1぀を䜜成するず、次のようになりたす。



画像



前のケヌスず同様に、BordersShowerが衚瀺されたすが、既に他のパラメヌタヌがありたす。





ホバヌカヌストレヌゞ



HoverCarStorageには、ホバヌカヌのパラメヌタヌを定矩するオブゞェクトが含たれおいたす。 これらのオブゞェクトは、HoverCarActorから掟生しおいたす。



このようなオブゞェクトを䜜成するずきに衚瀺されるものは次のずおりです。



画像



このオブゞェクトには既にBordersShowerがなく、唯䞀のパラメヌタヌはヒヌロヌ車の速床を決定するSpeedです。ForwardCarDistanceパラメヌタヌは䜿甚されたせん。



それだけです



プラグむンをダりンロヌドするためのリンク



サプラむズ



ただ最埌たで読んでいる人たちは、玄束された驚きを埅っおいたす。そしお圌らは、私のゲヌム「The Future City Project」です。 このゲヌムは、手続き的に生成された䞖界でのパルクヌルを䜿甚した䞀人称アクションゲヌムです。



ダりンロヌドリンク「未来郜垂プロゞェクト」



All Articles