19.开火点数据

19.游戏场景-游戏主逻辑-开火点相关-数据准备


19.1 知识点

分析开火点需求。在除了中心点的屏幕八宫格位置设置8个开火点。开火点应该包括开火点id,发火点类型,每组子弹数量,每颗子弹间隔时间,关联的子弹id,每组间隔cd等变量

创建存储开火点数据类FireData脚本和单条开火点信息类FireInfo。开火点数据FireData类定义了一个公共字段fireInfoList用于存储开火点数据列表。单条开火点信息FireInfo类定义了一些公共字段,用于存储单条开火点数据。例如,它包含了id、type、num、cd、ids和delay字段,分别用于存储发火点ID、发火点类型、子弹数量、每颗子弹的间隔时间、关联的子弹ID和组间间隔时间。

using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;

/// <summary>
/// 开火点数据集合
/// </summary>
public class FireData
{
    public List<FireInfo> fireInfoList = new List<FireInfo>(); // 开火点数据列表
}

/// <summary>
/// 单条 开火点 数据
/// </summary>
public class FireInfo
{
    [XmlAttribute]
    public int id; // 发火点ID,主要方便配置
    [XmlAttribute]
    public int type; // 发火点类型,1代表顺序发射,2代表散弹
    [XmlAttribute]
    public int num; // 子弹数量
    [XmlAttribute]
    public float cd; // 每颗子弹的间隔时间
    [XmlAttribute]
    public string ids; // 关联的子弹ID,例如"1,10"代表在1~10ID的子弹数据中随机选择
    [XmlAttribute]
    public float delay; // 组间间隔时间
}

创建FireData的XML配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<FireData>
    <fireInfoList>
        <FireInfo id="1" type="1" num="5" cd="0.8" ids="1,10" delay="8"/>
        <FireInfo id="2" type="2" num="5" cd="0" ids="11,20" delay="10"/>
        <FireInfo id="3" type="2" num="8" cd="0.5" ids="1,20" delay="5"/>
        <FireInfo id="4" type="1" num="10" cd="0.5" ids="5,15" delay="10"/>
    </fireInfoList>
</FireData>

在游戏数据管理类中关联一个开火点数据变量,构造函数初始化的时候就用xml数据管理器读取开火点数据。可以断点查看读取的成不成功。

public class GameDataMgr
{
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance => instance;

    //开火点 数据
    public FireData fireData;

    private GameDataMgr()
    {
     
        //一开始 就读取 开火点数据
        fireData = XmlDataMgr.Instance.LoadData(typeof(FireData), "FireData") as FireData;
    }
}

19.2 知识点代码

FireData

using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;

/// <summary>
/// 开火点数据集合
/// </summary>
public class FireData
{
    public List<FireInfo> fireInfoList = new List<FireInfo>(); // 开火点数据列表
}

/// <summary>
/// 单条 开火点 数据
/// </summary>
public class FireInfo
{
    [XmlAttribute]
    public int id; // 发火点ID,主要方便配置
    [XmlAttribute]
    public int type; // 发火点类型,1代表顺序发射,2代表散弹
    [XmlAttribute]
    public int num; // 子弹数量
    [XmlAttribute]
    public float cd; // 每颗子弹的间隔时间
    [XmlAttribute]
    public string ids; // 关联的子弹ID,例如"1,10"代表在1~10ID的子弹数据中随机选择
    [XmlAttribute]
    public float delay; // 组间间隔时间
}

FireData.xml

<?xml version="1.0" encoding="UTF-8"?>
<FireData>
    <fireInfoList>
        <FireInfo id="1" type="1" num="5" cd="0.8" ids="1,10" delay="8"/>
        <FireInfo id="2" type="2" num="5" cd="0" ids="11,20" delay="10"/>
        <FireInfo id="3" type="2" num="8" cd="0.5" ids="1,20" delay="5"/>
        <FireInfo id="4" type="1" num="10" cd="0.5" ids="5,15" delay="10"/>
    </fireInfoList>
</FireData>

GameDataMgr

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameDataMgr
{
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance => instance;

    //音乐相关数据
    public MusicData musicData;
    //排行榜数据
    public RankData rankData;
    //角色数据
    public RoleData roleData;
    //子弹数据
    public BulletData bulletData;
    //开火点 数据
    public FireData fireData;

    //当前选择的角色 编号
    public int nowSelHeroIndex = 0;

    private GameDataMgr()
    {
        //就是获取本地硬盘中存储的 音乐数据
        musicData = XmlDataMgr.Instance.LoadData(typeof(MusicData), "MusicData") as MusicData;
        //一开始 就读取本地的 排行榜数据
        rankData = XmlDataMgr.Instance.LoadData(typeof(RankData), "RankData") as RankData;
        //一开始 就读取 角色数据 
        roleData = XmlDataMgr.Instance.LoadData(typeof(RoleData), "RoleData") as RoleData;
        //一开始 就读取 子弹数据
        bulletData = XmlDataMgr.Instance.LoadData(typeof(BulletData), "BulletData") as BulletData;
        //一开始 就读取 开火点数据
        fireData = XmlDataMgr.Instance.LoadData(typeof(FireData), "FireData") as FireData;
    }

    #region 音乐音效相关
    //保存音乐相关数据的方法
    public void SaveMusicData()
    {
        XmlDataMgr.Instance.SaveData(musicData, "MusicData");
    }

    //开关背景音乐的方法
    public void SetMusicIsOpen(bool isOpen)
    {
        //改数据
        musicData.musicIsOpen = isOpen;
        //真正改变背景音乐的开关
        BKMusic.Instance.SetBKMusicIsOpen(isOpen);
    }

    //开关音效的方法
    public void SetSoundIsOpen(bool isOpen)
    {
        //改数据
        musicData.SoundIsOpen = isOpen;
        //真正改变音效的开关
    }

    //设置背景音乐的音效 0~1
    public void SetMusicValue(float value)
    {
        //改数据
        musicData.musicValue = value;
        //真正的改变背景音乐的大小
        BKMusic.Instance.SetBKMusicValue(value);
    }

    //设置音效的音效 0~1
    public void SetSoundValue(float value)
    {
        //改数据
        musicData.soundValue = value;
    }
    #endregion

    #region 排行榜相关
    /// <summary>
    /// 添加排行榜数据
    /// </summary>
    /// <param name="name">玩家名</param>
    /// <param name="time">通关时间</param>
    public void AddRankData(string name, int time)
    {
        //单条数据
        RankInfo rankInfo = new RankInfo();
        rankInfo.name = name;
        rankInfo.time = time;
        rankData.rankList.Add(rankInfo);

        //排序
        rankData.rankList.Sort((a, b)=>
        {
            if (a.time > b.time)
                return -1;
            return 1;
        });

        //移除大于20条的内容
        if (rankData.rankList.Count > 20)
            rankData.rankList.RemoveAt(20);
        //rankData.rankList.RemoveRange(20, rankData.rankList.Count - 20);

        //保存数据
        XmlDataMgr.Instance.SaveData(rankData, "RankData");
    }
    #endregion


    #region 玩家数据相关
    /// <summary>
    /// 提供给外部 获取当前选择的 英雄数据
    /// </summary>
    /// <returns></returns>
    public RoleInfo GetNowSelHeroInfo()
    {
        return roleData.roleList[nowSelHeroIndex];
    }
    #endregion
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