首页 > 其他分享 >10. 房间进出逻辑

10. 房间进出逻辑

时间:2024-03-02 23:22:05浏览次数:25  
标签:10 逻辑 filePath mapLayout 房间 广播 jsonFolder 进出 public

目标

当我进入房间,然后出去之后,当前房间设置为已访问,同一列的其它房间设置为不可访问,当前房间相连的房间设置为可访问

实现

点击房间广播

因为 RoomPrefab 上面有碰撞体,所以鼠标或手指点击它的时候会触发OnMouseDown方法,然后就会触发LoadRoomEvent广播事件

监听点击房间广播

SceneLoadManager 会监听LoadRoomEvent广播事件,然后调用SceneLoadManager.OnLoadRoomEvent,当它卸载并加载完场景之后,就会触发AfterRoomLoadedEvent

监听房间加载完毕广播

GameManager 会监听房间加载完毕广播,当广播产生的时候就会调用GameManager.UpdateMapLayoutData

在这个方法里,会根据当前房间的列号和行号,从MapLayoutSO中查出当前房间信息,并将它的状态设置为Visited

然后找到当前房间同一列的房间,并将它们的状态设置为Locked

最后找到当前房间相连的房间,并将它们的状态设置为Attainable

因为Map场景每次都需要从文件中读取MapLayoutSO,所以该SO的任何变动都需要写入到文件中

DataManager

为了简单点,我直接用单例来实现DataManager,在 Windows 系统上,数据最终会被保存到C:\Users\hellozjf\AppData\LocalLow\DefaultCompany\DreamOfTheKingdom\save\map.json

using System.IO;
using Newtonsoft.Json;
using UnityEngine;

public class DataManager : MonoBehaviour
{
    // 文件存储路径
    private string jsonFolder;
    private string jsonFileName = "map.json";

    public static DataManager instance = null;
    
    private void Awake() 
    {
        instance = this;

        // 定义地图序列化的路径
        jsonFolder = Application.persistentDataPath + "/save/";
    }

    /// <summary>
    /// 将 mapLayout 序列化成字符串,并写入到文件中
    /// </summary>
    public void SaveToFile(MapLayoutSO mapLayout)
    {
        var filePath = jsonFolder + jsonFileName;
        var jsonData = JsonConvert.SerializeObject(mapLayout);
        if (!File.Exists(filePath))
        {
            Directory.CreateDirectory(jsonFolder);
        }
        File.WriteAllText(filePath, jsonData);
    }

    /// <summary>
    /// 从文件中读取数据,并写入到 mapLayout
    /// </summary>
    public void LoadFromFile(MapLayoutSO mapLayout)
    {
        // 首先把 mapLayout 清空一下
        mapLayout.mapRoomDataList.Clear();
        mapLayout.linePositionList.Clear();

        // 读取 JSON
        var filePath = jsonFolder + jsonFileName;
        if (File.Exists(filePath))
        {
            var stringData = File.ReadAllText(filePath);
            JsonConvert.PopulateObject(stringData, mapLayout);
        }
    }
}

其它

其实里面还有一些小细节,但是太繁琐就不列出来了

项目相关代码

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

标签:20240302_2254

标签:10,逻辑,filePath,mapLayout,房间,广播,jsonFolder,进出,public
From: https://www.cnblogs.com/hellozjf/p/18049452

相关文章

  • 初中英语优秀范文100篇-095No Gains without Pains-没有付出就没有收获
    PDF格式公众号回复关键字:SHCZFW095记忆树1Thereisnodoubtthattheonlywaytosuccessistoworkhard.翻译毫无疑问,通往成功的唯一途径就是努力工作简化记忆努力句子结构Thereisnodoubtthat...这是一个常见句型,意为毫无疑问的是...表示说话者对某件事......
  • Go 100 mistakes - #92: Writing concurrent code that leads to false sharing
      ......
  • 推出LS1023ASE7MQA、LS1023ASE7PQA、LS1023ASE7QQA、LS1023ASE7KQA、LS1023ASN7KNLB面
    介绍LS1023A处理器是面向嵌入式网络的双核64位Arm®处理器。LS1023A可通过支持无风扇设计的灵活I/O封装,提供超过10Gbps的性能。这款SoC是专为小规格网络、工业和汽车应用而打造的解决方案,针对经济型低端PCB优化了物料成本(BOM),降低了电源成本,采用单时钟设计。产品LS1023ASN7KN......
  • YL 模拟赛总结 10
    ProblemT1二分板子。对于\(c_i\)降序排序,然后二分\(h\)指数,在check中贪心地使用综述增加引用次数即可。T2通过观察可以发现,在一篇论文的贡献列表中,若某一位置出现了比它前面的名字的字典序更小的情况,则说明从这个位置开始,后面的人的资历一定\(\ge\)前面的人。根据......
  • CF10E 题解
    传送门有\(n\)种货币。找一个最小的金额\(x\),使得贪心法付款不是最优解;如果贪心法始终都是最优解,输出\(-1\)。\((n\le400)\)将货币集合记作一个\(n\)维向量\(C=(c_1,c_2,\dots,c_n)\)。对于金额\(x\)的一个表示法,也记作一个\(n\)维向量\(V\)。即\(C\timesV=x\)。......
  • Go 100 mistakes - #89: Writing inaccurate benchmarks
          ......
  • 3.1~3.10解题报告
    [cf1525E]AssimilationIV依据题面,可以知道每个点只会被计算一次,所以可以从点出发,求每个点被覆盖的概率,正着计算会有很多重复,所以考虑先算出不可能的情况,在与1作差,很明显,若所有城市到点A的距离都小于n,则一定成立,如果有一个不满足,则若此城市第一个放置,就要分两种情况,若其余距离均......
  • GAMES101 Rasterization 光栅化
    向量点乘的作用计算两个方法方向夹角计算两个方向是否接近关于两个方向的计算向量叉乘\[\vec{a}\times\vec{b}=\begin{pmatrix}y_az_b-y_bz_a\\z_ax_b-x_az_b\\x_ay_b-y_ax_b\end{pmatrix}\]\[\veca\times\vecb=A^*b=\begin{pmatrix}0&-z_a&y_a\\z_a&0&-x_a\\-y_a&x......
  • 代码随想录算法训练营day11 | leetcode 20. 有效的括号、1047. 删除字符串中的所有相
    目录题目链接:20.有效的括号-简单题目链接:1047.删除字符串中的所有相邻重复项-简单题目链接:150.逆波兰表达式求值-中等题目链接:20.有效的括号-简单题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右......
  • MBR20100FCT-ASEMI适配开关电源MBR20100FCT
    编辑:llMBR20100FCT-ASEMI适配开关电源MBR20100FCT型号:MBR20100FCT品牌:ASEMI封装:ITO-220AB最大平均正向电流(IF):20A最大循环峰值反向电压(VRRM):100V最大正向电压(VF):0.80V工作温度:-65°C~175°C反向恢复时间:ns重量:1.5615克芯片个数:2芯片尺寸:102mil正向浪涌电流(IFMS):200AMBR2......