96SEO 2026-02-20 02:56 16
layerPrefs基本方法1、PlayerPrefs概念2、存储相关3、读取相关4、删除数据思考

PlayerPrefs存储位置1、PlayerPrefs存储的数据在哪个位置2、PlayerPrefs
2、Playerprefs实践1、必备知识点-反射知识小补充2、需求分析
Playerprefs数据管理类创建3、反射存储数据-常用成员、List成员、Dic成员、自定义类成员4、反射读取数据-常用成员、List成员、Dic成员、自定义类成员4、加密思路5、生成资源包
利用反射结合PlayerPrets制作通用存诸工具PlayerPrefs基本方法
是unity提供的可以用于存储读取玩家数据的公共类2、存储相关
PlaverPrefs的数据存储类似于键值对存储一个键对应一个值
18);PlayerPrefs.SetFloat(myHeight,
183.5f);PlayerPrefs.SetString(myName,
//sex若为true存1sex若为flase则存1PlayerPrefs.SetInt(sex,
0);如果用同一个键名会进行覆盖PlayerPrefs.SetFloat(myAge,
PlayerPrefs.GetInt(myAge);print(age);
设置的初始默认值print(age);2、floatfloat
100f);print(height);3、stringstring
PlayerPrefs.GetString(myName);print(name);是否存在的键名if
(PlayerPrefs.HasKey(myName)){print(存在myName对应的键值对数据);}4、删除数据
删除指定键值对PlayerPrefs.DeleteKey(myAge);删除所有PlayerPrefs.DeleteAll();思考
Save(){PlayerPrefs.SetString(keyName
name);PlayerPrefs.SetInt(keyName
age);PlayerPrefs.SetInt(keyName
atk);PlayerPrefs.SetInt(keyName
def);PlayerPrefs.SetInt(keyName
itemList[i].id);PlayerPrefs.SetInt(keyName
itemList[i].num);}PlayerPrefs.Save();}///
Player();p.Load();//print(p.name);//print(p.age);//print(p.atk);//print(p.def);print(不同类型道具数量p.itemList.Count);for
99;p.itemList.Add(item);p.Save();//其他玩家Player
Player();p2.Load(Player2);p2.Save();}
存储在HKCU\Software\[公司名称]\[产品名称]项下的注册表中其中公司和产品名称是在Project
regeditHKEY_CURRENT_USERSOFTWAREUnityUnityEditor公司名称产品名称
Android/data/data/应用程序包名/shared_prefs/pkg-name.xml
IOS/Library/Preferences/[应用ID].plist2、PlayerPrefs
Save(){PlayerPrefs.SetInt(rankListNum,
rankList[i];PlayerPrefs.SetString(rankInfo
info.playerName);PlayerPrefs.SetInt(rankInfo
info.playerScore);PlayerPrefs.SetInt(rankInfo
PlayerPrefs.GetInt(rankListNum,
RankInfo(PlayerPrefs.GetString(rankInfo
RankListInfo();print(rankList.rankList.Count);for
rankList.rankList[i].playerName);print(分数
rankList.rankList[i].playerScore);print(时间
rankList.rankList[i].playerTime);}rankList.Add(玩家,
Start(){1、判断A对象是否让B对象分配空间//父类装子类//是否可以从某一个类型的对象为自己分配空间Type
typeof(Son);//调用者通过IsAssignableFrom方法进行判断是否可以通过传入的类型为自己分配空间if
(fa***rType.IsAssignableFrom(sonType)){print(可以分配);Fa***r
Activator.CreateInstance(sonType)
Fa***r;print(f);}else{print(不能分配);}2、通过反射获取泛型类型Liststring
list.GetType();//通过得到泛型类的类型得到泛型具体的类型Type[]
listType.GetGenericArguments();print(types[0]);Dictionarystring,float
dicType.GetGenericArguments();print(types[0]);print(types[1]);}
PlayerInfo();PlayerPrefsDataMgr.Instance.SaveData(p,
3、反射存储数据-常用成员、List成员、Dic成员、自定义类成员
namekeyName数据对象的唯一key自己控制/parampublic
keyName){//通过Type得到传入数据对象的所有字段结合PlayerPrefs来存储//1、获取传入数据对象的所有字段Type
data.GetType();//得到所有字段FieldInfo[]
dataType.GetFields();//2、自己定义一个key的规则进行数据存储//keyName_数据类型_字段类型_字段名//3、遍历字段进行数据存储string
i){//对每一个字段进行数据存储//得到具体的字段信息info
infos[i];//通过FieldInfo可以直接获取到字段的类型和字段的名字//
Player1_PlayerInfo_Int32_agesaveKeyNmae
info.Name;//获取值//info.GetValue(data)SaveData(info.GetValue(data),
namekeyName存储的key名称/paramprivate
keyName);PlayerPrefs.SetInt(keyName,
typeof(float)){Debug.Log(存储float
keyName);PlayerPrefs.SetFloat(keyName,
typeof(string)){Debug.Log(存储string
keyName);PlayerPrefs.SetString(keyName,
keyName);PlayerPrefs.SetInt(keyName,
(typeof(IList).IsAssignableFrom(fieldType)){Debug.Log(存储List
IList;//存储List数量PlayerPrefs.SetInt(keyName,
(typeof(IDictionary).IsAssignableFrom(fieldType)){Debug.Log(存储Dictionary
IDictionary;//存储字典长度PlayerPrefs.SetInt(keyName,dic.Count);//遍历存储Dic里面的具体值int
index);index;}}else{SaveData(value,
keyName){//只需要传入一个Type,typeof(Player),就可以在内部动态创建一个对象返回出来//根据传入的类型和keyName依据存储数据时key的拼接规则来进行数据的获取赋值然后返回出去return
4、反射读取数据-常用成员、List成员、Dic成员、自定义类成员
PlayerInfo();将数据对象的信息存储到硬盘//PlayerPrefsDataMgr.Instance.SaveData(p,
Player1);//PlayerPrefs.DeleteAll();//读取数据PlayerInfo
PlayerPrefsDataMgr.Instance.LoadData(typeof(PlayerInfo),
ItemInfo(1,99));p.itemList.Add(new
ItemInfo(2,22));p.itemDic.Add(3,
44));//游戏数据存储PlayerPrefsDataMgr.Instance.SaveData(p,
namekeyName数据对象的唯一key自己控制/parampublic
keyName){//通过Type得到传入数据对象的所有字段结合PlayerPrefs来存储//1、获取传入数据对象的所有字段Type
data.GetType();//得到所有字段FieldInfo[]
dataType.GetFields();//2、自己定义一个key的规则进行数据存储//keyName_数据类型_字段类型_字段名//3、遍历字段进行数据存储string
i){//对每一个字段进行数据存储//得到具体的字段信息info
infos[i];//通过FieldInfo可以直接获取到字段的类型和字段的名字//
Player1_PlayerInfo_Int32_agesaveKeyNmae
info.Name;//获取值//info.GetValue(data)SaveData(info.GetValue(data),
saveKeyNmae);}PlayerPrefs.Save();}///
namekeyName存储的key名称/paramprivate
keyName);PlayerPrefs.SetInt(keyName,
typeof(float)){Debug.Log(存储float
keyName);PlayerPrefs.SetFloat(keyName,
typeof(string)){Debug.Log(存储string
keyName);PlayerPrefs.SetString(keyName,
keyName);PlayerPrefs.SetInt(keyName,
(typeof(IList).IsAssignableFrom(fieldType)){Debug.Log(存储List
IList;//存储List数量PlayerPrefs.SetInt(keyName,
(typeof(IDictionary).IsAssignableFrom(fieldType)){Debug.Log(存储Dictionary
IDictionary;//存储字典长度PlayerPrefs.SetInt(keyName,dic.Count);//遍历存储Dic里面的具体值int
index);index;}}else{SaveData(value,
keyName){//只需要传入一个Type,typeof(Player),就可以在内部动态创建一个对象返回出来//根据传入的类型和keyName依据存储数据时key的拼接规则来进行数据的获取赋值然后返回出去//根据传入的Type创建一个对象,用于存储数据object
Activator.CreateInstance(type);//要在这个new出来的对象中存储数据FieldInfo[]
type.GetFields();//用于拼接key的字符串string
info.Name;//填充数据到data中info.SetValue(data,
namefieldType字段类型,用于判断API的读取/param///
namekeyName唯一key,获取Value/param///
(typeof(IList).IsAssignableFrom(fieldType)){//得到List长度int
Activator.CreateInstance(fieldType)
i){//得到List中泛型的类型list.Add(LoadValue(fieldType.GetGenericArguments()[0],
(typeof(IDictionary).IsAssignableFrom(fieldType)){//得到字典dictionary的长度int
Activator.CreateInstance(fieldType)
fieldType.GetGenericArguments();for
i){dic.Add(LoadValue(kvType[0],
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback