背景资料,我与 ChatGpt 的两轮问答:
我问:“当我用 unity+C#开发一款游戏,在什么场景下需要我“显式”的使用“栈”?”
ChatGpt: Unity 游戏开发中的使用场景 1 、深度优先搜索( DFS )和迷宫生成:在需要遍历图形结构、树结构或生成迷宫时,深度优先搜索算法可以使用栈来管理节点的访问顺序。
2 、回溯算法:在处理需要回溯的算法,如求解谜题、路径查找等,可以使用栈来保存状态信息。
3 、撤销操作:在游戏中实现撤销/重做功能,可以使用栈来保存状态快照。
我问:你提到游戏开发中涉及“深度优先搜索( DFS )和迷宫生成”。这些问题难道 Unity 还没有解决么?还需要 C#程序员自己用栈来实现么?
ChatGpt:Unity 提供了强大的工具和组件来简化游戏开发,但有些特定的算法和逻辑需要开发者自己实现,尤其是当涉及到游戏的核心玩法设计和特定的算法需求时。深度优先搜索( DFS )和迷宫生成就是这样的例子。尽管 Unity 提供了一些基础功能,但具体的算法实现通常需要开发者根据需求自行编写。以下是一些需要开发者使用栈来实现的场景:
深度优先搜索( DFS ) DFS 是一种常用的图遍历算法,特别适用于以下场景:
1 、路径查找:虽然 Unity 提供了 NavMesh 进行路径查找,但在某些自定义图形结构(如自定义的迷宫或节点网格)中,开发者可能需要自行实现路径查找算法。
2 、游戏逻辑:在实现复杂的游戏逻辑时,如 AI 决策树、任务树等,DFS 可以帮助遍历和处理这些树状结构。
迷宫生成 迷宫生成是一个常见的游戏功能,特别是在随机生成游戏世界或关卡时。以下是一些迷宫生成算法:
1 、深度优先搜索生成迷宫:这种算法可以生成完全随机的迷宫。通过使用栈来跟踪路径,可以实现迷宫的生成。
2 、Prim's 算法:这是一种基于最小生成树的迷宫生成算法,也可以通过栈来实现。
我的问题:
1 、请各位老师看看 Chatgpt 第二轮回答是对的?还是在进行无意义的重复?像迷宫和路径查找这样的游戏中典型场景真的还需要 C#程序员用算法手动实现么? Unity 真的还没有做好让 C#程序员直接调用的方法或函数?
2 、游戏我玩过,但是 Gpt 提到的“求解谜题” “撤销操作” 分别对应什么游戏场景?能举个例子么?为什么这些场景需要用到“栈”?
1
frankmdong 172 天前
寻路算法通常和你游戏玩法相关,比如你要做一个自走棋,那棋子就只能在正方形网格里面走。文明是六边形的网格地图。还有 rts 例如战锤那种,圈一堆兵然后到达某个地点,还要求队伍里的兵尽可能的不重叠,这些都不是直接用 navmesh 解决的,可能要自己改改 astar 或者找别的算法。
谜题的话,可以尝试用回溯解数独。 撤销的话就类似你编辑器的操作删完一个 gameobject 后悔了,ctrl+z 撤销删除。游戏里的话《程序员升职记》不也有“撤销”相关的操作吗,或者“悔棋”功能? UI 管理的话你也可以用栈,打开了一堆 UI 之后,点关闭就关闭最后打开的 UI 。 |
2
huzhikuizainali OP @frankmdong 比如星际争霸圈一堆兵,让他们进攻敌人基地。鼠标给出目的地以后这些兵要自己寻最短路径过去。这些寻路算法 Unity 已经做好了吧?不需要 C#程序员在去想算法,也不用自己用栈来实现了吧?
|
3
frankmdong 172 天前
@huzhikuizainali 可以用,这个具体要自己看场景测性能,如果 Unity 真的做好的话,asset store 也不会有一堆 pathfinding 插件卖了
|
4
huzhikuizainali OP @frankmdong 谢谢回复。
那你们实际工作中是自己开发寻路系统?开发过程中会用到栈么? |
5
nightwitch 172 天前
栈在游戏开发里太常用了..
基本所有引擎里的场景组织结构都是树状的...要搜索某个组件往往要深搜,这里就要用到栈了。做编辑器工具很常见,要找某些组件改点什么属性之类的 |
6
huzhikuizainali OP @nightwitch 谢谢回复!
请问你说的场景组织结构,组件是什么?可否从产品的角度举个具体的例子。比如王者荣耀或者星际争霸或者暗黑破坏神…… |