Я думаю, что лучше использовать и хеширование, и проверку try / catch. Вы можете просто попытаться открыть файл и сравнить его хеш с хешем, который вы сохранили в последнем сеансе игры:
private void LoadSave()
{
try
{
JsonUtility.FromJson("filename", ...);
string oldHash = PlayerPrefs.GetString("importantSaveFileHash");
string newHash = CalculateMd5("filename");
if (oldHash == null || oldHash == newHash)
{
//recalculate hash every time you change the save file
//you can also encrypt this hash for better security
PlayerPrefs.SetString("importantSaveFileHash", newHash);
//RESULT: Save file is cool!
}
else
{
//RESULT: Save file was modified!
}
}
catch (Exception e)
{
//RESULT: broken file
}
}
private static string CalculateMd5(string filename)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(filename))
{
var hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
}
Кстати, вы можете просто использовать PlayerPrefs для хранения всего состояния игры (я знаю, что иногда важно иметь видимый и читаемый файл сохранения) - выберите то, что вам нужно)
UPD : это не хорошодля сохранения состояния игры в PlayerPrefs - используйте любой другой способ (см. комментарии)