请教关于游戏地图生成的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
LucasW
V2EX    游戏开发

请教关于游戏地图生成的问题

  •  
  •   LucasW 2017-11-27 17:17:37 +08:00 4988 次点击
    这是一个创建于 2941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    使用 cocos 引擎。
    需要大概 9000 * 9000 像素宽高的地图,同时需要寻路,地图内大概有 500+ 动态节点。
    请教各位这样的地图该怎么设计,我们测试了在虚拟物理格子上根据玩家的移动做九宫格拼接的方式,没有完全解决问题。
    各位大佬有没有更成熟的方法推荐的。
    15 条回复    2017-11-28 17:42:46 +08:00
    moyaka
        1
    moyaka  
       2017-11-27 17:40:13 +08:00 via Android   1
    最近尝试了一下 Mapbox Unity。cocos 就不知道了。
    noli
        2
    noli  
       2017-11-27 18:04:20 +08:00   1
    放弃格子, 不使用静态切分地图的数据结构,使用例如 R 树 之类的空间数据结构。
    寻路也不使用格子,而是每个地图制作拓扑点。
    linus3389
        3
    linus3389  
       2017-11-27 18:15:29 +08:00   1
    LucasW
        4
    LucasW  
    OP
       2017-11-27 18:16:35 +08:00
    @noli 大佬,没有听懂啊,能简单点解释下吗
    LucasW
        5
    LucasW  
    OP
       2017-11-27 18:17:30 +08:00
    @linus3389 主要纠结在大地图性能问题,寻路算法很成熟
    noli
        6
    noli  
       2017-11-27 18:51:32 +08:00
    @LucasW

    哪里没听懂? 提供几个关键字,你自己搜集一下资料做对比吧。
    R 树,KD 树,四叉(八叉)树。

    我倒是好奇,你的寻路怎么做,格子有多大,9000 像素 500+ 单位寻路居然性能不成问题?
    moyaka
        7
    moyaka  
       2017-11-27 18:53:34 +08:00 via Android
    @LucasW 他意思大概是地图用矢量的不要用栅格的,类比即时渲染和 CG。
    cinextio
        8
    cinextio  
       2017-11-27 19:02:59 +08:00 via Android
    Tiled Map?
    afpro
        9
    afpro  
       2017-11-27 22:54:33 +08:00   1
    大型地图寻路还是 navmesh 吧 动态物体可以考虑用 local avoidance 会快很多
    LucasW
        10
    LucasW  
    OP
       2017-11-28 10:13:17 +08:00
    @cinextio Tiled 渲染是即时的吗?寻路的话 Tiled 数据有没有方案?
    LucasW
        11
    LucasW  
    OP
       2017-11-28 10:15:19 +08:00
    @noli 不是以像素作为寻路点的,不然还了得。寻路格子大概 100 * 100 像素.
    koalli
        12
    koalli  
       2017-11-28 13:51:57 +08:00
    @LucasW 这个性能问题具体是指什么?
    LucasW
        13
    LucasW  
    OP
       2017-11-28 14:02:50 +08:00
    @koalli 我现在遇到的问题是地图增大,节点会增多,帧率下降
    koalli
        14
    koalli  
       2017-11-28 15:37:12 +08:00   1
    @LucasW 有几点比较常见的优化点你可以参考一下:
    1、看看 DrawCalls,DrawCalls 过高的话你得降低同时渲染的节点数,Unity 可以用 Camera 来剔除 GameObject ( creator 好像也支持了),我用 cocos2dx 的时候是把屏幕外的节点尽可能的设置成不可见,如果剔除后 DrawCalls 还是很高,可能得减少同时显示的节点了
    2、批量渲染,我记得 cocos2dx 从 3.3 开始应该是自动批量渲染了,但是好像是有个什么限制
    3、上面也有哥们吐槽了性能居然不成问题,那应该数据结构有做过优化了,那么你可以优化一下节点的使用,比如类似 Unity 对象池(Object Pool)之类的方法来管理节点
    cinextio
        15
    cinextio  
       2017-11-28 17:42:46 +08:00 via Android
    Tiled map 你可以通过代码改变某个方格的贴图,自动寻路就是一套算法。你自己查查,我以前(两三年,3.x 的版本)用时,cocos2dx 对 tiled map 大小支持有限制,现在应该好一些了吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3222 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:54 PVG 12:54 LAX 20:54 JFK 23:54
    Do have faith in what you're doing.
    ubao msn 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