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