using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using UnityEngine; [CreateAssetMenu(fileName = "SettingsScheme", menuName = "Создание настроек/Создать схему настроек")] public class SettingsScheme : ScriptableObject { public List groups; public string CalculateHash() { var sb = new StringBuilder(); foreach (var group in groups) { sb.Append(group.name); foreach(var setting in group.Settings) { sb.Append(setting.GetStringForHash()); } } Debug.Log($"Сырые хэш данные: {sb.ToString()}"); string hash; using (SHA256 sha256 = SHA256.Create()) { byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString())); hash = BitConverter.ToString(hashBytes).Replace("-", ""); Debug.Log($"Хэш: {sb.ToString()}"); } return hash; } public SettingsSchemeDTO GetDTO() { SettingsSchemeDTO dto = new SettingsSchemeDTO(); dto.groups = new List(); if (this.groups != null) { foreach (var group in this.groups) { if (group != null) { dto.groups.Add(group.GetDTO()); } } } return dto; } // Статический метод для создания SettingsScheme из DTO public static SettingsScheme FromDTO(SettingsSchemeDTO dto) { SettingsScheme scheme = CreateInstance(); dto.ApplyTo(scheme); return scheme; } } [System.Serializable] public class SettingsSchemeDTO { public List groups; // Метод для восстановления из DTO в SettingsScheme public void ApplyTo(SettingsScheme scheme) { scheme.groups = new List(); if (this.groups != null) { foreach (var groupDTO in this.groups) { SettingsGroup group = SettingsGroup.FromDTO(groupDTO); scheme.groups.Add(group); } } } // Метод для расчета хэша из DTO public string CalculateHash() { var sb = new StringBuilder(); foreach (var group in groups) { sb.Append(group.Name); sb.Append(group.IconPath); foreach (var setting in group.Settings) { sb.Append(setting.GetStringForHash()); } } using (SHA256 sha256 = SHA256.Create()) { byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString())); string hash = BitConverter.ToString(hashBytes).Replace("-", ""); return hash; } } }