diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack.meta
new file mode 100644
index 00000000..7182dbd8
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 611bc182f939ea147a72b08613e2d2ba
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors.meta
new file mode 100644
index 00000000..88093e68
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cbe37300d75dbd641be2e6dca83a913c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs
new file mode 100644
index 00000000..5234487e
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs
@@ -0,0 +1,262 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System;
+using UnityEditor;
+using System.IO;
+using UnityEngine;
+using System.Text;
+
+namespace AxibugEmuOnline.Editors
+{
+    public class AxibugNSPTools : Editor
+    {
+        static string WorkRoot = Path.GetFullPath(Path.Combine(Application.dataPath,"AxiProjectTools/AxiNSPack"));
+        static string switch_keys = Path.GetFullPath(Path.Combine(Application.dataPath, "AxiProjectTools/AxiNSPack/switch_keys"));
+        static string hacpack_root = Path.GetFullPath(Path.Combine(Application.dataPath, "AxiProjectTools/AxiNSPack/hacpack"));
+        static Dictionary<string, string> tools = new Dictionary<string, string>();
+        static string prodKeysPath;
+        
+        [MenuItem("Axibug��ֲ����/Switch/AxibugNSPTools/RepackNSP")]
+        static void RepackNSP()
+        {
+            if (!CheckEnvironmentVariable())
+                return;
+
+            string path = EditorUtility.OpenFilePanel(
+                title: "ѡ�� .nsp �ļ�",
+                directory: Path.Combine(Application.dataPath,".."), // Ĭ��·��Ϊ��Ŀ Assets Ŀ¼
+                extension: "nsp" // �����ļ�����Ϊ .nsp
+            );
+
+            if (string.IsNullOrEmpty(path))
+                return;
+
+            RepackNSP(path);
+        }
+        static bool CheckEnvironmentVariable()
+        {
+            // ��ȡ������������Ҫ���ӻ���������飩
+            string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT");
+            if (string.IsNullOrEmpty(sdkRoot))
+            {
+                Debug.LogError($"[AxibugNSPTools]������ȷ���û�������:NINTENDO_SDK_ROOT,(�������ã���֤���ú󳹵�����Unity Hub��Unity)");
+                return false;
+            }
+
+            #region ��ȡprod.keys�ļ�·��
+            prodKeysPath = Path.Combine(
+                switch_keys,
+                "prod.keys"
+            );
+
+            if (!File.Exists(prodKeysPath))
+            {
+                Debug.LogError($"[AxibugNSPTools]δ�ҵ� prod.keys! ����׼���ļ���path:{prodKeysPath}");
+                return false;
+            }
+            #endregion
+
+            return true;
+        }
+
+        static void RepackNSP(string nspFile)
+        {
+            #region ��ʼ������·��
+            // ��ȡ������������Ҫ���ӻ���������飩
+            string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT");
+            tools["authoringTool"] = Path.Combine(sdkRoot, "Tools/CommandLineTools/AuthoringTool/AuthoringTool.exe");
+            tools["hacPack"] = hacpack_root;
+            #endregion
+
+            #region ����NSP����
+            string nspFilePath = nspFile;
+            string nspFileName = Path.GetFileName(nspFilePath);
+            string nspParentDir = Path.GetDirectoryName(nspFilePath);
+            #endregion
+
+            #region ��ȡTitle ID
+            string titleID = ExtractTitleID(nspFilePath) ?? ManualTitleIDInput();
+            Debug.Log($"[AxibugNSPTools]Using Title ID: {titleID}");
+            #endregion
+
+            #region ������ʱĿ¼
+            CleanDirectory(Path.Combine(nspParentDir, "repacker_extract"));
+            CleanDirectory(Path.Combine(Path.GetTempPath(), "NCA"));
+            CleanDirectory(Path.Combine(WorkRoot, "hacpack_backup"));
+            #endregion
+
+            #region ���NSP�ļ�
+            string extractPath = Path.Combine(nspParentDir, "repacker_extract");
+            ExecuteCommand($"{tools["authoringTool"]} extract -o \"{extractPath}\" \"{nspFilePath}\"");
+
+            var (controlPath, programPath) = FindNACPAndNPDPaths(extractPath);
+            if (controlPath == null || programPath == null)
+            {
+                Debug.LogError("[AxibugNSPTools] Critical directory structure not found!");
+                return;
+            }
+            #endregion
+
+            #region �ؽ�NCA/NSP
+            string tmpPath = Path.Combine(Path.GetTempPath(), "NCA");
+            string programNCA = BuildProgramNCA(tmpPath, titleID, programPath);
+            string controlNCA = BuildControlNCA(tmpPath, titleID, controlPath);
+            BuildMetaNCA(tmpPath, titleID, programNCA, controlNCA);
+
+            string outputNSP = BuildFinalNSP(nspFilePath, nspParentDir, tmpPath, titleID);
+            Debug.Log($"[AxibugNSPTools]Repacking completed: {outputNSP}");
+            #endregion
+        }
+
+        #region ��������
+        static string GetUserInput()
+        {
+            Console.Write("Enter the NSP filepath: ");
+            return Console.ReadLine();
+        }
+
+        static string ExtractTitleID(string path)
+        {
+            var match = Regex.Match(path, @"0100[\dA-Fa-f]{12}");
+            return match.Success ? match.Value : null;
+        }
+
+        static string ManualTitleIDInput()
+        {
+            Console.Write("Enter Title ID manually: ");
+            return Console.ReadLine().Trim();
+        }
+
+        static void CleanDirectory(string path)
+        {
+            if (Directory.Exists(path))
+            {
+                Directory.Delete(path, true);
+                while (Directory.Exists(path)) ; // �ȴ�ɾ�����
+            }
+        }
+
+        static (string, string) FindNACPAndNPDPaths(string basePath)
+        {
+            foreach (var dir in Directory.GetDirectories(basePath))
+            {
+                if (File.Exists(Path.Combine(dir, "fs0/control.nacp")))
+                    return (dir, null);
+                if (File.Exists(Path.Combine(dir, "fs0/main.npdm")))
+                    return (null, dir);
+            }
+            return (null, null);
+        }
+
+        static string ExecuteCommand(string command)
+        {
+            var process = new System.Diagnostics.Process()
+            {
+                StartInfo = new System.Diagnostics.ProcessStartInfo
+                {
+                    FileName = "cmd.exe",
+                    Arguments = $"/C {command}",
+                    RedirectStandardOutput = true,
+                    RedirectStandardError = true,  // ���Ӵ������ض���
+                    UseShellExecute = false,
+                    CreateNoWindow = true,
+                    StandardOutputEncoding = Encoding.UTF8,  // ��ȷָ������
+                    StandardErrorEncoding = Encoding.UTF8
+                }
+            };
+
+            var outputBuilder = new StringBuilder();
+            var errorBuilder = new StringBuilder();
+
+            // ʹ���¼��������򲶻�ʵʱ���
+            process.OutputDataReceived += (sender, args) =>
+            {
+                if (!string.IsNullOrEmpty(args.Data))
+                {
+                    outputBuilder.AppendLine(args.Data);
+                    Debug.Log($"[AxibugNSPTools]{args.Data}");
+                }
+            };
+
+            process.ErrorDataReceived += (sender, args) =>
+            {
+                if (!string.IsNullOrEmpty(args.Data))
+                {
+                    errorBuilder.AppendLine(args.Data);
+                    Debug.LogError($"[AxibugNSPTools]{args.Data}");
+                }
+            };
+
+            process.Start();
+
+            // ��ʼ�첽��ȡ���
+            process.BeginOutputReadLine();
+            process.BeginErrorReadLine();
+
+            // �ȴ������˳�����ʱ���ѹرգ�
+            process.WaitForExit();
+
+            // ��������Ϣ���ӵ������
+            if (errorBuilder.Length > 0)
+            {
+                outputBuilder.AppendLine("\nError Output:");
+                outputBuilder.Append(errorBuilder);
+            }
+
+            return outputBuilder.ToString();
+        }
+        #endregion
+
+        #region NCA�����߼�
+        static string BuildProgramNCA(string tmpPath, string titleID, string programDir)
+        {
+            string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
+                          $"--type nca --ncatype program --exefsdir \"{programDir}/fs0\" " +
+                          $"--romfsdir \"{programDir}/fs1\" --logodir \"{programDir}/fs2\"";
+
+            string output = ExecuteCommand($"{tools["hacPack"]} {args}");
+            return ParseNCAOutput(output, "Program");
+        }
+
+        static string BuildControlNCA(string tmpPath, string titleID, string controlDir)
+        {
+            string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
+                          $"--type nca --ncatype control --romfsdir \"{controlDir}/fs0\"";
+
+            string output = ExecuteCommand($"{tools["hacPack"]} {args}");
+            return ParseNCAOutput(output, "Control");
+        }
+
+        static void BuildMetaNCA(string tmpPath, string titleID, string programNCA, string controlNCA)
+        {
+            string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
+                          $"--type nca --ncatype meta --titletype application " +
+                          $"--programnca \"{programNCA}\" --controlnca \"{controlNCA}\"";
+
+            ExecuteCommand($"{tools["hacPack"]} {args}");
+        }
+
+        static string BuildFinalNSP(string origPath, string parentDir, string tmpPath, string titleID)
+        {
+            string outputPath = origPath.Replace(".nsp", "_repacked.nsp");
+            if (File.Exists(outputPath)) File.Delete(outputPath);
+
+            string args = $"-k \"{prodKeysPath}\" -o \"{parentDir}\" --titleid {titleID} " +
+                          $"--type nsp --ncadir \"{tmpPath}\"";
+
+            ExecuteCommand($"{tools["hacPack"]} {args}");
+            File.Move(Path.Combine(parentDir, $"{titleID}.nsp"), outputPath);
+            return outputPath;
+        }
+
+        static string ParseNCAOutput(string output, string type)
+        {
+            var line = output.Split('\n')
+                .FirstOrDefault(l => l.Contains($"Created {type} NCA:"));
+
+            return line?.Split(':').Last().Trim();
+        }
+        #endregion
+    }
+}
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs.meta
new file mode 100644
index 00000000..a48f3e39
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/Editors/AxibugNSPTools.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 55aa3f0466c30bc4683cdbdc4dd75940
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack.meta
new file mode 100644
index 00000000..f4c02cc9
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d90c85ddb14ad7e4e9a6242ba135da0b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools.meta
new file mode 100644
index 00000000..e6fce366
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b31e2ae7250c09548a777d4dcdfe2d1f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP.meta
new file mode 100644
index 00000000..708c152c
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7be57cd4293e9dc4297ea9b83fe08b18
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/hptnacp.exe b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/hptnacp.exe
new file mode 100644
index 00000000..7b48599a
Binary files /dev/null and b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/hptnacp.exe differ
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/hptnacp.exe.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/hptnacp.exe.meta
new file mode 100644
index 00000000..81ccc3b3
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/hptnacp.exe.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e1252f6d74d67ee48af0a0342aecc981
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/sample_hbemnu.nacp.xml b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/sample_hbemnu.nacp.xml
new file mode 100644
index 00000000..09433f89
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/sample_hbemnu.nacp.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Application>
+    <Title>
+        <Language>AmericanEnglish</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>BritishEnglish</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>Japanese</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>French</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>German</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>LatinAmericanSpanish</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>Spanish</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>Italian</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>Dutch</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>CanadianFrench</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>Portuguese</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Title>
+        <Language>Russian</Language>
+        <Name>Homebrew Menu</Name>
+        <Publisher>Yellows8</Publisher>
+    </Title>
+    <Isbn/>
+    <StartupUserAccount>Required</StartupUserAccount>
+    <UserAccountSwitchLock>Disable</UserAccountSwitchLock>
+    <ParentalControl>None</ParentalControl>
+    <SupportedLanguage>AmericanEnglish</SupportedLanguage>
+    <SupportedLanguage>BritishEnglish</SupportedLanguage>
+    <SupportedLanguage>Japanese</SupportedLanguage>
+    <SupportedLanguage>French</SupportedLanguage>
+    <SupportedLanguage>German</SupportedLanguage>
+    <SupportedLanguage>LatinAmericanSpanish</SupportedLanguage>
+    <SupportedLanguage>Spanish</SupportedLanguage>
+    <SupportedLanguage>Italian</SupportedLanguage>
+    <SupportedLanguage>Dutch</SupportedLanguage>
+    <SupportedLanguage>CanadianFrench</SupportedLanguage>
+    <SupportedLanguage>Russian</SupportedLanguage>
+    <Screenshot>Allow</Screenshot>
+    <VideoCapture>Disable</VideoCapture>
+    <PresenceGroupId>0x0104444444441001</PresenceGroupId>
+    <DisplayVersion>2.0</DisplayVersion>
+    <Rating>
+        <Organization>CERO</Organization>
+        <Age>12</Age>
+    </Rating>
+    <Rating>
+        <Organization>ESRB</Organization>
+        <Age>10</Age>
+    </Rating>
+    <Rating>
+        <Organization>USK</Organization>
+        <Age>12</Age>
+    </Rating>
+    <Rating>
+        <Organization>PEGI</Organization>
+        <Age>12</Age>
+    </Rating>
+    <Rating>
+        <Organization>PEGIPortugal</Organization>
+        <Age>12</Age>
+    </Rating>
+    <Rating>
+        <Organization>PEGIBBFC</Organization>
+        <Age>12</Age>
+    </Rating>
+    <Rating>
+        <Organization>Russian</Organization>
+        <Age>12</Age>
+    </Rating>
+    <Rating>
+        <Organization>ACB</Organization>
+        <Age>13</Age>
+    </Rating>
+    <Rating>
+        <Organization>OFLC</Organization>
+        <Age>13</Age>
+    </Rating>
+    <DataLossConfirmation>Required</DataLossConfirmation>
+    <PlayLogPolicy>All</PlayLogPolicy>
+    <SaveDataOwnerId>0x0104444444441001</SaveDataOwnerId>
+    <UserAccountSaveDataSize>0x0000000003e00000</UserAccountSaveDataSize>
+    <UserAccountSaveDataJournalSize>0x0000000000180000</UserAccountSaveDataJournalSize>
+    <DeviceSaveDataSize>0x0000000000000000</DeviceSaveDataSize>
+    <DeviceSaveDataJournalSize>0x0000000000000000</DeviceSaveDataJournalSize>
+    <BcatDeliveryCacheStorageSize>0x0000000000000000</BcatDeliveryCacheStorageSize>
+    <ApplicationErrorCodeCategory/>
+    <AddOnContentBaseId>0x0104444444442001</AddOnContentBaseId>
+    <LogoType>Nintendo</LogoType>
+    <LocalCommunicationId>0x0104444444441001</LocalCommunicationId>
+    <LogoHandling>Auto</LogoHandling>
+    <SeedForPseudoDeviceId>0x0000000000000000</SeedForPseudoDeviceId>
+    <BcatPassphrase/>
+    <AddOnContentRegistrationType>AllOnLaunch</AddOnContentRegistrationType>
+    <UserAccountSaveDataSizeMax>0x0000000000000000</UserAccountSaveDataSizeMax>
+    <UserAccountSaveDataJournalSizeMax>0x0000000000000000</UserAccountSaveDataJournalSizeMax>
+    <DeviceSaveDataSizeMax>0x0000000000000000</DeviceSaveDataSizeMax>
+    <DeviceSaveDataJournalSizeMax>0x0000000000000000</DeviceSaveDataJournalSizeMax>
+    <TemporaryStorageSize>0x0000000000000000</TemporaryStorageSize>
+    <CacheStorageSize>0x0000000000000000</CacheStorageSize>
+    <CacheStorageJournalSize>0x0000000000000000</CacheStorageJournalSize>
+    <CacheStorageDataAndJournalSizeMax>0x0000000000000000</CacheStorageDataAndJournalSizeMax>
+    <CacheStorageIndexMax>0x0000000000000000</CacheStorageIndexMax>
+    <Hdcp>None</Hdcp>
+    <CrashReport>Deny</CrashReport>
+    <RuntimeAddOnContentInstall>Deny</RuntimeAddOnContentInstall>
+    <PlayLogQueryableApplicationId>0x0000000000000000</PlayLogQueryableApplicationId>
+    <PlayLogQueryCapability>None</PlayLogQueryCapability>
+    <Repair>None</Repair>
+    <Attribute>None</Attribute>
+    <ProgramIndex>0</ProgramIndex>
+    <RequiredNetworkServiceLicenseOnLaunch>None</RequiredNetworkServiceLicenseOnLaunch>
+</Application>
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/sample_hbemnu.nacp.xml.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/sample_hbemnu.nacp.xml.meta
new file mode 100644
index 00000000..abd644c0
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/Tools/hacPackTools-NACP/sample_hbemnu.nacp.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 42c1295c31de3a948825b9e8e9e8184f
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/hacpack.exe b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/hacpack.exe
new file mode 100644
index 00000000..293ebb79
Binary files /dev/null and b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/hacpack.exe differ
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/hacpack.exe.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/hacpack.exe.meta
new file mode 100644
index 00000000..d694a349
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/hacpack/hacpack.exe.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7b1b3ff7954facb409d3ba6f9840f762
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys.meta
new file mode 100644
index 00000000..5ab90e7c
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 409c6e8e5ead0ac4991ea6c243e407dd
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys/copy prod.keys To here.txt b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys/copy prod.keys To here.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys/copy prod.keys To here.txt.meta b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys/copy prod.keys To here.txt.meta
new file mode 100644
index 00000000..a36d51af
--- /dev/null
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/AxiNSPack/switch_keys/copy prod.keys To here.txt.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 08bd0c8a53daacb4ea23b14dde156354
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/AxibugEmuOnline.Client/Assets/AxiProjectTools/Editors/AxiProjectTools.cs b/AxibugEmuOnline.Client/Assets/AxiProjectTools/Editors/AxiProjectTools.cs
index 31e38257..fa31dc04 100644
--- a/AxibugEmuOnline.Client/Assets/AxiProjectTools/Editors/AxiProjectTools.cs
+++ b/AxibugEmuOnline.Client/Assets/AxiProjectTools/Editors/AxiProjectTools.cs
@@ -29,7 +29,7 @@ public class AxiProjectTools : EditorWindow
 		}
 	}
 
