Unity记录4.5-存储-随角色加载的Tilemap

这篇具有很好参考价值的文章主要介绍了Unity记录4.5-存储-随角色加载的Tilemap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章首发见博客:https://mwhls.top/4820.html。
无图/格式错误/后续更新请见首发页。
更多更新请到mwhls.top查看
欢迎留言提问或批评建议,私信不回。

汇总:Unity 记录

摘要:随着角色移动而动态加载的tilemap。

思路-2023/08/18
  • 原因:地图加载使用的双重循环,大地图会非常耗时,并且我希望能实现一个无限地图无缝加载的效果。
  • 确定读取:前面已将地图分区块保存读取,现在根据角色位置或活动位置,来确定保存与加载的位置。
  • 加载提前,卸载滞后:避免加载/卸载边缘同位置时,角色在边缘徘徊出现连续加载/卸载。
  • 卸载:已加载区间 - 新卸载区间。
  • 加载:新加载区间 - 已加载区间。
效果-2023/08/19
  • 下面是三分钟的效果。
    • 地图块为3x3,加载区间为3x3个地图块,卸载区间为7x7个地图块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EuOAPqOY-1693282112510)(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0ODAiIGhlaWdodD0iMzYwIiB2aWV3Qm94PSIwIDAgNDgwIDM2MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)]文章来源地址https://www.toymoban.com/news/detail-698300.html

实现-2023/08/19
  • 即上面思路的代码化,一些不重要的省略了。
    • 省略了上篇Sec4.4的重构,写完之后发现那样又臭又长,还不好用,换成了这种:public string __sysConfig_path__ { get { return Path.Combine(__root_dir__, "Configs.json"); } }
    • 以及一个定位对象,在Start()里协程判断是否需要改变区块。
    • 我听说天际的每个物体都是一个对象,所以它mod很厉害,所以我也想这么试试。
    private List<Vector3Int> _blockLoads_offsets_current = new List<Vector3Int>();
    
    public void balance_tilemap(Tilemap tilemap, Vector3Int block_offsets_new){
        List<Vector3Int> loads_new = new List<Vector3Int>();
        List<Vector3Int> unloads_new = new List<Vector3Int>();
        int x_loadBound = _game_configs.__block_loadBound__.x;
        int y_loadBound = _game_configs.__block_loadBound__.y;
        int x_unloadBound = _game_configs.__block_unloadBound__.x;
        int y_unloadBound = _game_configs.__block_unloadBound__.y;
        int x_new = block_offsets_new.x;
        int y_new = block_offsets_new.y;
    
        // load
        for (int x = -x_loadBound + 1; x < x_loadBound; x++)
            for (int y = -y_loadBound + 1; y < y_loadBound; y++)
                loads_new.Add(new Vector3Int(x_new + x, y_new + y));
        List<Vector3Int> loads_wait = loads_new.Except(_blockLoads_offsets_current).ToList();
        foreach(Vector3Int block_offsets in loads_wait){
            // Debug.Log("Load: {" + block_offsets.x + ", " + block_offsets.y + "}.");
            load_tilemap(tilemap, block_offsets);
        }
    
        // unload
        for (int x = -x_unloadBound + 1; x < x_unloadBound; x++)
            for (int y = -y_unloadBound + 1; y < y_unloadBound; y++)
                unloads_new.Add(new Vector3Int(x_new + x, y_new + y));
        List<Vector3Int> unloads_wait = _blockLoads_offsets_current.Except(unloads_new).ToList();
        foreach(Vector3Int block_offsets in unloads_wait){
            // Debug.Log("Unload: {" + block_offsets.x + ", " + block_offsets.y + "}.");
            save_tilemap_unload(tilemap, block_offsets);
        }
    
        // update state
        _blockLoads_offsets_current = _blockLoads_offsets_current.Except(unloads_wait).ToList();
        _blockLoads_offsets_current = _blockLoads_offsets_current.Union(loads_wait).ToList();
    }

