using System; using System.IO; using System.Security.Cryptography; using System.Text.Json; using System.Collections.Generic; class Program { static string buildPath = "Build"; // Unity 빌드 폴더 (예: Build/) static string outputJsonFile = "file_list.json"; // 생성할 JSON 파일 static void Main() { Console.WriteLine("🔍 Unity 빌드 파일 목록 생성 중..."); if (!Directory.Exists(buildPath)) { Console.WriteLine($"❌ 빌드 폴더가 존재하지 않습니다: {buildPath}"); return; } Dictionary fileHashes = new Dictionary(); foreach (string filePath in Directory.GetFiles(buildPath, "*", SearchOption.AllDirectories)) { string relativePath = Path.GetRelativePath(buildPath, filePath).Replace("\\", "/"); string hash = GetFileHash(filePath); fileHashes[relativePath] = hash; } // 🔒 모든 해시 값을 알파벳 순으로 정렬하고 이어붙인 뒤 전체 SHA256 계산 string combinedHashes = string.Join("", new SortedDictionary(fileHashes).Values); string versionID = GetVersionID(combinedHashes); var jsonObject = new { VersionID = versionID, Files = fileHashes }; string jsonString = JsonSerializer.Serialize(jsonObject, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(Path.Combine(".", outputJsonFile), jsonString); } static string GetFileHash(string filePath) { using (var sha256 = SHA256.Create()) using (var stream = File.OpenRead(filePath)) { byte[] hashBytes = sha256.ComputeHash(stream); return BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); } } static string GetVersionID(string input) { using (var sha256 = SHA256.Create()) { byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input); byte[] hashBytes = sha256.ComputeHash(inputBytes); return BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); } } }