代码很简单没有难度,都有注解,随便 康一康 就会了。
数据存储
使用 ScriptableObject 类来再Unity编辑器情况下进行基础数据存储
注意:ScriptableObject 只能在Unity编辑器条件下进行动态存储 打包之后是无法进行数据保存的
也就是说打包之后 ScriptableObject 文件只具有可读性
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[SerializeField]
[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/New Item")]
public class DataStorage_ZH : ScriptableObject
{
public int _Int;
public string _String;
public float _Float;
}
数据持久化
DataPersistence_ZH 类 使用 PlayerPrefs里面的方法为主体进行编辑的
KeyTypeStrAdd 枚举类可以根据 具体内容进行自定义填充
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DataPersistence_ZH : MonoBehaviour
{
[Header("数据")]
public DataStorage_ZH _DataStorage;
[Header("String 数据")]
public InputField _TextStr;
[Header("Float 数据")]
public InputField _TextFloat;
[Header("Int 数据")]
public InputField _TextInt;
public static DataPersistence_ZH _DataPersistence;
private void Awake()
{
_DataPersistence = this;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
StorageData(_DataStorage._String + nameof(_DataStorage._String), _TextStr.text,KeyTypeStrAdd._String);
StorageData(_DataStorage._String + nameof(_DataStorage._Float), _TextFloat.text,KeyTypeStrAdd._Float);
StorageData(_DataStorage._String + nameof(_DataStorage._Int), _TextInt.text,KeyTypeStrAdd._Int);
}
if (Input.GetKeyDown(KeyCode.E))
{
StartCoroutine(InquireData(_DataStorage._String, nameof(_DataStorage._String)));
StartCoroutine(InquireData(_DataStorage._String, nameof(_DataStorage._Float)));
StartCoroutine(InquireData(_DataStorage._String, nameof(_DataStorage._Int)));
}
}
public void DeleteKeyData(string _DeleteKey)
{
PlayerPrefs.DeleteKey(_DeleteKey);
}
public void DeleteKeyData()
{
PlayerPrefs.DeleteAll();
}
#region 数据存储
public void StorageData(string _DataKey, string _DataValue)
{
PlayerPrefs.SetString(_DataKey, _DataValue);
_DataStorage._String = _DataValue;
PlayerPrefs.Save();
}
public void StorageData(string _DataKey, float _DataValue)
{
PlayerPrefs.SetFloat(_DataKey, _DataValue);
_DataStorage._Float = _DataValue;
PlayerPrefs.Save();
}
public void StorageData(string _DataKey, int _DataValue)
{
PlayerPrefs.SetInt(_DataKey, _DataValue);
_DataStorage._Int = _DataValue;
PlayerPrefs.Save();
}
public void StorageData(string _DataKey, string _DataValue, KeyTypeStrAdd _KeyType)
{
switch (_KeyType)
{
case KeyTypeStrAdd._String:
PlayerPrefs.SetString(_DataKey, _DataValue);
_DataStorage.GetType().GetField(_KeyType.ToString()).SetValue(_DataStorage, _KeyType.ToString());
PlayerPrefs.Save();
break;
case KeyTypeStrAdd._Float:
PlayerPrefs.SetFloat(_DataKey, float.Parse(_DataValue));
_DataStorage.GetType().GetField(_KeyType.ToString()).SetValue(_DataStorage, float.Parse(_DataValue));
PlayerPrefs.Save();
break;
case KeyTypeStrAdd._Int:
PlayerPrefs.SetInt(_DataKey, (int)float.Parse(_DataValue));
_DataStorage.GetType().GetField(_KeyType.ToString()).SetValue(_DataStorage, (int)float.Parse(_DataValue));
PlayerPrefs.Save();
break;
default:
break;
}
}
#endregion
public IEnumerator InquireData(string _DataKey,string _StrKeyType)
{
string _InquireDataStr;
float _InquireDataFloat;
int _InquireDataInt;
if (_DataKey != null)
{
switch (_StrKeyType)
{
case "_String":
_InquireDataStr = PlayerPrefs.GetString(_DataKey + _StrKeyType);
_TextStr.text = _InquireDataStr;
yield return 0;
break;
case "_Float":
_InquireDataFloat = PlayerPrefs.GetFloat(_DataKey + _StrKeyType);
_TextFloat.text = _InquireDataFloat.ToString();
yield return 0;
break;
case "_Int":
_InquireDataInt = PlayerPrefs.GetInt(_DataKey + _StrKeyType);
_TextInt.text = _InquireDataInt.ToString();
yield return 0;
break;
default:
break;
}
}
}
public enum KeyTypeStrAdd
{
_String,
_Float,
_Int,
}
}
示例工程下载
Unity 持久化存储示例场景: 下载链接.
代码搭载
最终运行运行
暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。 路漫漫其修远兮,与君共勉。
|