转自:https://forums.unrealengine.com/community/community-content-tools-and-tutorials/105-saxonrahs-tutorial-thread-random-maze-generation-solving/page2?47-SaxonRahs-Tutorial-Thread-Random-Maze-Generation-amp-Solving=&viewfull=1
I made my own USTRUCT system for having a multi-dimensional UPROPERTY() friendly dynamic array version of your maze data structure.
Here's that code for you and others to enjoy!
USTRUCT() struct FMazeGridRow { GENERATED_USTRUCT_BODY() UPROPERTY() TArray<AStaticMeshActor*> Columns; void AddNewColumn() { Columns.Add(NULL); } //default properties FMazeGridRow() { } };
USTRUCT() struct FMazeGrid { GENERATED_USTRUCT_BODY() UPROPERTY() TArray<FMazeGridRow> Rows; void AddNewRow() { Rows.Add(FMazeGridRow()); } void AddUninitialized(const int32 RowCount, const int32 ColCount) { //Add Rows for(int32 v = 0; v < RowCount; v++) { AddNewRow(); } //Add Columns for(int32 v = 0; v < RowCount; v++) { for(int32 b = 0; b < ColCount; b++) { Rows[v].AddNewColumn(); } } } void Clear() { if(Rows.Num() <= 0) return; //~~~~~~~~~~~~~~~ //Destroy any walls const int32 RowTotal = Rows.Num(); const int32 ColTotal = Rows[0].Columns.Num(); for(int32 v = 0; v < RowTotal; v++) { for(int32 b = 0; b < ColTotal; b++) { if(Rows[v].Columns[b] && Rows[v].Columns[b]->IsValidLowLevel() ) { Rows[v].Columns[b]->Destroy(); } } } //Empty for(int32 v = 0; v < Rows.Num(); v++) { Rows[v].Columns.Empty(); } Rows.Empty(); } //default properties FMazeGrid() { } };
//Now you have dynamic array benefits and also UPROPERTY()! UPROPERTY() FMazeGrid JoyMazeGrid;
//Init Maze JoyMazeGrid.Clear(); JoyMazeGrid.AddUninitialized(tileX, tileY); //Sample usage //JoyMazeGrid.Rows[x].Columns[y] = SpawnBP<AStaticMeshActor>(GetWorld(), ...
Summary
The final result of all of this is that you have
1. dynamic array benefits (easily change the maze size and regenerate during runtime)
2. global access to the MazeGrid Actors, even from other classes
3. GC protection from the UPROPERTY() (if not using actors/objects for some reason)
4. And yet the syntax for 2D array using UPROPERTY() and TArray is still clean and clear and precise
JoyMazeGrid.Rows[x].Columns[y]
Enjoy!
Rama
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
2013-12-28 cocos2d-x 手电筒效果
2013-12-28 cocos2d-x 二进制文件的读写
2013-12-28 cocos2d-x 获取系统时间
2013-12-28 cocos2d-x如何截屏并保存图片
2009-12-28 程序英语