-	[MenuItem("Axibug移植工具/[1]采集所有预制体和场景下的UGUI组件")]
+	[MenuItem("Axibug移植工具/ToLowVersionUnity/[1]采集所有预制体和场景下的UGUI组件")]
 	public static void Part1()
 	{
 		GoTAxiProjectToolsSence();
@@ -132,7 +132,7 @@ public class AxiProjectTools : EditorWindow
 #endif
 	}
 
-	[MenuItem("Axibug移植工具/[2]生成中间脚本代码")]
+	[MenuItem("Axibug移植工具/ToLowVersionUnity/[2]生成中间脚本代码")]
 	public static void Part2()
 	{
 		if (UnityEngine.Windows.Directory.Exists(outCsDir))
@@ -161,7 +161,7 @@ public class AxiProjectTools : EditorWindow
 		Debug.Log("<Color=#FFF333>处理完毕  [2]生成中间脚本代码</color>");
 	}
 
-	[MenuItem("Axibug移植工具/[3]收集生成的脚本")]
+	[MenuItem("Axibug移植工具/ToLowVersionUnity/[3]收集生成的脚本")]
 	public static void Part3()
 	{
 		AxiPrefabCache cache = AssetDatabase.LoadAssetAtPath<AxiPrefabCache>(cachecfgPath);
@@ -205,7 +205,7 @@ public class AxiProjectTools : EditorWindow
 	}
 
 
-	[MenuItem("Axibug移植工具/[4]替换所有预制体和场景中的组件")]
+	[MenuItem("Axibug移植工具/ToLowVersionUnity/[4]替换所有预制体和场景中的组件")]
 	public static void Part4()
 	{
 		AxiPrefabCache cache = AssetDatabase.LoadAssetAtPath<AxiPrefabCache>(cachecfgPath);
@@ -259,7 +259,7 @@ public class AxiProjectTools : EditorWindow
 	}
 
 
-	[MenuItem("Axibug移植工具/[5]UnPack所有嵌套预制体和场景中的预制体")]
+	[MenuItem("Axibug移植工具/ToLowVersionUnity/[5]UnPack所有嵌套预制体和场景中的预制体")]
 	public static void UnpackPrefabs()
 	{
 
@@ -350,7 +350,7 @@ public class AxiProjectTools : EditorWindow
 	}
 
 
-	[MenuItem("Axibug移植工具/[6]修复Sprite")]
+	[MenuItem("Axibug移植工具/ToLowVersionUnity/[6]修复Sprite")]
 	public static void FixMultipleMaterialSprites()
 	{
 		string[] guids = AssetDatabase.FindAssets("t:sprite");