到了这里,关于Unity记录4.5-存储-随角色加载的Tilemap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity核心5——Tilemap

    Tilemap 一般称之为瓦片地图或者平铺地图,是 Unity2017 中新增的功能,主要用于快速编辑 2D 游戏中的场景,通过复用资源的形式提升地图多样性 ​ 工作原理就是用一张张的小图排列组合为一张大地图 ​ 它和 SpriteShape 的异同 共同点:他们都是用于制作 2D 游戏的场景或地图的

    2024年02月09日
    浏览(36)
  • [Unity] Tilemap瓦片左右翻转(上下翻转)

    Tile(瓦片)左右翻转感觉是很常用的一个功能啊!看了一些教程都没有提及,心想难道要把每张Sprite再做一张对称的、再做成瓦片吗? 图片量x2 、瓦片量x2、不现实!一定有方法! 搜索了了半天没找到方法,结果自己偶然在奇怪的地方不一小心找到了~~ 记录一下! 菜单栏

    2024年01月22日
    浏览(42)
  • Unity2D学习笔记-Tilemap

    tilemap算是接触了几次,但是无论是看视频还是看文章都一知半解,这次把编辑地图的开始步骤搞清楚。 首先要知道tilemap是做什么的。 这里提到的Tilemap其实不止是Tilemap:Tilemap本身是地图编辑器(虽然我更倾向于理解为“场景”,不过编辑地图才是核心)。之前学的印象是,

    2023年04月09日
    浏览(49)
  • 【unity实战】Unity2D TileMap+柏林噪声生成随机地图(附源码)

    我的上一篇文章介绍了TileMap的使用,主要是为我这篇做一个铺垫,看过上一篇文章的人,应该已经很好的理解TileMap的使用了,这里我就不需要过多的解释一些繁琐而基础的知识了,省去很多时间。所有没看过上一篇文章的小伙伴我强烈建议先去看看:

    2024年02月03日
    浏览(44)
  • 【unity小技巧】Unity2D TileMap+柏林噪声生成随机地图(附源码)

    我的上一篇文章介绍了TileMap的使用,主要是为我这篇做一个铺垫,看过上一篇文章的人,应该已经很好的理解TileMap的使用了,这里我就不需要过多的解释一些繁琐而基础的知识了,省去很多时间。所有没看过上一篇文章的小伙伴我强烈建议先去看看:

    2024年02月07日
    浏览(32)
  • 了解Unity编辑器之组件篇Tilemap(五)

    Tilemap:用于创建和编辑2D网格地图的工具。Tilemap的主要作用是简化2D游戏中地图的创建、编辑和渲染过程。以下是一些Tilemap的主要用途: 2D地图绘制:Tilemap提供了一个可视化的编辑器界面,可以快速绘制2D地图,例如迷宫、平台关卡、RPG世界等。 碰撞检测:Tilemap可以定义碰

    2024年02月15日
    浏览(34)
  • 【Unity入门计划】基本概念(8)-瓦片地图 TileMap 01

    目录 1 TileMap概念 主要思想 优点 创建的层级 2 Unity中的TileMap 2.1 自动父级Grid 网格 2.2 Sprite精灵 2.3 Tile 瓦片 2.4 Tile Palette 调色板 2.5 Brush 笔刷 3 Tilemap Renderer 瓦片地图渲染器 3.1 Sort Order 瓦片排列顺序 3.2 Mode 渲染模式  Chunk 分块渲染  Individual 单独渲染  3.3 Detect Chunk Culling

    2023年04月08日
    浏览(37)
  • Unity记录4.2-存储-从json文件获取Tile路径

    文章首发见博客:https://mwhls.top/4813.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议,私信不回。 汇总:Unity 记录 摘要:从json文件获取Tile材质路径。 确定保存方案-2023/08/15 询问了GPT,它说Tilemap是根据摄像机位置进行渲染,所

    2024年02月10日
    浏览(38)
  • Unity 3D中使用tilemap创建关卡地图,瓦片间隙有漏缝

    我们使用一张图片来作为Sprite图集,创建地形图: 运行后,会发现,瓦片之间似乎总是有间距。 检查了图片发现,并不是图片边界存在间隙。 最后发现问题是出在图片资源中的线性过滤属性值: 在设计界面就能够看的很清楚。 起初还以为是tilemap的属性值设置不正确导致。

    2024年02月13日
    浏览(45)
  • 【unity3D】TileMap基础知识(详细版)

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的TileMap基础知识 window—2D—Tile Palettee 选择工具(Select Tool) 选择想要使用的瓦片,可以点击选择或拖拽多选选择, 快捷键S 。 移动工具(Move Tool) 可以选择并移动瓦片位

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包