{"id":165,"date":"2025-04-29T18:49:00","date_gmt":"2025-04-29T09:49:00","guid":{"rendered":"https:\/\/cg-method.com\/unity\/?p=165"},"modified":"2026-10-24T05:28:33","modified_gmt":"2026-10-23T20:28:33","slug":"prefab-structure-viewer","status":"publish","type":"post","link":"https:\/\/cg-method.com\/unity\/prefab-structure-viewer\/","title":{"rendered":"Unity\u306ePrefab\u53c2\u7167\u95a2\u4fc2\u3092\u53ef\u8996\u5316\uff5cNested\u30fbVariant\u3068GUID\u306eCSV\u51fa\u529b"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Prefab\u306b\u542b\u307e\u308c\u308b\u5225\u306ePrefab\u3068\u3001Variant\u306e\u6d3e\u751f\u5143\u3092CSV\u3078\u51fa\u529b\u3057\u3001\u53c2\u7167\u30b0\u30e9\u30d5\u3067\u78ba\u8a8d\u3059\u308b<\/strong>\u4f8b\u3067\u3059\u3002\u540c\u540dPrefab\u3092GUID\u3067\u5206\u3051\u3001\u77e2\u5370\u306f\u300c\u4f9d\u5b58\u3059\u308b\u5074\u2192\u53c2\u7167\u5148\u300d\u306b\u305d\u308d\u3048\u307e\u3059\u3002GameObject\u306e\u5185\u90e8\u968e\u5c64\u4e00\u89a7\u306f<a href=\"https:\/\/cg-method.com\/unity\/unity-prefab-csv-export-tool\/\">Prefab\u5185\u90e8\u306eCSV<\/a>\u3001\u4fdd\u5b58\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u4e00\u89a7\u306f<a href=\"https:\/\/cg-method.com\/unity\/unity-prefab-tree-csv-export\/\">Prefab\u30d5\u30a1\u30a4\u30eb\u306e\u30c4\u30ea\u30fcCSV<\/a>\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u4ed5\u69d8\u53c2\u7167\u306fUnity 6.3 LTS\uff086000.3\uff09\u3067\u3059\u3002\u7d14\u7c8bC#\u306eCSV\u6574\u5f62\u3001JavaScript\u306e\u884c\u691c\u8a3c\u30fb\u30b0\u30e9\u30d5\u8d70\u67fb\u3001\u67b6\u7a7a\u30c7\u30fc\u30bf\u3092\u4f7f\u3063\u305fCytoscape 3.23.0\u306e\u30ed\u30fc\u30ab\u30eb\u8868\u793a\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002<strong>Unity Editor\u3067\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u30fbPrefab\u62bd\u51fa\u3001Google Sheets\u3078\u306e\u5b9f\u53d6\u8fbc\u3001Apps Script\u306e\u5b9f\u884c\u30fb\u6a29\u9650\u30fb\u30c7\u30d7\u30ed\u30a4\u306f\u672a\u78ba\u8a8d\u3067\u3059\u3002<\/strong>\u5143\u8a18\u4e8b\u306e\u753b\u50cf\u306f\u65e7\u7248\u306e\u8cc7\u6599\u3067\u3001\u4eca\u56de\u306e\u4fee\u6b63\u7248\u306e\u7d50\u679c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306f\u65e7\u30d3\u30e5\u30fc\u30a2\u30fc\u306e\u753b\u9762\u3067\u3059\u3002\u65b0\u7248\u3067\u306f\u8272\u3092AssetType\u3001\u7dda\u3092Nested\/Variant\u306b\u5206\u3051\u3001\u30d5\u30a9\u30eb\u30c0\u30fc\u540d\u3067\u56fa\u5b9a\u914d\u8272\u3059\u308b\u65b9\u5f0f\u3092\u4f7f\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n<figure class=\"wp-block-image size-large is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"511\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h37_43-1024x511.png\" alt=\"\u30d7\u30eb\u30c0\u30a6\u30f3\u3067\u9078\u629e\u3057\u305fPrefab\u306e\u95a2\u9023\u3059\u308b\u53c2\u7167\u95a2\u4fc2\u304c\u30ce\u30fc\u30c9\u3067\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u753b\u9762\u306e\u69d8\u5b50\u3002\" class=\"wp-image-167\" srcset=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h37_43-1024x511.png 1024w, https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h37_43-300x150.png 300w, https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h37_43-768x384.png 768w, https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h37_43-1536x767.png 1536w, https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h37_43.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<h2 class=\"wp-block-heading\">\u7d99\u627f\u306e\u78ba\u8a8d\u3060\u3051\u306a\u3089\u6a19\u6e96\u6a5f\u80fd\u3092\u5148\u306b\u898b\u308b<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Variant\u306e\u7d99\u627f\u95a2\u4fc2\u3060\u3051\u3092\u78ba\u8a8d\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u6a19\u6e96\u306ePrefab Family\u8868\u793a\u3067\u76ee\u7684\u3092\u6e80\u305f\u305b\u308b\u304b\u5148\u306b\u78ba\u8a8d\u3057\u307e\u3059\u3002<a href=\"https:\/\/unity.com\/blog\/engine-platform\/prefabs-whats-new-2022-2\">Unity\u306e2022.2 Prefab\u6a5f\u80fd\u7d39\u4ecb<\/a>\u306b\u306fPrefab Family\u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u4f5c\u308bCSV\u3068Web\u30d3\u30e5\u30fc\u30a2\u30fc\u306f\u3001\u9078\u3093\u3060\u8907\u6570\u30d5\u30a9\u30eb\u30c0\u30fc\u306ePrefab\u3092\u4e00\u89a7\u306b\u3057\u3001Nested\u3068Variant\u3092\u95a2\u4fc2\u5225\u306b\u7d5e\u308b\u7528\u9014\u3067\u3059\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">\u3053\u306e\u30c4\u30fc\u30eb\u304c\u53d6\u5f97\u3059\u308b\u95a2\u4fc2\u3068\u5bfe\u8c61\u5916<\/h2>\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u9805\u76ee\u30fb\u75c7\u72b6<\/th><th>\u6761\u4ef6\u30fb\u78ba\u8a8d\u5148<\/th><\/tr><\/thead><tbody><tr><td>\u5165\u529b<\/td><td>Project\u3067\u9078\u3093\u3060Assets\u5185\u306e1\u3064\u4ee5\u4e0a\u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u3068\u5b50\u30d5\u30a9\u30eb\u30c0\u30fc\u306e.prefab\u3002\u91cd\u8907\u3059\u308b\u9078\u629e\u306f\u9664\u53bb\u3002\u9078\u629e\u306b\u6df7\u3056\u3063\u305f\u30d5\u30a9\u30eb\u30c0\u30fc\u4ee5\u5916\u306f\u7121\u8996\u3002Packages\u30fbFBX\u306e\u76f4\u63a5\u8d70\u67fb\u306f\u5bfe\u8c61\u5916\u3002<\/td><\/tr><tr><td>Nested\u306e\u77e2\u5370<\/td><td>\u8d70\u67fb\u3057\u305fPrefab\u2192\u305d\u306e\u5185\u5bb9\u306e\u5168\u968e\u5c64\u306b\u542b\u307e\u308c\u308bPrefab\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u53c2\u7167\u5148\u3002\u975eActive\u3082\u542b\u3080\u3002\u76f4\u63a5\u306e\u5b50\u3060\u3051\u3067\u306a\u304f\u3001\u5165\u308c\u5b50\u306e\u5965\u306b\u3042\u308b\u53c2\u7167\u5148\u3082\u542b\u3080\u5b9f\u52b9\u7684\u306a\u5305\u542b\u3002<\/td><\/tr><tr><td>Variant\u306e\u77e2\u5370<\/td><td>Variant\u2192\u76f4\u8fd1\u306e\u6d3e\u751f\u5143Prefab\u3002Nested\u306e\u7591\u4f3c\u884c\u3092\u8ffd\u52a0\u3057\u306a\u3044\u3002\u6d3e\u751f\u5143\u3092\u3055\u3089\u306b\u305f\u3069\u308b\u306b\u306f\u3001\u305d\u306e\u6d3e\u751f\u5143\u3082\u8d70\u67fb\u5bfe\u8c61\u306b\u542b\u3081\u308b\u3002<\/td><\/tr><tr><td>GUID\u3068\u540c\u540d<\/td><td>GUID\u3092\u30ce\u30fc\u30c9ID\u306b\u3059\u308b\u3002\u540d\u524d\u304c\u540c\u3058\u3067\u3082\u5225GUID\u306f\u5225\u30ce\u30fc\u30c9\u3002\u30d1\u30b9\u3068\u540d\u524d\u3092\u8868\u793a\u5c5e\u6027\u3068\u3057\u3066\u4fdd\u6301\u3059\u308b\u3002<\/td><\/tr><tr><td>\u53c2\u7167\u5148\u3060\u3051\u306e\u30ce\u30fc\u30c9<\/td><td>\u8d70\u67fb\u5bfe\u8c61\u5916\u3067\u3082Assets\u5185\u306b\u3042\u308bPrefab\u3084Model\u304c\u53c2\u7167\u5148\u306b\u73fe\u308c\u305f\u3089\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u3002\u8ffd\u52a0\u3057\u305f\u53c2\u7167\u5148\u304b\u3089\u5148\u306e\u95a2\u4fc2\u306f\u672a\u8d70\u67fb\u3067\u3001\u7834\u7dda\u306e\u67a0\u3067\u533a\u5225\u3059\u308b\u3002Packages\u5185\u306e\u53c2\u7167\u5148\u306f\u767b\u9332\u3067\u304d\u305a\u3001\u53c2\u7167\u5143\u306e\u8d70\u67fb\u30a8\u30e9\u30fc\u306b\u306a\u308b\u3002<\/td><\/tr><tr><td>\u53d6\u5f97\u3057\u306a\u3044\u4f9d\u5b58<\/td><td>Material\u30fbTexture\u30fbScene\u30fb\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u53c2\u7167\u306a\u3069\u3001\u4e00\u822c\u306eAssetDatabase\u4f9d\u5b58\u4e00\u89a7\u306f\u53d6\u5f97\u3057\u306a\u3044\u3002\u52d5\u7684Instantiate\u3001Missing\u306e\u5b8c\u5168\u691c\u51fa\u3084\u672a\u4f7f\u7528\u5224\u5b9a\u306b\u3082\u4f7f\u308f\u306a\u3044\u3002<\/td><\/tr><tr><td>\u30b5\u30a4\u30ba\u3068\u5931\u6557<\/td><td>2000\u30ce\u30fc\u30c9\u30fb5000\u8fba\u30fb10000\u884c\u4e0a\u9650\u3002\u5c0f\u3055\u3044\u691c\u8a3c\u7528\u30d5\u30a9\u30eb\u30c0\u30fc\u304b\u3089\u8a66\u3059\u3002\u500b\u5225\u8d70\u67fb\u306e\u5931\u6557\u306fError\u30ce\u30fc\u30c9\u3068Console\u3078\u6b8b\u3057\u3001\u305d\u306ePrefab\u306e\u90e8\u5206\u7684\u306a\u8fba\u306f\u63a1\u7528\u3057\u306a\u3044\u3002\u305f\u3060\u3057\u521d\u671f\u30ce\u30fc\u30c9\u767b\u9332\u3084Prefab\u89e3\u653e\u3067\u4f8b\u5916\u304c\u51fa\u308b\u3068\u5168\u4f53\u3092\u4e2d\u65ad\u3057\u3001CSV\u3092\u4fdd\u5b58\u3057\u306a\u3044\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u3068\u3057\u3066A\u306e\u4e2d\u306bB\u3001B\u306e\u4e2d\u306bC\u304c\u3042\u308b\u5834\u5408\u3001A\u306e\u5168\u968e\u5c64\u8d70\u67fb\u306b\u306fA\u2192B\u3068A\u2192C\u304c\u542b\u307e\u308c\u307e\u3059\u3002B\u3082\u5bfe\u8c61\u306a\u3089B\u2192C\u3082\u51fa\u307e\u3059\u3002\u3053\u306eNested\u306f<strong>\u76f4\u8fd1\u306e\u89aa\u5b50\u3060\u3051\u3092\u8868\u3059\u6728\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/strong>Override\u3092\u542b\u3080\u30ed\u30fc\u30c9\u5f8c\u306e\u5185\u5bb9\u3092\u8abf\u3079\u308b\u305f\u3081\u3001Variant\u304c\u7d99\u627f\u3057\u305f\u5165\u308c\u5b50\u3082\u5305\u542b\u306b\u73fe\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002Variant\u306e\u7d99\u627f\u7dda\u3068\u306f\u5206\u3051\u3066\u8aad\u307f\u307e\u3059\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u540c\u3058\u7d44\u5408\u305b\u306eNested\u306f1\u8fba\u3078\u307e\u3068\u3081\u3001\u914d\u7f6e\u6570\u306f\u96c6\u8a08\u3057\u307e\u305b\u3093\u3002Nested\u3068Variant\u304c\u5b9f\u969b\u306b\u4e21\u65b9\u3042\u308b\u7d44\u5408\u305b\u306f2\u7a2e\u985e\u306e\u8fba\u3092\u4fdd\u6301\u3057\u307e\u3059\u3002\u300c\u307b\u304b\u304b\u3089\u53c2\u7167\u3055\u308c\u308b\u300d\u3092Base\u3068\u3044\u3046AssetType\u306b\u7f6e\u304d\u63db\u3048\u305a\u3001Regular\u30fbVariant\u30fbModel\u3068\u95a2\u4fc2\u306e\u6709\u7121\u3092\u533a\u5225\u3057\u307e\u3059\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">1. C#\u3092\u5c0e\u5165\u3057\u3066CSV\u3092\u4fdd\u5b58\u3059\u308b<\/h2>\n\n\n<ol class=\"wp-block-list\"><li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8907\u88fd\u3057\u3001\u6b21\u306e\u5168\u6587\u3092Assets\/Editor\/ExportPrefabGraph.cs\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002\u65e7ExportPrefabRelationships\u3068\u306f\u30af\u30e9\u30b9\u540d\u3068CSV\u5f62\u5f0f\u304c\u9055\u3044\u307e\u3059\u3002Editor\u5c02\u7528asmdef\u3067\u306fEditor\u53c2\u7167\u3092\u6301\u3064Assembly\u3078\u7f6e\u304d\u307e\u3059\u3002<\/li><li>Play Mode\u3092\u505c\u6b62\u3057\u3001Console\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u540c\u540d\u306e\u5225\u30d5\u30a9\u30eb\u30c0\u30fcPrefab\u3001Variant\u3068\u6d3e\u751f\u5143\u3001Group\u306e\u4e0b\u306e\u5165\u308c\u5b50\u3001\u5358\u72ecPrefab\u3092\u5c11\u6570\u7528\u610f\u3057\u307e\u3059\u3002<\/li><li>Project\u3067\u78ba\u8a8d\u7528\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u3073\u3001Tools \u2192 CG Method \u2192 Export Prefab Reference Graph CSV\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u9014\u4e2d\u53d6\u6d88\u3067\u306fCSV\u3092\u4fdd\u5b58\u3057\u307e\u305b\u3093\u3002<\/li><li>\u4fdd\u5b58\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u306fAssets\u5916\u306e\u65b0\u3057\u3044.csv\u3092\u9078\u3073\u307e\u3059\u3002\u65e2\u5b58\u30d5\u30a1\u30a4\u30eb\u306fCreateNew\u3067\u62d2\u5426\u3057\u307e\u3059\u3002\u53d6\u6d88\u306f\u4fdd\u5b58\u3057\u307e\u305b\u3093\u3002\u66f8\u8fbc\u307f\u5931\u6557\u6642\u306f\u4e0d\u5b8c\u5168\u306a\u30d5\u30a1\u30a4\u30eb\u304c\u6b8b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\u3001Console\u3068\u4fdd\u5b58\u5148\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u65b0\u3057\u3044\u540d\u524d\u3067\u518d\u5b9f\u884c\u3057\u307e\u3059\u3002<\/li><li>Console\u306enodes\u30fbedges\u30fbfailed\u3068CSV\u306e9\u5217\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002failed\u304c0\u3067\u3082\u95a2\u4fc2\u306e\u6b63\u3057\u3055\u306f\u6700\u5c0fPrefab\u306e\u671f\u5f85\u5024\u3068\u7167\u5408\u3057\u307e\u3059\u3002Error\u304c\u3042\u308c\u3070\u30b0\u30e9\u30d5\u3092\u5b8c\u5168\u306a\u4e00\u89a7\u3068\u5224\u65ad\u3057\u307e\u305b\u3093\u3002<\/li><\/ol>\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-csharp\" data-lang=\"C#\"><code>using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing UnityEditor;\nusing UnityEngine;\n\npublic static class ExportPrefabGraph\n{\n    private sealed class Node\n    {\n        public string Guid, Path, Name, Type, Status;\n        public bool InScope;\n    }\n    private sealed class Edge\n    {\n        public string From, To, Relation;\n    }\n    [MenuItem(\"Tools\/CG Method\/Export Prefab Reference Graph CSV\")]\n    private static void Export()\n    {\n        if (EditorApplication.isPlayingOrWillChangePlaymode)\n            throw new InvalidOperationException(\"Stop Play Mode before exporting.\");\n        string[] roots = Selection.objects.Select(AssetDatabase.GetAssetPath)\n            .Where(p =&gt; (p == \"Assets\" || p.StartsWith(\"Assets\/\", StringComparison.Ordinal)) &amp;&amp; AssetDatabase.IsValidFolder(p))\n            .Distinct().OrderBy(p =&gt; p, StringComparer.Ordinal).ToArray();\n        if (roots.Length == 0) {Debug.LogError(\"Select one or more Assets folders in Project.\"); return;}\n        var paths = AssetDatabase.FindAssets(\"t:Prefab\", roots).Select(AssetDatabase.GUIDToAssetPath)\n            .Where(p =&gt; p.EndsWith(\".prefab\", StringComparison.OrdinalIgnoreCase))\n            .Distinct().OrderBy(p =&gt; p, StringComparer.Ordinal).ToArray();\n        if (paths.Length == 0) {Debug.LogWarning(\"No .prefab files in selected folders.\"); return;}\n        var scope = new HashSet&lt;string&gt;(paths, StringComparer.Ordinal);\n        var nodes = new Dictionary&lt;string, Node&gt;(StringComparer.Ordinal);\n        var edges = new Dictionary&lt;string, Edge&gt;(StringComparer.Ordinal);\n        int errors = 0;\n        try\n        {\n            \/\/ Register all selected assets, including ones with no outgoing relationships.\n            foreach (string path in paths) Register(path, scope, nodes);\n            for (int i = 0; i &lt; paths.Length; i++)\n            {\n                string path = paths[i];\n                if (EditorUtility.DisplayCancelableProgressBar(\"Prefab reference graph\", path, (float)i \/ paths.Length))\n                {Debug.LogWarning(\"Cancelled. No CSV saved.\"); return;}\n                Node source = nodes[AssetDatabase.AssetPathToGUID(path)];\n                var found = new List&lt;KeyValuePair&lt;string, string&gt;&gt;();\n                GameObject loaded = null;\n                try\n                {\n                    var asset = AssetDatabase.LoadAssetAtPath&lt;GameObject&gt;(path);\n                    if (asset == null) throw new InvalidDataException(\"Prefab asset could not be loaded.\");\n                    if (PrefabUtility.GetPrefabAssetType(asset) == PrefabAssetType.Variant)\n                    {\n                        var baseAsset = PrefabUtility.GetCorrespondingObjectFromSource(asset);\n                        string basePath = AssetDatabase.GetAssetPath(baseAsset);\n                        if (String.IsNullOrEmpty(basePath)) throw new InvalidDataException(\"Immediate Variant base was not found.\");\n                        found.Add(new KeyValuePair&lt;string,string&gt;(basePath, \"Variant\"));\n                    }\n                    loaded = PrefabUtility.LoadPrefabContents(path);\n                    \/\/ Effective containment at every depth, NOT only immediate dependencies.\n                    \/\/ Skip the loaded root: Variant inheritance is a separate relation above.\n                    foreach (Transform transform in loaded.GetComponentsInChildren&lt;Transform&gt;(true))\n                    {\n                        if (transform.gameObject == loaded || !PrefabUtility.IsAnyPrefabInstanceRoot(transform.gameObject)) continue;\n                        string nestedPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(transform.gameObject);\n                        if (String.IsNullOrEmpty(nestedPath)) throw new InvalidDataException(\"Nested asset path was not found.\");\n                        found.Add(new KeyValuePair&lt;string,string&gt;(nestedPath, \"Nested\"));\n                    }\n                    \/\/ Stage per asset. A failed scan supplies no partial outgoing edges.\n                    var staged = new List&lt;Edge&gt;();\n                    foreach (var relation in found)\n                    {\n                        Node target = Register(relation.Key, scope, nodes);\n                        if (target.Guid == source.Guid) throw new InvalidDataException(\"Self reference was found.\");\n                        staged.Add(new Edge {From=source.Guid, To=target.Guid, Relation=relation.Value});\n                    }\n                    foreach (Edge edge in staged)\n                        edges[edge.Relation + \"_\" + edge.From + \"_\" + edge.To] = edge;\n                    source.Status = \"Ready\";\n                }\n                catch (Exception error)\n                {\n                    source.Status = \"Error\"; errors++;\n                    Debug.LogError(\"Prefab scan failed: \" + path + \"\\n\" + error);\n                }\n                finally\n                {\n                    if (loaded != null) PrefabUtility.UnloadPrefabContents(loaded);\n                }\n            }\n        }\n        catch (Exception error) {Debug.LogError(\"Export aborted before saving: \" + error); return;}\n        finally {EditorUtility.ClearProgressBar();}\n        if (nodes.Count &gt; 2000 || edges.Count &gt; 5000)\n        {Debug.LogError(\"Viewer limit exceeded. Select smaller folders: 2000 nodes \/ 5000 edges.\"); return;}\n        var rows = new List&lt;string[]&gt;();\n        rows.Add(PrefabGraphCsv.Header);\n        foreach (Node node in nodes.Values.OrderBy(n =&gt; n.Path, StringComparer.Ordinal))\n            rows.Add(new[] {\"Node\",node.Guid,node.Path,node.Name,node.Type,\"\",\"\",node.InScope ? \"true\" : \"false\",node.Status});\n        foreach (var entry in edges.OrderBy(e =&gt; e.Key, StringComparer.Ordinal))\n        {Edge e = entry.Value; rows.Add(new[] {\"Edge\",e.From,\"\",\"\",\"\",e.To,e.Relation,\"\",\"\"});}\n        if (rows.Count &gt; 10000) {Debug.LogError(\"Too many CSV rows.\"); return;}\n        string output = EditorUtility.SaveFilePanel(\"Save Prefab graph CSV\", \"\", \"prefab_graph_\" + DateTime.Now.ToString(\"yyyyMMdd_HHmmss\") + \".csv\", \"csv\");\n        if (String.IsNullOrEmpty(output)) return;\n        try\n        {\n            byte[] data = new UTF8Encoding(true).GetPreamble().Concat(Encoding.UTF8.GetBytes(PrefabGraphCsv.Encode(rows))).ToArray();\n            using (var file = new FileStream(output, FileMode.CreateNew, FileAccess.Write, FileShare.None))\n                file.Write(data, 0, data.Length);\n            Debug.Log(\"CSV saved: \" + output + \"; nodes=\" + nodes.Count + \"; edges=\" + edges.Count + \"; failed=\" + errors);\n        }\n        catch (Exception error) {Debug.LogError(\"CSV save failed; check for an incomplete file: \" + output + \"\\n\" + error);}\n    }\n    private static Node Register(string path, HashSet&lt;string&gt; scope, Dictionary&lt;string,Node&gt; nodes)\n    {\n        if (!path.StartsWith(\"Assets\/\", StringComparison.Ordinal))\n            throw new InvalidDataException(\"This schema handles Assets paths only: \" + path);\n        string guid = AssetDatabase.AssetPathToGUID(path);\n        if (String.IsNullOrEmpty(guid)) throw new InvalidDataException(\"Asset GUID not found: \" + path);\n        Node existing;\n        if (nodes.TryGetValue(guid, out existing)) return existing;\n        var asset = AssetDatabase.LoadAssetAtPath&lt;GameObject&gt;(path);\n        if (asset == null) throw new InvalidDataException(\"Referenced asset could not be loaded: \" + path);\n        var type = PrefabUtility.GetPrefabAssetType(asset);\n        if (type != PrefabAssetType.Regular &amp;&amp; type != PrefabAssetType.Variant &amp;&amp; type != PrefabAssetType.Model)\n            throw new InvalidDataException(\"Unsupported Prefab type: \" + path);\n        var node = new Node {Guid=guid, Path=path, Name=System.IO.Path.GetFileNameWithoutExtension(path),\n            Type=type.ToString(), InScope=scope.Contains(path), Status=scope.Contains(path) ? \"Error\" : \"ReferencedOnly\"};\n        nodes.Add(guid,node); return node;\n    }\n}\n\npublic static class PrefabGraphCsv\n{\n    public static readonly string[] Header = {\"Record\",\"GUID\",\"Path\",\"Name\",\"AssetType\",\"TargetGUID\",\"Relation\",\"InScope\",\"ScanStatus\"};\n    public static string Encode(IEnumerable&lt;string[]&gt; rows)\n    {\n        var output = new StringBuilder();\n        foreach (string[] row in rows)\n        {\n            if (row == null || row.Length != 9) throw new ArgumentException(\"Nine columns are required.\");\n            for (int i = 0; i &lt; row.Length; i++)\n            {\n                if (i != 0) output.Append(',');\n                output.Append('\"').Append((row[i] ?? \"\").Replace(\"\\\"\", \"\\\"\\\"\")).Append('\"');\n            }\n            output.Append(\"\\r\\n\");\n        }\n        return output.ToString();\n    }\n}\n<\/code><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u5185\u5bb9\u306f<a href=\"https:\/\/docs.unity3d.com\/6000.3\/Documentation\/ScriptReference\/PrefabUtility.LoadPrefabContents.html\">LoadPrefabContents<\/a>\u3067\u5206\u96e2\u3055\u308c\u305fScene\u3078\u8aad\u307f\u3001finally\u3067UnloadPrefabContents\u3092\u547c\u3073\u307e\u3059\u3002Prefab\u3092\u4fdd\u5b58\u3059\u308bAPI\u306f\u4f7f\u3044\u307e\u305b\u3093\u304c\u3001Edit Mode\u306e\u72ec\u81ea\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u526f\u4f5c\u7528\u307e\u3067\u7121\u5909\u66f4\u3068\u306f\u4fdd\u8a3c\u3057\u307e\u305b\u3093\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u5168\u968e\u5c64\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5883\u754c\u306f<a href=\"https:\/\/docs.unity3d.com\/6000.3\/Documentation\/ScriptReference\/PrefabUtility.IsAnyPrefabInstanceRoot.html\">IsAnyPrefabInstanceRoot<\/a>\u3067\u78ba\u8a8d\u3057\u3001\u30ed\u30fc\u30c9\u3057\u305f\u30eb\u30fc\u30c8\u3092\u9664\u5916\u3057\u307e\u3059\u3002\u53c2\u7167\u30d1\u30b9\u306f<a href=\"https:\/\/docs.unity3d.com\/6000.3\/Documentation\/ScriptReference\/PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot.html\">GetPrefabAssetPathOfNearestInstanceRoot<\/a>\u3001Variant\u306e\u76f4\u8fd1\u306e\u5bfe\u5fdc\u5143\u306f<a href=\"https:\/\/docs.unity3d.com\/6000.3\/Documentation\/ScriptReference\/PrefabUtility.GetCorrespondingObjectFromSource.html\">GetCorrespondingObjectFromSource<\/a>\u3092\u53c2\u7167\u3057\u307e\u3059\u3002GetCorrespondingObjectFromOriginalSource\u3067\u6700\u9060\u306e\u6d3e\u751f\u5143\u3078\u7f6e\u304d\u63db\u3048\u308b\u51e6\u7406\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">2. 9\u5217CSV\u306e\u8aad\u307f\u65b9<\/h2>\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u9805\u76ee\u30fb\u75c7\u72b6<\/th><th>\u6761\u4ef6\u30fb\u78ba\u8a8d\u5148<\/th><\/tr><\/thead><tbody><tr><td>Record<\/td><td>Node\uff1dPrefab\u305d\u306e\u3082\u306e\u3001Edge\uff1d\u95a2\u4fc2\u3002\u65e74\u5217CSV\u306f\u4e92\u63db\u3067\u306f\u306a\u3044\u3002<\/td><\/tr><tr><td>GUID\u30fbPath\u30fbName\u30fbAssetType<\/td><td>Node\u884c\u306e\u8b58\u5225\u3068\u8868\u793a\u5c5e\u6027\u3002AssetType\u306fRegular\u30fbVariant\u30fbModel\u3002Edge\u884c\u306eGUID\u306f\u4f9d\u5b58\u3059\u308b\u5074\u3002<\/td><\/tr><tr><td>TargetGUID\u30fbRelation<\/td><td>Edge\u884c\u306e\u53c2\u7167\u5148GUID\u3068Nested\/Variant\u3002Node\u884c\u3067\u306f\u7a7a\u6b04\u3002<\/td><\/tr><tr><td>InScope\u30fbScanStatus<\/td><td>Node\u884c\u306etrue\/false\u3068Ready\/Error\/ReferencedOnly\u3002Ready\uff1d\u8d70\u67fb\u3057\u305f\u3001Error\uff1d\u5931\u6557\u3001ReferencedOnly\uff1d\u53c2\u7167\u5148\u3068\u3057\u3066\u767b\u9332\u3057\u305f\u3060\u3051\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">\u5168\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4e8c\u91cd\u5f15\u7528\u7b26\u3067\u56f2\u307f\u3001\u30d5\u30a3\u30fc\u30eb\u30c9\u5185\u306e\u5f15\u7528\u7b26\u30922\u3064\u3078\u5897\u3084\u3059CSV\u3067\u3059\u3002\u6539\u884c\u306fCRLF\u3001UTF-8 BOM\u4ed8\u304d\u3002\u540c\u540d\u30fb\u65e5\u672c\u8a9e\u30fb\u30ab\u30f3\u30de\u30fb\u5f15\u7528\u7b26\u30fb\u6539\u884c\u306e\u540d\u524d\u3082\u3001\u5217\u3092\u5206\u3051\u305a\u306b\u4fdd\u6301\u3057\u307e\u3059\u3002\u8868\u8a08\u7b97\u3078\u306e\u53d6\u8fbc\u6642\u306b\u306f\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u4fdd\u6301\u3057\u3001\u6587\u5b57\u5217\u306e\u81ea\u52d5\u5909\u63db\u3092\u5207\u308a\u307e\u3059\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306e2\u753b\u50cf\u306f\u65e7CSV\u30fb\u65e7\u5c0e\u5165\u306e\u8cc7\u6599\u3067\u3059\u3002\u65b0\u7248\u306e\u5217\u306f\u4e0a\u306e9\u5217\u3067\u3001\u65e74\u5217\u3092\u305d\u306e\u307e\u307eSheets\u3078\u6e21\u3059\u3068\u30d8\u30c3\u30c0\u30fc\u30a8\u30e9\u30fc\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"430\" height=\"324\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h47_11.png\" alt=\"\u66f8\u304d\u51fa\u3057\u305fPrefab\u30c7\u30fc\u30bf\u3092Google\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u30c6\u30fc\u30d6\u30eb\u60c5\u5831\u306e\u4f8b\u3002\" class=\"wp-image-170\" srcset=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h47_11.png 430w, https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h47_11-300x226.png 300w\" sizes=\"auto, (max-width: 430px) 100vw, 430px\" \/><\/figure>\n\n\n<figure class=\"wp-block-image size-full is-style-border\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"380\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h40_09.png\" alt=\"Prefab\u53c2\u7167\u69cb\u9020\u30d3\u30e5\u30fc\u30a2\u306e\u5b9f\u88c5\u306b\u4f7f\u7528\u3057\u305f\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30b3\u30fc\u30c9\u3002\" class=\"wp-image-168\" srcset=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h40_09.png 679w, https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/2025-06-29_18h40_09-300x168.png 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure>\n\n<div class=\"swell-block-postLink\">\t\t\t<div class=\"p-blogCard -internal\" data-type=\"type1\" data-onclick=\"clickLink\">\n\t\t\t\t<div class=\"p-blogCard__inner\">\n\t\t\t\t\t<span class=\"p-blogCard__caption\">\u3042\u308f\u305b\u3066\u8aad\u307f\u305f\u3044<\/span>\n\t\t\t\t\t<div class=\"p-blogCard__thumb c-postThumb\"><figure class=\"c-postThumb__figure\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2026\/09\/unity-matome-3-300x169.jpg\" alt=\"\" class=\"c-postThumb__img u-obf-cover\" width=\"320\" height=\"180\"><\/figure><\/div>\t\t\t\t\t<div class=\"p-blogCard__body\">\n\t\t\t\t\t\t<a class=\"p-blogCard__title\" href=\"https:\/\/cg-method.com\/unity\/unity-matome\/\">Unity\u306e\u4f7f\u3044\u65b9\u30ac\u30a4\u30c9\uff5c\u74b0\u5883\u69cb\u7bc9\u30fbUI\u30fb2D\u30fb\u30a2\u30bb\u30c3\u30c8\u6d3b\u7528<\/a>\n\t\t\t\t\t\t<span class=\"p-blogCard__excerpt\">Unity\u306e\u74b0\u5883\u69cb\u7bc9\u3001UI\u5236\u4f5c\u30012D\u7d20\u6750\u306e\u7d44\u307f\u8fbc\u307f\u3001\u30a2\u30bb\u30c3\u30c8\u5c0e\u5165\u3001Prefab\u7ba1\u7406\u3092\u76ee\u7684\u5225\u306b\u6848\u5185\u3002\u66f8\u7c4d\u30fb\u30aa\u30f3\u30e9\u30a4\u30f3\u6559\u6750\u306e\u9078\u3073\u65b9\u3068\u3001\u5236\u4f5c\u4e2d\u306b\u3064\u307e\u305a\u3044\u305f\u3068\u304d\u306e\u89e3\u8aac\u8a18\u4e8b\u3092\u63a2\u305b\u307e\u3059\u3002<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n<h2 class=\"wp-block-heading\">3. Google Sheets\u3068Apps Script\u3092\u6e96\u5099\u3059\u308b<\/h2>\n\n\n<ol class=\"wp-block-list\"><li>\u6700\u521d\u306f\u5b9f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eCSV\u3067\u306f\u306a\u304f\u3001\u67b6\u7a7a\u306e\u540d\u524d\u30fb\u30d1\u30b9\u3092\u6301\u3064\u5c11\u6570\u306e\u30c7\u30fc\u30bf\u3067\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3053\u306e\u65b9\u5f0f\u306fCSV\u3092Google Sheets\u3078\u7f6e\u304f\u305f\u3081\u3001\u4f7f\u3046\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u60c5\u5831\u3092\u305d\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u4fdd\u5b58\u3067\u304d\u308b\u6761\u4ef6\u3082\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li><li>\u81ea\u5206\u304c\u7ba1\u7406\u3059\u308b\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306bPrefabGraph\u30b7\u30fc\u30c8\u3092\u7528\u610f\u3057\u3001CSV\u3092A1\u304b\u30899\u5217\u3067\u53d6\u308a\u8fbc\u307f\u307e\u3059\u3002\u30a4\u30f3\u30dd\u30fc\u30c8\u6642\u306e\u300c\u30c6\u30ad\u30b9\u30c8\u3092\u6570\u5024\u3001\u65e5\u4ed8\u3001\u6570\u5f0f\u306b\u5909\u63db\u3059\u308b\u300d\u3092\u7121\u52b9\u306b\u3057\u3001GUID\u3084\u540d\u524d\u3092\u6587\u5b57\u5217\u3067\u4fdd\u6301\u3057\u307e\u3059\u3002\u8ffd\u52a0\u306e\u5185\u5bb9\u5217\u3092\u540c\u3058\u30b7\u30fc\u30c8\u3078\u4f5c\u3089\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/li><li>Apps Script\u306bCode.gs\u3068HTML\u30d5\u30a1\u30a4\u30ebindex\u30fbjs\u30fbcss\u3092\u4f5c\u6210\u3057\u3001\u4ee5\u4e0b\u306e4\u5168\u6587\u3092\u305d\u308c\u305e\u308c\u4fdd\u5b58\u3057\u307e\u3059\u3002HTML\u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30fc\u30c9\u8868\u793a\u306findex.html\u30fbjs.html\u30fbcss.html\u3067\u3059\u304c\u3001include\u306b\u306f\u62e1\u5f35\u5b50\u3092\u4ed8\u3051\u307e\u305b\u3093\u3002<\/li><li>Code.gs\u306espreadsheetId\u3092\u5f53\u8a72\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306eID\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002sheetName\u3082\u5b9f\u969b\u306e\u30bf\u30d6\u540d\u306b\u5408\u308f\u305b\u307e\u3059\u3002Web\u30a2\u30d7\u30ea\u3067\u300c\u73fe\u5728\u306e\u30b7\u30fc\u30c8\u300d\u3092\u63a8\u6e2c\u305b\u305aopenById\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/li><li>\u521d\u56de\u306f\u81ea\u5206\u3060\u3051\u304c\u5229\u7528\u3067\u304d\u308b\u30c6\u30b9\u30c8\u7528\u30c7\u30d7\u30ed\u30a4\u3067\u3001\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc\u304c\u305d\u306eSheet\u3092\u8aad\u3081\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u5b9f\u884c\u8005\u30fb\u30a2\u30af\u30bb\u30b9\u5bfe\u8c61\u3068\u30a2\u30ab\u30a6\u30f3\u30c8\/\u7d44\u7e54\u306e\u5236\u7d04\u306f<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/web\">Google\u516c\u5f0f\u306eWeb\u30a2\u30d7\u30ea\u8cc7\u6599<\/a>\u3067\u78ba\u8a8d\u3057\u307e\u3059\u3002\u533f\u540d\u516c\u958b\u3092\u524d\u63d0\u306b\u3059\u308b\u624b\u9806\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/li><li>\u81ea\u5206\u306eWeb\u30a2\u30d7\u30eaURL\u3092\u958b\u304d\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u3067index.html\u3060\u3051\u3092\u958b\u304f\u3068google.script.run\u304c\u306a\u3044\u305f\u3081\u5931\u6557\u3057\u307e\u3059\u3002\u30b3\u30fc\u30c9\u3092\u5909\u3048\u305f\u3068\u304d\u306f\u3001\u30c6\u30b9\u30c8\/\u30c7\u30d7\u30ed\u30a4\u306e\u7248\u3068\u8868\u793a\u3057\u3066\u3044\u308bURL\u304c\u4e00\u81f4\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/li><\/ol>\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u4f8b\u306f<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/bound\">\u30d0\u30a4\u30f3\u30c9\u3055\u308c\u305f\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5236\u7d04<\/a>\u3068<a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\/spreadsheet-app\">SpreadsheetApp\u306e\u4ed5\u69d8<\/a>\u3092\u53c2\u7167\u3057\u3001getActive\u306e\u7d50\u679c\u3092Web\u30a2\u30d7\u30ea\u306b\u3042\u308b\u3068\u4eee\u5b9a\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u8a18\u4e8b\u306e\u6539\u7a3f\u4f5c\u696d\u3067\u306fGoogle\u3078\u306eCSV\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3084\u30b5\u30fc\u30d3\u30b9\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u5b9f\u884c\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">4. Code.gs\uff1a\u56fa\u5b9aSheet\u3068\u884c\u306e\u691c\u8a3c<\/h2>\n\n\n<p class=\"wp-block-paragraph\">\u30d8\u30c3\u30c0\u30fc\u30fbGUID\u30fb9\u5217\u30fbAssetType\u30fbScanStatus\u30fb\u8fba\u306e\u4e21\u7aef\u3068\u578b\u3092\u691c\u8a3c\u3057\u307e\u3059\u3002\u4e0d\u660e\u306a\u884c\u3092\u9ed9\u3063\u3066\u7121\u8996\u3057\u307e\u305b\u3093\u3002\u53e4\u30444\u5217\u3084\u91cd\u8907GUID\u3001Variant\u4ee5\u5916\u304b\u3089\u306e\u7d99\u627f\u7dda\u3001\u5931\u6557\u3057\u305f\u8d70\u67fb\u5143\u306e\u8fba\u3092\u62d2\u5426\u3057\u307e\u3059\u3002<\/p>\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-javascript\" data-lang=\"JavaScript\"><code>\/\/ Set a spreadsheet you control; do not broaden Web app access for project asset data.\nconst PREFAB_VIEWER_CONFIG = Object.freeze({\n  spreadsheetId: 'REPLACE_WITH_SPREADSHEET_ID',\n  sheetName: 'PrefabGraph',\n  maxRows: 10000,\n  maxNodes: 2000,\n  maxEdges: 5000\n});\n\nfunction doGet() {\n  return HtmlService.createTemplateFromFile('index').evaluate().setTitle('Prefab reference viewer');\n}\n\nfunction include(name) {\n  if (!['js', 'css'].includes(name)) throw new Error('Unknown template.');\n  return HtmlService.createHtmlOutputFromFile(name).getContent();\n}\n\nfunction getPrefabGraphData() {\n  const cfg = PREFAB_VIEWER_CONFIG;\n  if (cfg.spreadsheetId === 'REPLACE_WITH_SPREADSHEET_ID')\n    throw new Error('Set spreadsheetId in Code.gs before running.');\n  const sheet = SpreadsheetApp.openById(cfg.spreadsheetId).getSheetByName(cfg.sheetName);\n  if (!sheet) throw new Error('Configured sheet was not found.');\n  const lastRow = sheet.getLastRow();\n  const lastColumn = sheet.getLastColumn();\n  if (!lastRow) throw new Error('Import the CSV header and rows first.');\n  if (lastRow &gt; cfg.maxRows || lastColumn !== 9)\n    throw new Error('Expected exactly 9 columns, at most ' + cfg.maxRows + ' rows.');\n  const rows = sheet.getRange(1, 1, lastRow, 9).getDisplayValues();\n  return parsePrefabRows(rows, cfg);\n}\n\n\/\/ Pure conversion. These exact functions are independently tested with synthetic rows.\nfunction parsePrefabRows(rows, limits) {\n  const header = ['Record','GUID','Path','Name','AssetType','TargetGUID','Relation','InScope','ScanStatus'];\n  const cfg = limits || {maxRows:10000, maxNodes:2000, maxEdges:5000};\n  if (!Array.isArray(rows) || rows.length &lt; 2 || rows.length &gt; cfg.maxRows)\n    throw new Error('No graph rows or too many rows.');\n  if (!Array.isArray(rows[0]) || rows[0].length !== 9 ||\n      rows[0].some((value, i) =&gt; String(value) !== header[i]))\n    throw new Error('CSV header does not match the 9-column schema.');\n  const nodes = new Map();\n  const pending = [];\n  const guidPattern = \/^[0-9a-f]{32}$\/;\n  for (let n = 1; n &lt; rows.length; n++) {\n    const row = rows[n];\n    if (!Array.isArray(row) || row.length !== 9) throw new Error('Wrong column count at row ' + (n + 1));\n    const r = row.map(value =&gt; String(value == null ? '' : value));\n    if (r.every(value =&gt; value === '')) continue;\n    if (!guidPattern.test(r[1])) throw new Error('Invalid GUID at row ' + (n + 1));\n    if (r[0] === 'Node') {\n      if (nodes.has(r[1])) throw new Error('Duplicate node GUID at row ' + (n + 1));\n      if (!r[2].startsWith('Assets\/') || !r[3] || !['Regular','Variant','Model'].includes(r[4]) || r[5] || r[6])\n        throw new Error('Invalid node fields at row ' + (n + 1));\n      if (!['true','false'].includes(r[7].toLowerCase())) throw new Error('Invalid InScope at row ' + (n + 1));\n      const inScope = r[7].toLowerCase() === 'true';\n      if (inScope ? !['Ready','Error'].includes(r[8]) : r[8] !== 'ReferencedOnly')\n        throw new Error('Invalid scan status at row ' + (n + 1));\n      if (inScope &amp;&amp; r[4] === 'Model') throw new Error('Model nodes must be referenced only.');\n      nodes.set(r[1], {id:'n' + r[1], guid:r[1], label:r[3], path:r[2],\n        folder:r[2].slice(0, r[2].lastIndexOf('\/')), assetType:r[4], inScope, scanStatus:r[8]});\n      if (nodes.size &gt; cfg.maxNodes) throw new Error('Too many nodes.');\n    } else if (r[0] === 'Edge') {\n      if (!guidPattern.test(r[5]) || !['Nested','Variant'].includes(r[6]) ||\n          [r[2],r[3],r[4],r[7],r[8]].some(Boolean) || r[1] === r[5])\n        throw new Error('Invalid edge fields at row ' + (n + 1));\n      pending.push({sourceGUID:r[1], targetGUID:r[5], relation:r[6]});\n    } else throw new Error('Unknown record type at row ' + (n + 1));\n  }\n  if (!nodes.size) throw new Error('No node records.');\n  const edges = new Map();\n  const baseByVariant = new Map();\n  for (const edge of pending) {\n    const source = nodes.get(edge.sourceGUID);\n    const target = nodes.get(edge.targetGUID);\n    if (!source || !target) throw new Error('Edge endpoint node is missing.');\n    if (!source.inScope || source.scanStatus !== 'Ready')\n      throw new Error('Only a successfully scanned node can supply edges.');\n    if (edge.relation === 'Variant') {\n      if (source.assetType !== 'Variant') throw new Error('Variant edge source must be a Variant asset.');\n      const previous = baseByVariant.get(source.guid);\n      if (previous &amp;&amp; previous !== target.guid) throw new Error('A Variant has more than one immediate base.');\n      baseByVariant.set(source.guid, target.guid);\n    }\n    const id = 'e' + edge.relation + '_' + source.guid + '_' + target.guid;\n    edges.set(id, {id, source:source.id, target:target.id, relation:edge.relation});\n    if (edges.size &gt; cfg.maxEdges) throw new Error('Too many edges.');\n  }\n  return {nodes:[...nodes.values()], edges:[...edges.values()], summary:{\n    nodeCount:nodes.size, edgeCount:edges.size,\n    failedNodes:[...nodes.values()].filter(node =&gt; node.scanStatus === 'Error').length,\n    referencedOnlyNodes:[...nodes.values()].filter(node =&gt; !node.inScope).length\n  }};\n}\n<\/code><\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">5. index.html\uff1a\u753b\u9762\u3068\u8aad\u307f\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Cytoscape\u306f3.23.0\u3078\u56fa\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002CDN\u304b\u3089\u8aad\u307f\u8fbc\u3080\u69cb\u6210\u306a\u306e\u3067\u3001\u901a\u4fe1\u5236\u9650\u304c\u3042\u308b\u5834\u5408\u306f\u63a5\u7d9a\u6761\u4ef6\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002GAS\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u8a18\u6cd5\u3092\u6b8b\u3057\u305f\u307e\u307e\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;!doctype html&gt;\n&lt;html lang=\"ja\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"utf-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n  &lt;base target=\"_top\"&gt;\n  &lt;script src=\"https:\/\/unpkg.com\/cytoscape@3.23.0\/dist\/cytoscape.min.js\"&gt;&lt;\/script&gt;\n  &lt;?!= include('css'); ?&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;main&gt;\n    &lt;h1&gt;Prefab\u53c2\u7167\u30b0\u30e9\u30d5&lt;\/h1&gt;\n    &lt;p&gt;\u77e2\u5370\u306f\u4f9d\u5b58\u3059\u308b\u5074\u304b\u3089\u53c2\u7167\u5148\u3078\u3002Nested\u306f\u5168\u968e\u5c64\u306b\u542b\u307e\u308c\u308bPrefab\u3001Variant\u306f\u76f4\u8fd1\u306e\u6d3e\u751f\u5143\u3067\u3059\u3002&lt;\/p&gt;\n    &lt;div class=\"controls\"&gt;\n      &lt;label&gt;\u8d77\u70b9Prefab &lt;select id=\"prefabSelect\" disabled&gt;&lt;option value=\"\"&gt;\u5168\u4f53&lt;\/option&gt;&lt;\/select&gt;&lt;\/label&gt;\n      &lt;label&gt;\u305f\u3069\u308b\u65b9\u5411 &lt;select id=\"direction\" disabled&gt;&lt;option value=\"dependencies\"&gt;\u53c2\u7167\u5148\u3092\u305f\u3069\u308b&lt;\/option&gt;&lt;option value=\"users\"&gt;\u3053\u306ePrefab\u3092\u4f7f\u3046\u5074\u3092\u305f\u3069\u308b&lt;\/option&gt;&lt;\/select&gt;&lt;\/label&gt;\n      &lt;label&gt;\u95a2\u4fc2 &lt;select id=\"relation\" disabled&gt;&lt;option value=\"all\"&gt;\u4e21\u65b9&lt;\/option&gt;&lt;option value=\"Nested\"&gt;Nested\u306e\u307f&lt;\/option&gt;&lt;option value=\"Variant\"&gt;Variant\u306e\u307f&lt;\/option&gt;&lt;\/select&gt;&lt;\/label&gt;\n      &lt;button id=\"reload\" type=\"button\"&gt;\u518d\u8aad\u8fbc&lt;\/button&gt;\n    &lt;\/div&gt;\n    &lt;p id=\"status\" role=\"status\" aria-live=\"polite\"&gt;\u8aad\u307f\u8fbc\u307f\u524d\u3067\u3059\u3002&lt;\/p&gt;\n    &lt;p class=\"legend\"&gt;\u30ce\u30fc\u30c9\uff1a\u901a\u5e38\uff1d\u7dd1\u3001Variant\uff1d\u7d2b\u3001Model\uff1d\u7070\u8272\u3001\u8d70\u67fb\u5931\u6557\uff1d\u8d64\u3002\u7834\u7dda\u306e\u67a0\uff1d\u53c2\u7167\u5148\u306e\u307f\u3002\u77e2\u5370\uff1aNested\uff1d\u7dd1\u5b9f\u7dda\u3001Variant\uff1d\u9752\u7834\u7dda\u3002&lt;\/p&gt;\n    &lt;div id=\"cy\" aria-label=\"Prefab\u53c2\u7167\u30b0\u30e9\u30d5\"&gt;&lt;\/div&gt;\n    &lt;p id=\"details\"&gt;\u30ce\u30fc\u30c9\u3092\u9078\u3076\u3068\u4fdd\u5b58\u30d1\u30b9\u3068GUID\u3092\u8868\u793a\u3057\u307e\u3059\u3002&lt;\/p&gt;\n    &lt;noscript&gt;JavaScript\u3092\u6709\u52b9\u306b\u3057\u3066\u518d\u8aad\u8fbc\u3057\u3066\u304f\u3060\u3055\u3044\u3002&lt;\/noscript&gt;\n  &lt;\/main&gt;\n  &lt;?!= include('js'); ?&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">6. js.html\uff1a\u65b9\u5411\u30fb\u95a2\u4fc2\u30fb\u5931\u6557\u6642\u306e\u8868\u793a<\/h2>\n\n\n<p class=\"wp-block-paragraph\">\u53c2\u7167\u5148\u306fsource\u2192target\u3001\u4f7f\u3046\u5074\u306ftarget\u2192source\u3092\u8d70\u67fb\u3057\u307e\u3059\u3002visited\u96c6\u5408\u3067\u5faa\u74b0\u3057\u3066\u3082\u505c\u6b62\u3057\u307e\u3059\u3002\u95a2\u4fc2\u5225\u306e\u8fbaID\u3092\u6301\u305f\u305b\u3001Nested\u3068Variant\u3092\u3064\u3076\u3057\u307e\u305b\u3093\u3002Google\u306e<a href=\"https:\/\/developers.google.com\/apps-script\/guides\/html\/reference\/run\">google.script.run\u516c\u5f0f\u4ed5\u69d8<\/a>\u306b\u5f93\u3044\u6210\u529f\u3068\u5931\u6557\u306e\u30cf\u30f3\u30c9\u30e9\u30fc\u3092\u7528\u610f\u3057\u307e\u3059\u3002<\/p>\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;script&gt;\n\/\/ Dependency direction is source -&gt; target: containing asset -&gt; nested asset,\n\/\/ or variant -&gt; immediate base. A visited set makes cycles terminate.\nfunction walkPrefabGraph(graph, start, direction, relation) {\n  if (!['dependencies','users'].includes(direction) || !['all','Nested','Variant'].includes(relation))\n    throw new Error('Unknown graph filter.');\n  if (!graph.nodes.some(node =&gt; node.id === start)) throw new Error('Unknown starting node.');\n  const ids = new Set([start]);\n  const edgeIds = new Set();\n  const queue = [start];\n  let offset = 0;\n  while (offset &lt; queue.length) {\n    const current = queue[offset++];\n    for (const edge of graph.edges) {\n      if (relation !== 'all' &amp;&amp; edge.relation !== relation) continue;\n      const from = direction === 'dependencies' ? edge.source : edge.target;\n      const to = direction === 'dependencies' ? edge.target : edge.source;\n      if (from !== current) continue;\n      edgeIds.add(edge.id);\n      if (!ids.has(to)) {ids.add(to); queue.push(to);}\n    }\n  }\n  return {nodeIds:[...ids], edgeIds:[...edgeIds]};\n}\n\nlet prefabFullData = null;\nlet prefabCy = null;\nconst prefabStatus = document.getElementById('status');\nconst prefabDetails = document.getElementById('details');\nconst prefabControls = ['prefabSelect','direction','relation'].map(id =&gt; document.getElementById(id));\nconst prefabReload = document.getElementById('reload');\nfunction prefabSetBusy(busy) {\n  prefabControls.forEach(control =&gt; {control.disabled = busy || !prefabFullData;});\n  prefabReload.disabled = busy;\n}\nfunction prefabFail(error) {\n  prefabFullData = null;\n  if (prefabCy) {prefabCy.destroy(); prefabCy = null;}\n  prefabDetails.textContent = '\u30ce\u30fc\u30c9\u306f\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002';\n  prefabStatus.textContent = '\u8aad\u8fbc\u5931\u6557\uff1a' + (error &amp;&amp; error.message ? error.message : String(error));\n  prefabSetBusy(false);\n}\nfunction prefabLoad() {\n  prefabSetBusy(true);\n  prefabStatus.textContent = '\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u2026';\n  if (typeof cytoscape !== 'function') {prefabFail(new Error('Cytoscape\u306eCDN\u8aad\u8fbc\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u63a5\u7d9a\u3092\u78ba\u8a8d\u3057\u30da\u30fc\u30b8\u5168\u4f53\u3092\u518d\u8aad\u8fbc\u3057\u3066\u304f\u3060\u3055\u3044\u3002')); return;}\n  if (typeof google === 'undefined' || !google.script || !google.script.run)\n  {prefabFail(new Error('Apps Script\u306eWeb\u30a2\u30d7\u30ea\u3067\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002')); return;}\n  google.script.run.withSuccessHandler(prefabInit).withFailureHandler(prefabFail).getPrefabGraphData();\n}\nfunction prefabInit(data) {\n  try {\n    if (!data || !Array.isArray(data.nodes) || !Array.isArray(data.edges) || !data.nodes.length)\n      throw new Error('\u30ce\u30fc\u30c9\u306e\u306a\u3044\u30c7\u30fc\u30bf\u3067\u3059\u3002CSV\u306eNode\u884c\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n    prefabFullData = data;\n    const select = prefabControls[0];\n    select.replaceChildren();\n    const all = document.createElement('option'); all.value = ''; all.textContent = '\u5168\u4f53'; select.appendChild(all);\n    [...data.nodes].sort((a,b) =&gt; a.path.localeCompare(b.path)).forEach(node =&gt; {\n      const option = document.createElement('option'); option.value = node.id;\n      option.textContent = node.label + ' \u2014 ' + node.path;\n      select.appendChild(option);\n    });\n    prefabSetBusy(false);\n    prefabDraw();\n  } catch (error) {prefabFail(error);}\n}\nfunction prefabDraw() {\n  if (!prefabFullData) return;\n  try {\n    const start = prefabControls[0].value;\n    const direction = prefabControls[1].value;\n    const relation = prefabControls[2].value;\n    const selected = start ? walkPrefabGraph(prefabFullData, start, direction, relation) : null;\n    const nodeIds = selected ? new Set(selected.nodeIds) : new Set(prefabFullData.nodes.map(node =&gt; node.id));\n    const edgeIds = selected ? new Set(selected.edgeIds) : null;\n    const nodes = prefabFullData.nodes.filter(node =&gt; nodeIds.has(node.id));\n    const edges = prefabFullData.edges.filter(edge =&gt; (relation === 'all' || edge.relation === relation) &amp;&amp;\n      nodeIds.has(edge.source) &amp;&amp; nodeIds.has(edge.target) &amp;&amp; (!edgeIds || edgeIds.has(edge.id)));\n    if (prefabCy) prefabCy.destroy();\n    prefabCy = cytoscape({container:document.getElementById('cy'),\n      elements:[...nodes.map(node =&gt; ({data:node, classes:(!node.inScope ? 'external ' : '') + (node.scanStatus === 'Error' ? 'failed' : '')})),\n                ...edges.map(edge =&gt; ({data:edge}))],\n      style:[\n        {selector:'node', style:{'background-color':'#247d63','label':'data(label)','font-size':12,'text-wrap':'wrap','text-max-width':110,'text-valign':'bottom','text-margin-y':8,'border-width':2,'border-color':'#164a3b'}},\n        {selector:'node[assetType = \"Variant\"]', style:{'background-color':'#8050aa','border-color':'#51336b'}},\n        {selector:'node[assetType = \"Model\"]', style:{'background-color':'#747c86','border-color':'#414851'}},\n        {selector:'node.external', style:{'border-style':'dashed','border-width':3}},\n        {selector:'node.failed', style:{'background-color':'#b73535','border-color':'#781c1c'}},\n        {selector:'edge', style:{'width':2,'line-color':'#247d63','target-arrow-color':'#247d63','target-arrow-shape':'triangle','curve-style':'bezier'}},\n        {selector:'edge[relation = \"Variant\"]', style:{'line-color':'#245cb5','target-arrow-color':'#245cb5','line-style':'dashed'}},\n        {selector:':selected', style:{'overlay-color':'#e7a100','overlay-opacity':0.15}}\n      ],layout:{name:'grid',padding:40},minZoom:0.1,maxZoom:3});\n    prefabCy.on('tap','node',event =&gt; {\n      const node=event.target.data();\n      prefabDetails.textContent = node.label + ' | ' + node.path + ' | GUID: ' + node.guid +\n        ' | ' + node.assetType + ' | ' + node.scanStatus;\n    });\n    const summary=prefabFullData.summary;\n    prefabStatus.textContent = '\u8868\u793a ' + nodes.length + '\u30ce\u30fc\u30c9 \/ ' + edges.length + '\u8fba\u3002\u5168\u4f53\u306e\u8d70\u67fb\u5931\u6557 ' + summary.failedNodes +\n      '\u4ef6\u3001\u53c2\u7167\u5148\u306e\u307f ' + summary.referencedOnlyNodes + '\u4ef6\u3002' + (summary.failedNodes ? '\u5931\u6557\u3057\u305fPrefab\u306e\u95a2\u4fc2\u306f\u672a\u53d6\u5f97\u3067\u3059\u3002Unity\u306eConsole\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002' : '');\n    prefabDetails.textContent = '\u30ce\u30fc\u30c9\u3092\u9078\u3076\u3068\u4fdd\u5b58\u30d1\u30b9\u3068GUID\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u77e2\u5370\u3092\u8aad\u3080\u3068\u304d\u306f\u95a2\u4fc2\u306e\u51e1\u4f8b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002';\n  } catch (error) {prefabFail(error);}\n}\nprefabControls.forEach(control =&gt; control.addEventListener('change',prefabDraw));\nprefabReload.addEventListener('click',prefabLoad);\nfunction prefabResize() {\n  if (prefabCy) {prefabCy.resize(); prefabCy.fit(undefined,40);}\n}\nif (typeof ResizeObserver === 'function')\n  new ResizeObserver(prefabResize).observe(document.getElementById('cy'));\nelse window.addEventListener('resize',prefabResize);\nprefabLoad();\n\n&lt;\/script&gt;\n<\/code><\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">7. css.html\uff1aPC\u30fb\u30b9\u30de\u30db\u306e\u8868\u793a<\/h2>\n\n\n<p class=\"wp-block-paragraph\">\u8868\u793a\u5e45\u304c\u5909\u308f\u3063\u305f\u3089\u30b0\u30e9\u30d5\u9818\u57df\u3078fit\u3057\u76f4\u3057\u307e\u3059\u3002\u30ce\u30fc\u30c9\u3092\u9078\u3076\u3068\u30d1\u30b9\u3068GUID\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u3001\u540c\u3058\u8868\u793a\u540d\u3060\u3051\u3067\u5224\u65ad\u3057\u307e\u305b\u3093\u3002\u5927\u304d\u3044\u30b0\u30e9\u30d5\u306e\u8aad\u307f\u3084\u3059\u3055\u306f\u4fdd\u8a3c\u305b\u305a\u3001\u8d77\u70b9\u3068\u95a2\u4fc2\u3067\u7d5e\u308a\u307e\u3059\u3002<\/p>\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;style&gt;\n* {box-sizing:border-box;}\nbody {margin:0; font-family:system-ui,sans-serif; color:#20303b; background:#f7f9fa;}\nmain {max-width:1200px; margin:auto; padding:20px;}\nh1 {font-size:1.4rem; margin:0 0 12px;}\np {line-height:1.7; overflow-wrap:anywhere;}\n.controls {display:flex; flex-wrap:wrap; gap:12px; align-items:end;}\nlabel {display:flex; flex-direction:column; gap:6px; min-width:0; max-width:100%;}\nselect,button {font:inherit; min-height:42px; max-width:100%; padding:6px; border:1px solid #8797a2; border-radius:4px; background:white;}\nselect {width:100%;}\nlabel:first-child {flex:1 1 360px;}\n#status {background:#e6edf2; padding:10px;}\n.legend {font-size:0.85rem;}\n#cy {height:60vh; min-height:320px; width:100%; border:1px solid #9eacb5; background:white;}\n#details {font-size:0.9rem; min-height:48px;}\n@media(max-width:600px) {main {padding:12px;} .controls label {width:100%;} #cy {height:55vh;}}\n&lt;\/style&gt;\n<\/code><\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u8868\u793a\u306e\u671f\u5f85\u5024\u3068\u5931\u6557\u306e\u5207\u308a\u5206\u3051<\/h2>\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u9805\u76ee\u30fb\u75c7\u72b6<\/th><th>\u6761\u4ef6\u30fb\u78ba\u8a8d\u5148<\/th><\/tr><\/thead><tbody><tr><td>\u540c\u540dPrefab2\u3064<\/td><td>\u5225GUID\u306e2\u30ce\u30fc\u30c9\u3068\u3057\u3066\u6b8b\u308b\u3002\u8d77\u70b9\u306e\u9078\u629e\u80a2\u306f\u540d\u524d\u3068\u4fdd\u5b58\u30d1\u30b9\u3001\u30ce\u30fc\u30c9\u3092\u9078\u3076\u3068GUID\u307e\u3067\u8868\u793a\u3002<\/td><\/tr><tr><td>\u8d77\u70b9\u30fb\u53c2\u7167\u5148\u3092\u305f\u3069\u308b<\/td><td>\u542b\u307e\u308c\u308bPrefab\u30fbVariant\u306e\u6d3e\u751f\u5143\u3078\u9032\u3080\u3002\u9006\u5411\u304d\u306e\u300c\u4f7f\u3046\u5074\u300d\u3067\u306f\u53c2\u7167\u3057\u3066\u3044\u308bPrefab\u3078\u623b\u308b\u3002\u9006\u5f15\u304d\u306e\u7bc4\u56f2\u306fCSV\u306b\u8a18\u9332\u3057\u305f\u8d70\u67fb\u5bfe\u8c61\u3060\u3051\u3002<\/td><\/tr><tr><td>\u5358\u72ec\u30fb\u5931\u6557\u30fb\u5bfe\u8c61\u5916<\/td><td>\u5358\u72ec\u306f1\u30ce\u30fc\u30c90\u8fba\u3002\u5931\u6557\u306f\u8d64\u3068\u4ef6\u6570\u3002\u53c2\u7167\u5148\u306e\u307f\u306f\u7834\u7dda\u67a0\u3067\u3001\u305d\u308c\u3088\u308a\u5148\u306e\u672a\u53d6\u5f97\u3092\u8fba0\u306b\u3088\u308b\u672a\u4f7f\u7528\u3068\u8aa4\u8a8d\u3057\u306a\u3044\u3002<\/td><\/tr><tr><td>\u8aad\u8fbc\u5931\u6557<\/td><td>Sheet ID\u30fb\u30bf\u30d6\u540d\u30fb\u6a29\u9650\u30fb9\u5217\u30d8\u30c3\u30c0\u30fc\u30fb\u5404\u884c\u30fb\u4e0a\u9650\u3092\u78ba\u8a8d\u3002Error\u8868\u793a\u3092\u898b\u3066\u3001\u53e4\u3044\u30b0\u30e9\u30d5\u3092\u6700\u65b0\u306e\u6210\u529f\u7d50\u679c\u3068\u3057\u3066\u4f7f\u308f\u306a\u3044\u3002<\/td><\/tr><tr><td>CDN\u5931\u6557\u30fb\u56f3\u304c\u306a\u3044<\/td><td>Cytoscape\u306e\u901a\u4fe1\u3068JavaScript\u3092\u78ba\u8a8d\u3002CDN\u5931\u6557\u306f\u30da\u30fc\u30b8\u5168\u4f53\u3092\u518d\u8aad\u8fbc\u3002Script\u5931\u6557\u306f\u518d\u8aad\u8fbc\u30dc\u30bf\u30f3\u3068\u8868\u793a\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u78ba\u8a8d\u3002<\/td><\/tr><tr><td>CSV\u306e\u578b\u3084\u5217\u304c\u5d29\u308c\u308b<\/td><td>\u65e74\u5217\u3068\u6df7\u305c\u306a\u3044\u3002GUID\/\u540d\u524d\u306e\u30c6\u30ad\u30b9\u30c8\u53d6\u8fbc\u3001\u7a7a\u767d\/\u5f15\u7528\/\u6539\u884c\u3068\u4f59\u5206\u306a\u5217\u3092\u78ba\u8a8d\u3002\u8868\u306e\u624b\u7de8\u96c6\u5f8c\u3082\u30d8\u30c3\u30c0\u30fc\u3092\u5909\u3048\u306a\u3044\u3002<\/td><\/tr><tr><td>\u95a2\u4fc2\u304c\u5c11\u306a\u3044\u30fb\u591a\u3044<\/td><td>\u5bfe\u8c61\u30d5\u30a9\u30eb\u30c0\u30fc\u3001\u8d70\u67fb\u5931\u6557\u3001\u53c2\u7167\u5148\u306e\u307f\u3001\u5168\u968e\u5c64\u5305\u542b\u3068\u76f4\u8fd1\u306e\u5b50\u306e\u9055\u3044\u3092\u78ba\u8a8d\u3002Unity\u5074\u3067\u901a\u5e38\/Variant\/Group\u4e0b\u306e\u5165\u308c\u5b50\/\u975eActive\u3068\u7167\u5408\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<h2 class=\"wp-block-heading\">\u5b9f\u969b\u306b\u78ba\u8a8d\u3057\u305f\u7bc4\u56f2\u3068\u6b8b\u308b\u691c\u8a3c<\/h2>\n\n\n<p class=\"wp-block-paragraph\">CSV\u306e\u7d14\u7c8bC#\u30af\u30e9\u30b9\u305d\u306e\u3082\u306e\u3092.NET\u3067\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3001\u7279\u6b8a\u540d8\u884c\u306e9\u5217\u9006\u5909\u63db\u3068BOM\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002Code.gs\u306e\u540c\u4e00\u884c\u5909\u63db\u3068js.html\u306e\u540c\u4e00\u8d70\u67fb\u95a2\u6570\u306fNode.js\u306723\u30b1\u30fc\u30b9\u3092\u5b9f\u884c\u3057\u3001\u540c\u540dGUID\u30fb\u65b9\u5411\u30fb\u578b\u4ed8\u304d\u8fba\u30fb\u5358\u72ec\u30fb\u5faa\u74b0\u30fb\u30a8\u30e9\u30fc\u30fb\u4e0a\u9650\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002Unity API\u90e8\u5206\u3092\u4ee3\u66ff\u30af\u30e9\u30b9\u3067\u691c\u8a3c\u6e08\u307f\u306b\u3059\u308b\u8a66\u9a13\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u3055\u3089\u306b\u540c\u4e00HTML\/CSS\/\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b3\u30fc\u30c9\u3078\u67b6\u7a7a\u30c7\u30fc\u30bf\u306e\u8a66\u9a13\u7528\u53d7\u3051\u6e21\u3057\u3060\u3051\u3092\u63a5\u7d9a\u3057\u3001Chrome\u3067Cytoscape\u306e\u5b9f\u63cf\u753b\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002\u5168\u4f534\u30ce\u30fc\u30c93\u8fba\u3001\u53c2\u7167\u51483\u30ce\u30fc\u30c93\u8fba\u3001Variant2\u30ce\u30fc\u30c91\u8fba\u3001\u4f7f\u3046\u50743\u30ce\u30fc\u30c93\u8fba\u3001\u5358\u72ec1\u30ce\u30fc\u30c90\u8fba\u3001PC\u306e\u30ce\u30fc\u30c9\u8a73\u7d30\u3001\u30b9\u30de\u30db\u8868\u793a\u3001\u53d6\u5f97\u5931\u6557\u30fbCDN\u5931\u6557\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059\u3002\u5e45\u5909\u66f4\u3067\u4e00\u90e8\u30ce\u30fc\u30c9\u304c\u56f3\u306e\u5916\u3078\u51fa\u305f\u554f\u984c\u306ffit\u306e\u66f4\u65b0\u3092\u52a0\u3048\u3066\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u5b9fSheets\/GAS\u306e\u901a\u4fe1\u30fb\u8a8d\u8a3c\u30fb\u30c7\u30d7\u30ed\u30a4\u3084Unity\u62bd\u51fa\u306e\u691c\u8a3c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n<p class=\"wp-block-paragraph\">\u672a\u78ba\u8a8d\u306f\u5b9fEditor\u30b3\u30f3\u30d1\u30a4\u30eb\u3001\u901a\u5e38\/Variant\/\u5165\u308c\u5b50\/Override\/\u975eActive\/\u540c\u540d\/Model\u53c2\u7167\u5148\u306e\u62bd\u51fa\u3001\u53d6\u6d88\/\u4fdd\u5b58\u62d2\u5426\/Unload\u3068dirty\u72b6\u614b\u3001CSV\u306e\u5b9fSheets\u53d6\u8fbc\u3001Apps Script\u5b9f\u884c\u8005\u3068\u516c\u958b\u7bc4\u56f2\u3001\u5b9f\u30c7\u30d7\u30ed\u30a4\u306e\u8868\u793a\u3067\u3059\u3002\u8907\u88fd\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u67b6\u7a7aSheet\u306e\u5c0f\u3055\u3044\u4f8b\u3067\u3001\u671f\u5f85\u3059\u308bGUID\u3068\u95a2\u4fc2\u30fb\u4ef6\u6570\u3092\u7167\u5408\u3057\u3066\u304b\u3089\u4f7f\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n<h2 class=\"wp-block-heading\">\u95a2\u9023\u3059\u308bPrefab\u7ba1\u7406\u306e\u8a18\u4e8b<\/h2>\n\n\n<p class=\"wp-block-paragraph\">\u65e7\u914d\u5e03\u306f<a href=\"https:\/\/github.com\/MOTOKI-LLC\/cg-method-code\/tree\/main\/unity\/prefab-structure-viewer\">GitHub\u306e\u5143\u30d3\u30e5\u30fc\u30a2\u30fc<\/a>\u3067\u3059\u3002\u4eca\u56de\u306e9\u5217\u4ed5\u69d8\u306f\u65e7\u914d\u5e03\u3068\u4e92\u63db\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u672c\u6587\u306eC#\u30fbGAS\u30fbHTML3\u3064\u3092\u4e00\u7d44\u3067\u4f7f\u7528\u3057\u307e\u3059\u3002\u5916\u90e8\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u5909\u66f4\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n\n<!-- cgm-topic:start -->\n\n\n<p class=\"wp-block-paragraph\">\u30a8\u30c7\u30a3\u30bf\u62e1\u5f35\u306e\u8a18\u4e8b\u306f\u3001\u307b\u304b\u306b\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n<div class=\"swell-block-postLink\">\t\t\t<div class=\"p-blogCard -internal\" data-type=\"type1\" data-onclick=\"clickLink\">\n\t\t\t\t<div class=\"p-blogCard__inner\">\n\t\t\t\t\t<span class=\"p-blogCard__caption\">\u3042\u308f\u305b\u3066\u8aad\u307f\u305f\u3044<\/span>\n\t\t\t\t\t<div class=\"p-blogCard__thumb c-postThumb\"><figure class=\"c-postThumb__figure\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/06\/unity-prefab-csv-export-tool-300x169.jpg\" alt=\"\" class=\"c-postThumb__img u-obf-cover\" width=\"320\" height=\"180\"><\/figure><\/div>\t\t\t\t\t<div class=\"p-blogCard__body\">\n\t\t\t\t\t\t<a class=\"p-blogCard__title\" href=\"https:\/\/cg-method.com\/unity\/unity-prefab-csv-export-tool\/\">Unity\u306ePrefab\u5185\u90e8\u3092CSV\u51fa\u529b\u3059\u308bEditor\u62e1\u5f35\uff1a\u968e\u5c64\u30fb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u4e00\u89a7<\/a>\n\t\t\t\t\t\t<span class=\"p-blogCard__excerpt\">\u9078\u629e\u30d5\u30a9\u30eb\u30c0\u30fc\u4ee5\u4e0b\u306ePrefab\u304b\u3089GameObject\u968e\u5c64\u3068\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30925\u5217CSV\u3078\u51fa\u529b\u3002Editor\u3078\u306e\u5c0e\u5165\u3001CSV\u5f15\u7528\u3001\u540c\u540d\u306e\u8b58\u5225\u3001\u8aad\u8fbc\u5f8c\u306e\u89e3\u653e\u3001\u6210\u529f\u30fb\u5931\u6557\u306e\u78ba\u8a8d\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n<div class=\"swell-block-postLink\">\t\t\t<div class=\"p-blogCard -internal\" data-type=\"type1\" data-onclick=\"clickLink\">\n\t\t\t\t<div class=\"p-blogCard__inner\">\n\t\t\t\t\t<span class=\"p-blogCard__caption\">\u3042\u308f\u305b\u3066\u8aad\u307f\u305f\u3044<\/span>\n\t\t\t\t\t<div class=\"p-blogCard__thumb c-postThumb\"><figure class=\"c-postThumb__figure\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2025\/08\/unity-batchmode-desktop-output-300x169.jpg\" alt=\"\" class=\"c-postThumb__img u-obf-cover\" width=\"320\" height=\"180\"><\/figure><\/div>\t\t\t\t\t<div class=\"p-blogCard__body\">\n\t\t\t\t\t\t<a class=\"p-blogCard__title\" href=\"https:\/\/cg-method.com\/unity\/unity-batchmode-desktop-output\/\">Unity\u306e\u30d0\u30c3\u30c1\u30e2\u30fc\u30c9\u3067Editor\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\uff5c\u5f15\u6570\u30fb\u30ed\u30b0\u30fb\u7d42\u4e86\u30b3\u30fc\u30c9<\/a>\n\t\t\t\t\t\t<span class=\"p-blogCard__excerpt\">Windows\u306eUnity\u30d0\u30c3\u30c1\u30e2\u30fc\u30c9\u3067\u9759\u7684Editor\u30e1\u30bd\u30c3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u6700\u5c0f\u4f8b\u3002\u7d76\u5bfe\u30d1\u30b9\u306e\u51fa\u529b\u5f15\u6570\u3001\u30ed\u30b0\u3001\u7d42\u4e86\u30b3\u30fc\u30c9\u3001\u5931\u6557\u6642\u306e\u505c\u6b62\u3068\u5b9a\u671f\u5b9f\u884c\u306e\u6761\u4ef6\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n<div class=\"swell-block-postLink\">\t\t\t<div class=\"p-blogCard -internal\" data-type=\"type1\" data-onclick=\"clickLink\">\n\t\t\t\t<div class=\"p-blogCard__inner\">\n\t\t\t\t\t<span class=\"p-blogCard__caption\">\u3042\u308f\u305b\u3066\u8aad\u307f\u305f\u3044<\/span>\n\t\t\t\t\t<div class=\"p-blogCard__thumb c-postThumb\"><figure class=\"c-postThumb__figure\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2018\/08\/unity-ui-editor-extensions-300x169.jpg\" alt=\"\" class=\"c-postThumb__img u-obf-cover\" width=\"320\" height=\"180\"><\/figure><\/div>\t\t\t\t\t<div class=\"p-blogCard__body\">\n\t\t\t\t\t\t<a class=\"p-blogCard__title\" href=\"https:\/\/cg-method.com\/unity\/unity-ui-editor-extensions\/\">Unity\u306eUI\u5236\u4f5c\u30c4\u30fc\u30eb\uff5cuGUI\u30fbTMP\u30fb\u30ec\u30a4\u30a2\u30a6\u30c8\u30fb9\u30b9\u30e9\u30a4\u30b9\u306e\u4f7f\u3044\u5206\u3051<\/a>\n\t\t\t\t\t\t<span class=\"p-blogCard__excerpt\">Unity\u306euGUI\u5236\u4f5c\u3067\u4f7f\u3046\u6a19\u6e96\u6a5f\u80fd\u3068Editor\u62e1\u5f35\u3092\u76ee\u7684\u5225\u306b\u6574\u7406\u3002\u65e7Text\u3068TMP\u3001\u6587\u5b57\u9593\u9694\u3001ContentSizeFitter\u3001\u30d5\u30a9\u30f3\u30c8\u7f6e\u63db\u3001OnionRing\u304b\u3089Auto9Slicer\u3078\u306e\u5909\u66f4\u70b9\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n<div class=\"swell-block-postLink\">\t\t\t<div class=\"p-blogCard -internal\" data-type=\"type1\" data-onclick=\"clickLink\">\n\t\t\t\t<div class=\"p-blogCard__inner\">\n\t\t\t\t\t<span class=\"p-blogCard__caption\">\u3042\u308f\u305b\u3066\u8aad\u307f\u305f\u3044<\/span>\n\t\t\t\t\t<div class=\"p-blogCard__thumb c-postThumb\"><figure class=\"c-postThumb__figure\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cg-method.com\/unity\/wp-content\/uploads\/2018\/08\/unity-editor-extensions-300x169.jpg\" alt=\"\" class=\"c-postThumb__img u-obf-cover\" width=\"320\" height=\"180\"><\/figure><\/div>\t\t\t\t\t<div class=\"p-blogCard__body\">\n\t\t\t\t\t\t<a class=\"p-blogCard__title\" href=\"https:\/\/cg-method.com\/unity\/unity-editor-extensions\/\">Unity\u306e\u30a8\u30c7\u30a3\u30bf\u62e1\u5f35\uff5c\u4e00\u62ec\u30ea\u30cd\u30fc\u30e0\u30fbUndo\u30fb\u30b0\u30eb\u30fc\u30d7\u5316\u3068\u5171\u6709\u65b9\u6cd5<\/a>\n\t\t\t\t\t\t<span class=\"p-blogCard__excerpt\">Unity\u306e\u30a8\u30c7\u30a3\u30bf\u62e1\u5f35\u3092\u4f5c\u696d\u5225\u306b\u9078\u3076\u30ac\u30a4\u30c9\u3002\u30ea\u30cd\u30fc\u30e0\u3001Undo\u4ed8\u304dOutline\u524a\u9664\u3001Material\u5272\u5f53\u3001Game\u30d3\u30e5\u30fcPNG\u3001\u540c\u968e\u5c64\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u3001UPM\u3067\u306e\u5171\u6709\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n<!-- cgm-topic:end -->\n\n\n<h2 class=\"wp-block-heading\">\u3088\u304f\u3042\u308b\u8cea\u554f\uff1aUnity\u306ePrefab\u53c2\u7167\u95a2\u4fc2\u3092CSV\u3067\u53ef\u8996\u5316\u3059\u308b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u3053\u306e\u8a18\u4e8b\u306e\u30c4\u30fc\u30eb\u3067\u306f\u3001\u4f55\u304c\u3067\u304d\u307e\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Prefab\u306b\u542b\u307e\u308c\u308b\u5225\u306ePrefab\u3068\u3001Variant\u306e\u6d3e\u751f\u5143\u3092CSV\u3078\u51fa\u529b\u3057\u3001\u53c2\u7167\u30b0\u30e9\u30d5\u3067\u78ba\u8a8d\u3059\u308b\u4f8b\u3067\u3059\u3002\u540c\u540dPrefab\u3092GUID\u3067\u5206\u3051\u3001\u77e2\u5370\u306f\u300c\u4f9d\u5b58\u3059\u308b\u5074\u2192\u53c2\u7167\u5148\u300d\u306b\u305d\u308d\u3048\u307e\u3059\u3002GameObject\u306e\u5185\u90e8\u968e\u5c64\u4e00\u89a7\u306fPrefab\u5185\u90e8\u306eCSV\u3001\u4fdd\u5b58\u30d5\u30a9\u30eb\u30c0\u30fc\u306e\u4e00\u89a7\u306fPrefab\u30d5\u30a1\u30a4\u30eb\u306e\u30c4\u30ea\u30fcCSV\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Variant\u306e\u7d99\u627f\u95a2\u4fc2\u3060\u3051\u3092\u77e5\u308a\u305f\u3044\u5834\u5408\u3082\u3001\u3053\u306e\u30c4\u30fc\u30eb\u304c\u5fc5\u8981\u3067\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5148\u306b\u3001\u6a19\u6e96\u306ePrefab Family\u8868\u793a\u3067\u76ee\u7684\u3092\u6e80\u305f\u305b\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u4f5c\u308bCSV\u3068Web\u30d3\u30e5\u30fc\u30a2\u30fc\u306f\u3001\u9078\u3093\u3060\u8907\u6570\u30d5\u30a9\u30eb\u30c0\u30fc\u306ePrefab\u3092\u4e00\u89a7\u306b\u3057\u3001Nested\u3068Variant\u306e\u95a2\u4fc2\u3092\u307e\u3068\u3081\u3066\u78ba\u8a8d\u3059\u308b\u7528\u9014\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nested\u306e\u95a2\u4fc2\u306f\u3001\u3069\u3046\u8aad\u3081\u3070\u3088\u3044\u3067\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u3068\u3057\u3066\u3001A\u306e\u4e2d\u306bB\u3001B\u306e\u4e2d\u306bC\u304c\u3042\u308b\u5834\u5408\u3001A\u306e\u5168\u968e\u5c64\u8d70\u67fb\u306b\u306fA\u2192B\u3068A\u2192C\u304c\u542b\u307e\u308c\u307e\u3059\u3002B\u3082\u5bfe\u8c61\u306a\u3089B\u2192C\u3082\u51fa\u307e\u3059\u3002\u3053\u306eNested\u306f\u3001\u76f4\u8fd1\u306e\u89aa\u5b50\u3060\u3051\u3092\u8868\u3059\u6728\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002Override\u3092\u542b\u3080\u30ed\u30fc\u30c9\u5f8c\u306e\u5185\u5bb9\u3092\u8abf\u3079\u308b\u305f\u3081\u3001Variant\u304c\u7d99\u627f\u3057\u305f\u5165\u308c\u5b50\u3082\u5305\u542b\u306b\u73fe\u308c\u308b\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u3001Variant\u306e\u7d99\u627f\u7dda\u3068\u306f\u5206\u3051\u3066\u8aad\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C#\u306f\u3001\u3069\u3046\u5c0e\u5165\u3057\u3066CSV\u3092\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8907\u88fd\u3057\u3001\u8a18\u4e8b\u306e\u5168\u6587\u3092Assets\/Editor\/ExportPrefabGraph.cs\u3068\u3057\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002\u540c\u540d\u306e\u5225\u30d5\u30a9\u30eb\u30c0\u30fcPrefab\u3001Variant\u3068\u6d3e\u751f\u5143\u3001Group\u306e\u4e0b\u306e\u5165\u308c\u5b50\u3001\u5358\u72ecPrefab\u3092\u5c11\u6570\u7528\u610f\u3057\u3001Project\u3067\u78ba\u8a8d\u7528\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u9078\u3093\u3067\u3001Tools \u2192 CG Method \u2192 Export Prefab Reference Graph CSV\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u4fdd\u5b58\u30c0\u30a4\u30a2\u30ed\u30b0\u3067\u306f\u3001Assets\u5916\u306e\u65b0\u3057\u3044.csv\u3092\u9078\u3073\u307e\u3059\u3002\u65e2\u5b58\u30d5\u30a1\u30a4\u30eb\u306f\u62d2\u5426\u3057\u3001\u53d6\u6d88\u3067\u306f\u4fdd\u5b58\u3057\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u51fa\u529b\u7d50\u679c\u306f\u3001\u3069\u3046\u78ba\u8a8d\u3057\u307e\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Console\u306enodes\u30fbedges\u30fbfailed\u3068\u3001CSV\u306e9\u5217\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002failed\u304c0\u3067\u3082\u3001\u95a2\u4fc2\u306e\u6b63\u3057\u3055\u306f\u6700\u5c0fPrefab\u306e\u671f\u5f85\u5024\u3068\u7167\u5408\u3057\u307e\u3059\u3002Error\u304c\u3042\u308c\u3070\u3001\u30b0\u30e9\u30d5\u3092\u5b8c\u5168\u306a\u4e00\u89a7\u3068\u5224\u65ad\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u540c\u3058\u540d\u524d\u306ePrefab\u304c2\u3064\u3042\u308b\u3068\u304d\u3001\u3069\u3046\u8868\u793a\u3055\u308c\u307e\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5225GUID\u306e2\u30ce\u30fc\u30c9\u3068\u3057\u3066\u6b8b\u308a\u307e\u3059\u3002\u8d77\u70b9\u306e\u9078\u629e\u80a2\u306f\u540d\u524d\u3068\u4fdd\u5b58\u30d1\u30b9\u3001\u30ce\u30fc\u30c9\u3092\u9078\u3076\u3068GUID\u307e\u3067\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u9006\u5411\u304d\u306e\u300c\u4f7f\u3046\u5074\u300d\u3067\u306f\u3001\u53c2\u7167\u3057\u3066\u3044\u308bPrefab\u3078\u623b\u308a\u307e\u3059\u3002\u9006\u5f15\u304d\u306e\u7bc4\u56f2\u306f\u3001CSV\u306b\u8a18\u9332\u3057\u305f\u8d70\u67fb\u5bfe\u8c61\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30b0\u30e9\u30d5\u304c\u8868\u793a\u3055\u308c\u306a\u3044\u30fb\u304a\u304b\u3057\u3044\u3068\u304d\u306f\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8aad\u8fbc\u5931\u6557\u306e\u5834\u5408\u306f\u3001Sheet ID\u30fb\u30bf\u30d6\u540d\u30fb\u6a29\u9650\u30fb9\u5217\u30d8\u30c3\u30c0\u30fc\u30fb\u5404\u884c\u30fb\u4e0a\u9650\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002CDN\u5931\u6557\u30fb\u56f3\u304c\u306a\u3044\u5834\u5408\u306f\u3001Cytoscape\u306e\u901a\u4fe1\u3068JavaScript\u3092\u78ba\u8a8d\u3057\u3001CDN\u5931\u6557\u306a\u3089\u30da\u30fc\u30b8\u5168\u4f53\u3092\u518d\u8aad\u8fbc\u3057\u307e\u3059\u3002Error\u8868\u793a\u3092\u898b\u3066\u3001\u53e4\u3044\u30b0\u30e9\u30d5\u3092\u6700\u65b0\u306e\u6210\u529f\u7d50\u679c\u3068\u3057\u3066\u4f7f\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002CSV\u306e\u578b\u3084\u5217\u304c\u5d29\u308c\u308b\u5834\u5408\u306f\u3001\u65e74\u5217\u3068\u6df7\u305c\u305a\u3001\u30d8\u30c3\u30c0\u30fc\u3092\u5909\u3048\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u3053\u306e\u8a18\u4e8b\u306e\u5185\u5bb9\u306f\u3001\u5b9f\u6a5f\u3067\u691c\u8a3c\u3055\u308c\u3066\u3044\u307e\u3059\u304b\uff1f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ed5\u69d8\u53c2\u7167\u306fUnity 6.3 LTS\uff086000.3\uff09\u3067\u3059\u3002\u7d14\u7c8bC#\u306eCSV\u6574\u5f62\u3001JavaScript\u306e\u884c\u691c\u8a3c\u30fb\u30b0\u30e9\u30d5\u8d70\u67fb\u3001\u67b6\u7a7a\u30c7\u30fc\u30bf\u3092\u4f7f\u3063\u305fCytoscape 3.23.0\u306e\u30ed\u30fc\u30ab\u30eb\u8868\u793a\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002Unity Editor\u3067\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u30fbPrefab\u62bd\u51fa\u3001Google Sheets\u3078\u306e\u5b9f\u53d6\u8fbc\u3001Apps Script\u306e\u5b9f\u884c\u30fb\u6a29\u9650\u30fb\u30c7\u30d7\u30ed\u30a4\u306f\u672a\u78ba\u8a8d\u3067\u3059\u3002\u5143\u8a18\u4e8b\u306e\u753b\u50cf\u306f\u65e7\u7248\u306e\u8cc7\u6599\u3067\u3001\u4eca\u56de\u306e\u4fee\u6b63\u7248\u306e\u7d50\u679c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u6700\u65b0\u306e\u4ed5\u69d8\u306f\u3001Unity\u306e\u516c\u5f0f\u30de\u30cb\u30e5\u30a2\u30eb\u3067\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Unity\u306ePrefab\u3092GUID\u3067\u8b58\u5225\u3057\u3001\u5168\u968e\u5c64\u306eNested\u3068\u76f4\u8fd1\u306eVariant\u6d3e\u751f\u5143\u3092CSV\u3078\u51fa\u529b\u3059\u308b\u4f8b\u3002Google Apps Script\u3067\u306e\u30b0\u30e9\u30d5\u8868\u793a\u3001\u65b9\u5411\u30fb\u540c\u540d\u30fb\u5931\u6557\u6642\u306e\u78ba\u8a8d\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"author":1,"featured_media":169,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","book_review_data":"","footnotes":"","ssp_meta_title":"Unity\u306ePrefab\u53c2\u7167\u95a2\u4fc2\u3092\u53ef\u8996\u5316\uff5cNested\u30fbVariant\u3068GUID\u306eCSV\u51fa\u529b","ssp_meta_description":"Unity\u306ePrefab\u3092GUID\u3067\u8b58\u5225\u3057\u3001\u5168\u968e\u5c64\u306eNested\u3068\u76f4\u8fd1\u306eVariant\u6d3e\u751f\u5143\u3092CSV\u3078\u51fa\u529b\u3059\u308b\u4f8b\u3002Google Apps Script\u3067\u306e\u30b0\u30e9\u30d5\u8868\u793a\u3001\u65b9\u5411\u30fb\u540c\u540d\u30fb\u5931\u6557\u6642\u306e\u78ba\u8a8d\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002"},"categories":[24],"tags":[],"class_list":["post-165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-editor"],"_links":{"self":[{"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":12,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":22521,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/posts\/165\/revisions\/22521"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/media\/169"}],"wp:attachment":[{"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cg-method.com\/unity\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}