首页 > 其他分享 >09. 保存地图场景

09. 保存地图场景

时间:2024-03-02 23:22:51浏览次数:19  
标签:Map 场景 SaveMap 房间 地图 保存 09 MapLayoutSO

本节目的

将 Map 上的房间和连线都保存下来,以便从战斗场景回来的时候能够恢复这些数据

实现方法

定义存储结构

定义一个名叫MapLayoutSO的 ScriptableObject,它里面记录了所有的房间和连线信息,如下图所示

房间的信息中不单单有房间的图标、房间的类型、引用的场景,还有房间的状态、房间的坐标(posX, posY),房间的列号、行号

线条的信息中有起点和终点的坐标,因为 Vector3 不能进行序列化,所以需要使用 SerializeVector3 包装一下

实例化存储体

在 Game Data / Settings 下面创建出 MapLayoutSO

修改 Map Generator

在 Map Generator 中添加MapLayoutSO,并通过拖拽的方式进行赋值

然后为它编写SaveMapLoadMap两个方法

SaveMap的时候,需要遍历所有的房间和线段,然后将它们保存到MapLayoutSO

LoadMap的时候,需要从MapLayoutSO中读取所有的房间和线段信息,并反向更新上去

CreateMap的最后,调用SaveMap保存数据

OnEnable的时候,如果当前MapLayoutSO存储的房间数大于0,那么就从MapLayoutSO中读取数据,否则就重新创建一个

Start里面不再调用CreateMap

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240302_1813

标签:Map,场景,SaveMap,房间,地图,保存,09,MapLayoutSO
From: https://www.cnblogs.com/hellozjf/p/18049451

相关文章

  • 08. 场景加载
    awaitable关键字本节涉及到场景的加载和卸载,在勇士传说中,我们使用协程的方式来加载和卸载场景,在本节使用了unity2023.3最新的特性awaitableawaitable具体是啥,我也不太清楚,见下图加载场景在上一节中,我们监听了LoadRoomEvent事件,成功调用了SceneLoadManager.OnLoadRoom......
  • 初中英语优秀范文100篇-095No Gains without Pains-没有付出就没有收获
    PDF格式公众号回复关键字:SHCZFW095记忆树1Thereisnodoubtthattheonlywaytosuccessistoworkhard.翻译毫无疑问,通往成功的唯一途径就是努力工作简化记忆努力句子结构Thereisnodoubtthat...这是一个常见句型,意为毫无疑问的是...表示说话者对某件事......
  • 说说你对vue的mixin的理解,有什么应用场景?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、mixin是什么Mixin是面向对象程序设计语言中的类,提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类Mixin类通常作为功能模块使用,在需要该功能时“混入”,有利于代码复用又避免了多继承的复杂Vue......
  • P3200 [HNOI2009] 有趣的数列 题解
    P3200[HNOI2009]有趣的数列感性地,我们认为在按照数值从小到大填数时每个时刻所填的奇数位的个数\(x\)不小于所填偶数位的个数\(y\)。我们考虑如何证明这一点。性质1:每一个偶数位上的数都要大于它前面所有的数。这一点应当是显然的。性质2:每一个偶数位上的数都不小于它的下......
  • CF809D
    传送门平衡树优化神题,完全想不到平衡树能这么用!一看这题散发着一股DP的清香。\(dp[i][j]\)表示前\(i\)个数且第\(i\)个数为\(j\)的最长上升子序列长度。但是转移方程不好优化,状态表示可以滚动数组压掉一维。反方向考虑DP:\(dp[i][j]\)表示前\(i\)个数最长上升子序......
  • SP14846 GCJ1C09C - Bribe the Prisoners 题解
    非常好区间dp。我们发现直接依题做是困难的,因此考虑反着做。也即,假定起初那\(Q\)个牢房均为空,现在要将给定的\(Q\)的犯人插入其中,求最小代价。然后我们发现这题和P1775很像,相当于每插入一个人,两段不相邻的牢房就被合并到了一起。接着我们就考虑这玩意怎么做区间dp。......
  • Go语言的100个错误使用场景(55-60)|并发基础
    目录前言8.并发基础8.1混淆并发与并行的概念(#55)8.2认为并发总是更快(#56)8.3分不清何时使用互斥锁或channel(#57)8.4不理解竞态问题(#58)8.5不了解工作负载类型对并发性能的影响(#59)8.6不懂得使用Gocontexts(#60)小结前言大家好,这里是白泽。《Go语言的100个错误以及如何避免》......
  • 笔记:Git学习之应用场景和使用经验
    目标:整理Git工具的应用场景和使用经验一、开发环境Git是代码版本控制工具;Github是代码托管平台。工具组合:VSCode+Git需要安装的软件:vscode、Git其中vscode需要安装的插件:GitLens、GitHistory二、应用场景工作场景:嵌入式开发,多人本地使用三、使用总结基础操作,参考廖雪峰的Git教......
  • 04. 生成地图上的房间
    最终目标每一列上面的关卡之间有间距,并且x坐标有左右偏移,最后一个房间的位置是固定的实现方法我们现在已经知道屏幕的宽度screenWidth,也知道了屏幕的高度screenHeight,同时还知道一共有多少列mapConfig.roomBlueprints.Count那么可以算出每一列的宽度columnWidth=screenW......
  • 03. 设计地图配置表
    更新Hierarchy从Hierarchy中删除了RoomPrefab,然后增加了MapGenerator,并在MapGenerator上面挂载了MapGenerator脚本MapGenerator脚本这个脚本的作用是配置地图上的房间信息(每一列有min~max个房间,这些房间可以是什么类型),然后在Awake的时候获取当前屏幕的高度......