当我用 Unity 开发游戏的时候有什么场景下要使用“栈”操作? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
UNITY: Game Development Tool
License Comparisons
huzhikuizainali
V2EX    UNITY

当我用 Unity 开发游戏的时候有什么场景下要使用“栈”操作?

  •  
  •   huzhikuizainali 2024-07-06 14:42:17 +08:00 2058 次点击
    这是一个创建于 461 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景资料,我与 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 提到的“求解谜题” “撤销操作” 分别对应什么游戏场景?能举个例子么?为什么这些场景需要用到“栈”?

    6 条回复
    frankmdong
        1
    frankmdong  
       2024-07-06 18:48:42 +08:00
    寻路算法通常和你游戏玩法相关,比如你要做一个自走棋,那棋子就只能在正方形网格里面走。文明是六边形的网格地图。还有 rts 例如战锤那种,圈一堆兵然后到达某个地点,还要求队伍里的兵尽可能的不重叠,这些都不是直接用 navmesh 解决的,可能要自己改改 astar 或者找别的算法。
    谜题的话,可以尝试用回溯解数独。
    撤销的话就类似你编辑器的操作删完一个 gameobject 后悔了,ctrl+z 撤销删除。游戏里的话《程序员升职记》不也有“撤销”相关的操作吗,或者“悔棋”功能?
    UI 管理的话你也可以用栈,打开了一堆 UI 之后,点关闭就关闭最后打开的 UI 。
    huzhikuizainali
        2
    huzhikuizainali  
    OP
       2024-07-06 19:03:24 +08:00
    @frankmdong 比如星际争霸圈一堆兵,让他们进攻敌人基地。鼠标给出目的地以后这些兵要自己寻最短路径过去。这些寻路算法 Unity 已经做好了吧?不需要 C#程序员在去想算法,也不用自己用栈来实现了吧?
    frankmdong
        3
    frankmdong  
       2024-07-06 20:02:03 +08:00
    @huzhikuizainali 可以用,这个具体要自己看场景测性能,如果 Unity 真的做好的话,asset store 也不会有一堆 pathfinding 插件卖了
    huzhikuizainali
        4
    huzhikuizainali  
    OP
       2024-07-06 20:27:26 +08:00
    @frankmdong 谢谢回复。
    那你们实际工作中是自己开发寻路系统?开发过程中会用到栈么?
    nightwitch
        5
    nightwitch  
       2024-07-07 00:43:25 +08:00
    栈在游戏开发里太常用了..
    基本所有引擎里的场景组织结构都是树状的...要搜索某个组件往往要深搜,这里就要用到栈了。做编辑器工具很常见,要找某些组件改点什么属性之类的
    huzhikuizainali
        6
    huzhikuizainali  
    OP
       2024-07-07 10:23:13 +08:00
    @nightwitch 谢谢回复!
    请问你说的场景组织结构,组件是什么?可否从产品的角度举个具体的例子。比如王者荣耀或者星际争霸或者暗黑破坏神……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     889 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 20:37 PVG 04:37 LAX 13:37 JFK 16:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86