完善AxiNSApi,以及NSP打包自动化代码完善

This commit is contained in:
sin365 2025-04-07 23:51:13 +08:00
parent 09213f841e
commit 5ab232b835
12 changed files with 820 additions and 982 deletions

View File

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using UnityEditor;
@ -11,7 +12,7 @@ using UnityEngine;
namespace AxibugEmuOnline.Editors
{
public class AxibugNSPTools : Editor
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"));
@ -82,7 +83,7 @@ namespace AxibugEmuOnline.Editors
{
BuildReport report = BuildPipeline.BuildPlayer(options);
}
catch(Exception ex)
catch (Exception ex)
{
Debug.LogError($"[AxibugNSPTools] Unity Build NSP 错误:{ex.ToString()}");
return;
@ -120,9 +121,9 @@ namespace AxibugEmuOnline.Editors
static void RepackNSP(string nspFile)
{
#region
// 获取环境变量(需要添加环境变量检查)
string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT");
#region
// 获取环境变量(需要添加环境变量检查)
string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT");
tools["authoringTool"] = Path.Combine(sdkRoot, "Tools/CommandLineTools/AuthoringTool/AuthoringTool.exe");
tools["hacPack"] = Path.Combine(hacpack_root, "hacpack");
#endregion
@ -147,7 +148,7 @@ namespace AxibugEmuOnline.Editors
#region
CleanDirectory(Path.Combine(nspParentDir, "repacker_extract"));
CleanDirectory(Path.Combine(Path.GetTempPath(), "NCA"));
CleanDirectory(Path.Combine(WorkRoot, "hacpack_backup"));
CleanDirectory(Path.Combine(nspParentDir, "hacpack_backup"));
#endregion
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"解包NSP文件", 0.2f);
@ -167,34 +168,43 @@ namespace AxibugEmuOnline.Editors
#region NCA/NSP
string tmpPath = Path.Combine(Path.GetTempPath(), "NCA");
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NCA", 0.6f);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建 Program NCA", 0.3f);
string programNCA = BuildProgramNCA(tmpPath, titleID, programPath, nspParentDir);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NCA", 0.7f);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建 Control NCA", 0.4f);
string controlNCA = BuildControlNCA(tmpPath, titleID, controlPath, nspParentDir);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NCA", 0.8f);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建 Meta NCA", 0.5f);
BuildMetaNCA(tmpPath, titleID, programNCA, controlNCA, nspParentDir);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NSP", 0.9f);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NSP", 0.6f);
string outputNSP = BuildFinalNSP(nspFilePath, nspParentDir, tmpPath, titleID, nspParentDir);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NSP", 1f);
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"重建NSP", 0.9f);
Debug.Log($"[AxibugNSPTools]Repacking completed: {outputNSP}");
EditorUtility.ClearProgressBar();
#endregion
#endregion
EditorUtility.DisplayProgressBar("AxibugNSPTools", $"清理临时目录", 1);
#region
CleanDirectory(Path.Combine(nspParentDir, "repacker_extract"));
CleanDirectory(Path.Combine(Path.GetTempPath(), "NCA"));
CleanDirectory(Path.Combine(nspParentDir, "hacpack_backup"));
#endregion
System.Diagnostics.Process.Start("explorer", "/select,\"" + outputNSP.Trim() + "\"");
EditorUtility.ClearProgressBar();
}
#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 void CleanDirectory(string path)
{
if (Directory.Exists(path))
@ -215,8 +225,9 @@ namespace AxibugEmuOnline.Editors
}
}
static string ExecuteCommand(string command,string workdir)
static string ExecuteCommand(string command, string workdir)
{
Debug.Log($"调用cmd=>{command}");
var process = new System.Diagnostics.Process()
{
StartInfo = new System.Diagnostics.ProcessStartInfo
@ -230,7 +241,7 @@ namespace AxibugEmuOnline.Editors
StandardOutputEncoding = Encoding.UTF8, // 明确指定编码
StandardErrorEncoding = Encoding.UTF8,
WorkingDirectory = workdir
}
}
};
var outputBuilder = new StringBuilder();
@ -277,7 +288,7 @@ namespace AxibugEmuOnline.Editors
#region NCA构建逻辑
static string BuildProgramNCA(string tmpPath, string titleID, string programDir, string workdir)
{
{
string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
$"--type nca --ncatype program --exefsdir \"{programDir}/fs0\" " +
$"--romfsdir \"{programDir}/fs1\" --logodir \"{programDir}/fs2\"";
@ -287,7 +298,7 @@ namespace AxibugEmuOnline.Editors
}
static string BuildControlNCA(string tmpPath, string titleID, string controlDir, string workdir)
{
{
string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
$"--type nca --ncatype control --romfsdir \"{controlDir}/fs0\"";
@ -297,7 +308,7 @@ namespace AxibugEmuOnline.Editors
}
static void BuildMetaNCA(string tmpPath, string titleID, string programNCA, string controlNCA, string workdir)
{
{
string args = $"-k \"{prodKeysPath}\" -o \"{tmpPath}\" --titleid {titleID} " +
$"--type nca --ncatype meta --titletype application " +
$"--programnca \"{programNCA}\" --controlnca \"{controlNCA}\"";
@ -306,7 +317,7 @@ namespace AxibugEmuOnline.Editors
}
static string BuildFinalNSP(string origPath, string parentDir, string tmpPath, string titleID, string workdir)
{
{
string outputPath = origPath.Replace(".nsp", "_repacked.nsp");
if (File.Exists(outputPath)) File.Delete(outputPath);
@ -322,7 +333,9 @@ namespace AxibugEmuOnline.Editors
{
var line = output.Split('\n')
.FirstOrDefault(l => l.Contains($"Created {type} NCA:"));
return line?.Split(':').Last().Trim();
//return line?.Split(':').Last().Trim();
return line?.Substring(line.IndexOf("NCA:") + "NCA:".Length).Trim();
}
#endregion
}

View File

@ -422,10 +422,10 @@ RectTransform:
m_Father: {fileID: 224239707051943026}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -1.5747986, y: -420.03632}
m_SizeDelta: {x: -37.1494, y: -877.8796}
m_AnchoredPosition: {x: -1.5748291, y: -588.8003}
m_SizeDelta: {x: -37.1494, y: 193.7351}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222676872876319506
CanvasRenderer:
@ -622,8 +622,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 75.88139, y: -218.2593}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: 75.88139, y: -151.2593}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222371004153170850
CanvasRenderer:
@ -655,10 +655,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -702,8 +702,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -69.000046, y: -152.87704}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: -69.000046, y: -85.877045}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222149757082515052
CanvasRenderer:
@ -735,10 +735,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -782,8 +782,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -69, y: -34}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: -69, y: 33}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222247577356471494
CanvasRenderer:
@ -815,10 +815,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -942,7 +942,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -57, y: -31}
m_AnchoredPosition: {x: -57, y: -5}
m_SizeDelta: {x: 160, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222025172691057858
@ -975,7 +975,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 38
m_FontSize: 26
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
@ -1022,8 +1022,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 75.88138, y: -39.94374}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: 75.88138, y: 27.05626}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222019075447801744
CanvasRenderer:
@ -1055,10 +1055,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -1103,9 +1103,9 @@ RectTransform:
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: -17}
m_Pivot: {x: 1, y: 1}
--- !u!222 &222496390282308564
CanvasRenderer:
@ -1188,7 +1188,7 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 114349514364690424}
m_HandleRect: {fileID: 224484957882293838}
m_Direction: 2
m_Value: 0
m_Value: 1
m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
@ -1389,9 +1389,9 @@ RectTransform:
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_SizeDelta: {x: 3, y: -17}
m_Pivot: {x: 0, y: 1}
--- !u!222 &222249394742509856
CanvasRenderer:
@ -1588,7 +1588,7 @@ RectTransform:
m_GameObject: {fileID: 1278413047564896}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.7, y: 0.7, z: 0.7}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224557348716555878}
@ -1599,7 +1599,7 @@ RectTransform:
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 500, y: 462.86}
m_SizeDelta: {x: 280, y: 0}
m_Pivot: {x: 1, y: 1}
--- !u!222 &222793245586038234
CanvasRenderer:
@ -1674,7 +1674,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -57, y: -66}
m_AnchoredPosition: {x: -57, y: -38}
m_SizeDelta: {x: 160, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222069111681582280
@ -1707,7 +1707,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 38
m_FontSize: 26
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
@ -1761,10 +1761,10 @@ RectTransform:
m_Father: {fileID: 224239707051943026}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -1.5747986, y: 197.53406}
m_SizeDelta: {x: -37.1494, y: -806.0691}
m_AnchoredPosition: {x: 0, y: -291.14453}
m_SizeDelta: {x: -37.1494, y: 368.1092}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222599810001621486
CanvasRenderer:
@ -1821,7 +1821,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224358412801408058
RectTransform:
m_ObjectHideFlags: 0
@ -1831,7 +1831,7 @@ RectTransform:
m_GameObject: {fileID: 1324954596340382}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224327409016972010}
@ -1923,8 +1923,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 2.5, y: 180}
m_SizeDelta: {x: 160, y: 60}
m_AnchoredPosition: {x: 49.699, y: 75.3}
m_SizeDelta: {x: 99.399, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222268659973718058
CanvasRenderer:
@ -2254,8 +2254,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -81.24892, y: 87.40382}
m_SizeDelta: {x: 134.6275, y: 134.6275}
m_AnchoredPosition: {x: -74, y: 30}
m_SizeDelta: {x: 64, y: 64}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222599422272201422
CanvasRenderer:
@ -2330,8 +2330,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 2.5, y: -7}
m_SizeDelta: {x: 160, y: 60}
m_AnchoredPosition: {x: 49.699, y: -7.4}
m_SizeDelta: {x: 99.399, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222072502947938168
CanvasRenderer:
@ -2486,7 +2486,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 42.5, y: -77}
m_AnchoredPosition: {x: 42.5, y: -46}
m_SizeDelta: {x: 115, y: 70}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222949466926700600
@ -2548,7 +2548,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224885472704193994
RectTransform:
m_ObjectHideFlags: 0
@ -2568,7 +2568,7 @@ RectTransform:
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: -0.1101, y: -1.4000244}
m_SizeDelta: {x: 1634.989, y: 70.3101}
m_SizeDelta: {x: 1634.989, y: 59.7307}
m_Pivot: {x: 0.5, y: 0}
--- !u!222 &222522261078967510
CanvasRenderer:
@ -2864,7 +2864,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224923772708159588
RectTransform:
m_ObjectHideFlags: 0
@ -2874,7 +2874,7 @@ RectTransform:
m_GameObject: {fileID: 1415688944016792}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224496472720398888}
@ -2944,7 +2944,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224780286526567530
RectTransform:
m_ObjectHideFlags: 0
@ -2954,7 +2954,7 @@ RectTransform:
m_GameObject: {fileID: 1421527332497682}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224769701094115986}
@ -3040,7 +3040,7 @@ RectTransform:
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
@ -3273,7 +3273,7 @@ MonoBehaviour:
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 33
m_FontStyle: 0
m_FontStyle: 1
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 101
@ -3283,9 +3283,9 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "<color=white>[\u5341\u5B57\u952E]</color>:\u79FB\u52A8 <color=white>[\u25CB]</color>:\u786E\u8BA4\u5BF9\u8BDD
<color=white>[\u25B3][\xD7]</color>:\u4E0A\u4E0B\u8DF3\u697C\u5C42(\u9700\u9053\u5177)
<color=white>[Select]</color>:\u8FD4\u56DE\u6807\u9898 <color=white>[Start]</color>:\u4FDD\u5B58\u6E38\u620F "
m_Text: "<color=white>[\u5341\u5B57\u952E][\u6447\u6746]</color>:\u79FB\u52A8 <color=white>[A]</color>:\u786E\u8BA4\u5BF9\u8BDD
<color=white>[X][B]</color>:\u4E0A\u4E0B\u8DF3\u697C\u5C42(\u9700\u9053\u5177)
<color=white>[-]</color>:\u8FD4\u56DE\u6807\u9898 <color=white>[+]</color>:\u4FDD\u5B58\u6E38\u620F "
--- !u!1 &1443027439322606
GameObject:
m_ObjectHideFlags: 0
@ -3645,11 +3645,11 @@ RectTransform:
m_Father: {fileID: 224239707051943026}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -1.5747986, y: 622.242}
m_SizeDelta: {x: -37.1494, y: -1298.4841}
m_Pivot: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -20.149536, y: -15}
m_SizeDelta: {x: -37.1494, y: 82.8664}
m_Pivot: {x: 1, y: 1}
--- !u!222 &222099758658837976
CanvasRenderer:
m_ObjectHideFlags: 0
@ -3803,7 +3803,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0.00004386902, y: 0}
m_AnchoredPosition: {x: -0.000009536743, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &114241645709714102
@ -3961,7 +3961,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: -156}
m_AnchoredPosition: {x: 0, y: -7}
m_SizeDelta: {x: 160, y: 53.7}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &222329683215649740
@ -4041,10 +4041,10 @@ RectTransform:
m_Father: {fileID: 224767781100948698}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 4.396179, y: -278.08807}
m_SizeDelta: {x: -33.1925, y: -590.3903}
m_AnchoredPosition: {x: 4.396179, y: -471.12637}
m_SizeDelta: {x: -33.1925, y: 453.3941}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222968298845692064
CanvasRenderer:
@ -4119,7 +4119,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 42.5, y: -66}
m_AnchoredPosition: {x: 42.5, y: -38.000015}
m_SizeDelta: {x: 160, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222616878469875272
@ -4152,10 +4152,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 38
m_FontSize: 26
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
@ -4199,7 +4199,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 42.5, y: -31}
m_AnchoredPosition: {x: 42.5, y: -5.000084}
m_SizeDelta: {x: 160, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222123313210307748
@ -4232,10 +4232,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 38
m_FontSize: 26
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
@ -4279,7 +4279,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 42.5, y: -101}
m_AnchoredPosition: {x: 42.5, y: -78}
m_SizeDelta: {x: 160, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222645637640250440
@ -4312,10 +4312,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 38
m_FontSize: 26
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
@ -4359,7 +4359,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -56.399902, y: 48}
m_AnchoredPosition: {x: -56.399902, y: 44}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222215329024549096
@ -4419,7 +4419,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224240828960227316
RectTransform:
m_ObjectHideFlags: 0
@ -4429,7 +4429,7 @@ RectTransform:
m_GameObject: {fileID: 1540643717999602}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.6, y: 0.6, z: 0.6}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 224485852410177924}
@ -4438,7 +4438,7 @@ RectTransform:
m_AnchorMin: {x: 1, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 320, y: 0}
m_SizeDelta: {x: 320, y: 10}
m_Pivot: {x: 1, y: 1}
--- !u!222 &222235202244494876
CanvasRenderer:
@ -4553,7 +4553,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -0.60003, y: 1.1}
m_AnchoredPosition: {x: -0.6000366, y: 1.0999756}
m_SizeDelta: {x: 373.0972, y: 114.8849}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222672519375940828
@ -4586,7 +4586,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 81
m_FontSize: 46
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
@ -4713,8 +4713,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 75.88139, y: -158.82074}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: 75.88139, y: -91.82074}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222510509021520708
CanvasRenderer:
@ -4746,10 +4746,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -4869,7 +4869,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -57, y: -101}
m_AnchoredPosition: {x: -57, y: -78.00003}
m_SizeDelta: {x: 160, y: 60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222722721329120544
@ -4902,7 +4902,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 38
m_FontSize: 26
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
@ -5163,7 +5163,7 @@ RectTransform:
- {fileID: 224900994433759770}
- {fileID: 224923772708159588}
m_Father: {fileID: 0}
m_RootOrder: 0
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
@ -5339,7 +5339,7 @@ RectTransform:
m_GameObject: {fileID: 1636160141988776}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 2, y: 2, z: 1}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 224299498719774880}
@ -5347,7 +5347,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 169}
m_AnchoredPosition: {x: -0.12294, y: 119}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222695908601464316
@ -5423,7 +5423,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -55.99991, y: -77}
m_AnchoredPosition: {x: -55.99991, y: -46}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222427330426035814
@ -5499,7 +5499,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: -4.25, y: -29.025}
m_AnchoredPosition: {x: 0, y: 0.000015258789}
m_SizeDelta: {x: 200.9, y: 58.05}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &222850673357758820
@ -5532,7 +5532,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 45
m_FontSize: 36
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
@ -5701,7 +5701,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 42.5, y: 48}
m_AnchoredPosition: {x: 42.5, y: 44}
m_SizeDelta: {x: 115, y: 70}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222996152402330024
@ -5781,8 +5781,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 75.88139, y: -99.38226}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: 75.88139, y: -32.382263}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222256394881784524
CanvasRenderer:
@ -5814,10 +5814,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -5853,7 +5853,7 @@ RectTransform:
m_GameObject: {fileID: 1702416023443698}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.75, y: 0.75, z: 0.75}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224583999968006936}
@ -5865,7 +5865,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 500, y: 361.90002}
m_SizeDelta: {x: 280, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!222 &222170197718255370
CanvasRenderer:
@ -5940,8 +5940,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -69.00002, y: -93.43844}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: -69.00002, y: -26.438438}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222452355674121162
CanvasRenderer:
@ -5973,10 +5973,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -6401,9 +6401,9 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: -325, y: -170.00006}
m_AnchoredPosition: {x: 0, y: -170.00002}
m_SizeDelta: {x: 630, y: 0}
m_Pivot: {x: 0.5, y: 1}
m_Pivot: {x: 1, y: 1}
--- !u!222 &222073466826234598
CanvasRenderer:
m_ObjectHideFlags: 0
@ -6539,7 +6539,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u6309[O]\u952E\u7EE7\u7EED\u2026\u2026"
m_Text: "\u6309[A]\u952E\u7EE7\u7EED\u2026\u2026"
--- !u!1 &1767772772326034
GameObject:
m_ObjectHideFlags: 0
@ -6574,7 +6574,7 @@ RectTransform:
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
@ -6695,10 +6695,10 @@ RectTransform:
m_Father: {fileID: 224767781100948698}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 4.396179, y: 482.04846}
m_SizeDelta: {x: -33.1925, y: -1015.1968}
m_AnchoredPosition: {x: 4.396179, y: -129.8479}
m_SizeDelta: {x: -33.1925, y: 208.5957}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222677081851525976
CanvasRenderer:
@ -6792,7 +6792,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224868547678790928
RectTransform:
m_ObjectHideFlags: 0
@ -6802,7 +6802,7 @@ RectTransform:
m_GameObject: {fileID: 1833386471943342}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224808756472498070}
@ -6922,7 +6922,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 81
m_FontSize: 46
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
@ -6951,7 +6951,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &224610035285452082
RectTransform:
m_ObjectHideFlags: 0
@ -6961,7 +6961,7 @@ RectTransform:
m_GameObject: {fileID: 1850144160971538}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224350475403138366}
@ -7049,7 +7049,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 66, y: 87}
m_AnchoredPosition: {x: 26, y: 30}
m_SizeDelta: {x: 182.6223, y: 95.5856}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222067840810952986
@ -7295,7 +7295,7 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 114647416383406442}
m_HandleRect: {fileID: 0}
m_Direction: 0
m_Value: 1
m_Value: 0
m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
@ -7336,8 +7336,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -69.000046, y: -212.3156}
m_SizeDelta: {x: 237.7542, y: 89.1578}
m_AnchoredPosition: {x: -69.000046, y: -145.3156}
m_SizeDelta: {x: 107.7, y: 36.6}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &222037824791279712
CanvasRenderer:
@ -7369,10 +7369,10 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 7c2f40dc9df6f9f46a173bb4254e13d6, type: 3}
m_FontSize: 53
m_FontSize: 35
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MinSize: 2
m_MaxSize: 70
m_Alignment: 4
m_AlignByGeometry: 0
@ -7417,9 +7417,9 @@ RectTransform:
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 20}
m_SizeDelta: {x: 3, y: 20}
m_Pivot: {x: 0, y: 0}
--- !u!222 &222489344654304662
CanvasRenderer:
@ -7973,7 +7973,7 @@ RectTransform:
m_GameObject: {fileID: 1950172798394216}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 224994753297535010}

View File

@ -178,449 +178,103 @@ PrefabInstance:
m_Modifications:
- target: {fileID: 1324954596340382, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1384417688741412, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1415688944016792, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1421527332497682, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1468129329204906, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1540643717999602, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1630868967767418, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Name
value: MainCanvas
objectReference: {fileID: 0}
- target: {fileID: 1833386471943342, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1835352083401536, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1850144160971538, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1950172798394216, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 114003415257903934, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Text
value: 132132164984984
objectReference: {fileID: 0}
- target: {fileID: 114008412063749700, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 46
objectReference: {fileID: 0}
- target: {fileID: 114010449903197594, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 26
objectReference: {fileID: 0}
- target: {fileID: 114121326018304850, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 26
objectReference: {fileID: 0}
- target: {fileID: 114230148202130508, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114230148202130508, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114247647144911794, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 114109582146003646, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Value
value: 1
objectReference: {fileID: 0}
- target: {fileID: 114269258129075742, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114269258129075742, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 26
objectReference: {fileID: 0}
- target: {fileID: 114393590956076698, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 36
objectReference: {fileID: 0}
- target: {fileID: 114425502013754438, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114425502013754438, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114498179817450676, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 26
objectReference: {fileID: 0}
- target: {fileID: 114501537216246686, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Text
value: "\u6309[A]\u952E\u7EE7\u7EED\u2026\u2026"
objectReference: {fileID: 0}
- target: {fileID: 114512342701059070, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114512342701059070, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114638877941946522, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114638877941946522, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114642372933621108, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114642372933621108, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 26
objectReference: {fileID: 0}
- target: {fileID: 114662890989757144, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114662890989757144, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114684993793501986, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114684993793501986, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114707682254886598, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114707682254886598, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 114733818706879080, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 46
objectReference: {fileID: 0}
- target: {fileID: 114746749337491458, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Text
value: "<color=white>[\u5341\u5B57\u952E][\u6447\u6746]</color>:\u79FB\u52A8
<color=white>[A]</color>:\u786E\u8BA4\u5BF9\u8BDD <color=white>[X][B]</color>:\u4E0A\u4E0B\u8DF3\u697C\u5C42(\u9700\u9053\u5177)
<color=white>[-]</color>:\u8FD4\u56DE\u6807\u9898 <color=white>[+]</color>:\u4FDD\u5B58\u6E38\u620F "
objectReference: {fileID: 0}
- target: {fileID: 114746749337491458, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontStyle
- target: {fileID: 114148425880819326, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Value
value: 1
objectReference: {fileID: 0}
- target: {fileID: 114771032268230030, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114771032268230030, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 26
objectReference: {fileID: 0}
- target: {fileID: 114844085825273108, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_MinSize
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114844085825273108, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_FontData.m_FontSize
value: 35
objectReference: {fileID: 0}
- target: {fileID: 224028701768436306, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 44
objectReference: {fileID: 0}
- target: {fileID: 224052539335019180, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 64
objectReference: {fileID: 0}
- target: {fileID: 224052539335019180, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 64
objectReference: {fileID: 0}
- target: {fileID: 224052539335019180, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -74
objectReference: {fileID: 0}
- target: {fileID: 224052539335019180, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 30
objectReference: {fileID: 0}
- target: {fileID: 224059840260938382, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -46
objectReference: {fileID: 0}
- target: {fileID: 224129377546388892, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224129377546388892, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224129377546388892, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -145.3156
- target: {fileID: 114231573937057624, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_HorizontalFit
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224166567821752852, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224167142610394954, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224167142610394954, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 3
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224182237385058504, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: -17
objectReference: {fileID: 0}
- target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 193.7351
objectReference: {fileID: 0}
- target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -1.5748291
objectReference: {fileID: 0}
- target: {fileID: 224184269574036734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -588.8003
objectReference: {fileID: 0}
- target: {fileID: 224234167858584352, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 42.5
objectReference: {fileID: 0}
- target: {fileID: 224234167858584352, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -78
objectReference: {fileID: 0}
- target: {fileID: 224239707051943026, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 280
objectReference: {fileID: 0}
- target: {fileID: 224239707051943026, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224239707051943026, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224239707051943026, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224239707051943026, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 10
objectReference: {fileID: 0}
- target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224240828960227316, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224279604976194212, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224279604976194212, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224279604976194212, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -91.82074
objectReference: {fileID: 0}
- target: {fileID: 224290849251543512, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -57
objectReference: {fileID: 0}
- target: {fileID: 224290849251543512, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -78.00003
objectReference: {fileID: 0}
- target: {fileID: 224298495441634700, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 1.1000366
objectReference: {fileID: 0}
- target: {fileID: 224299498719774880, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224299498719774880, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 368.1092
objectReference: {fileID: 0}
- target: {fileID: 224299498719774880, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224299498719774880, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -291.14453
objectReference: {fileID: 0}
- target: {fileID: 224318951553936990, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -0.6000366
objectReference: {fileID: 0}
- target: {fileID: 224318951553936990, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 1.0999756
objectReference: {fileID: 0}
- target: {fileID: 224345730297743896, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 99.399
objectReference: {fileID: 0}
- target: {fileID: 224345730297743896, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 49.699
objectReference: {fileID: 0}
- target: {fileID: 224345730297743896, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 75.3
objectReference: {fileID: 0}
- target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224346916716703500, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224349029260223910, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -7
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224357857602523278, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 3
objectReference: {fileID: 0}
- target: {fileID: 224358412801408058, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224358412801408058, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224358412801408058, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224390106616507734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224390106616507734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224390106616507734, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -85.877045
objectReference: {fileID: 0}
- target: {fileID: 224399876108581498, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -46
objectReference: {fileID: 0}
- target: {fileID: 224481471501913802, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224481471501913802, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0.000015258789
objectReference: {fileID: 0}
- target: {fileID: 224484957882293838, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224484957882293838, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224485823987763388, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 99.399
objectReference: {fileID: 0}
- target: {fileID: 224485823987763388, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 49.699
objectReference: {fileID: 0}
- target: {fileID: 224485823987763388, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -7.4
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224485852410177924, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Pivot.x
@ -706,314 +360,89 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224492156668722244, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -57
objectReference: {fileID: 0}
- target: {fileID: 224492156668722244, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -38
objectReference: {fileID: 0}
- target: {fileID: 224508551882378866, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224508551882378866, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224508551882378866, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 33
objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: -17
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224554864779530492, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: -17
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224557348716555878, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y
value: 1
- target: {fileID: 224635952851420842, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224557348716555878, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 453.3941
objectReference: {fileID: 0}
- target: {fileID: 224557348716555878, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 224635952851420842, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -471.12637
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224567887494783104, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
- target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224567887494783104, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224567887494783104, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 27.05626
- target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Pivot.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_Pivot.y
value: 1
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: -37.1494
value: 631
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 82.8664
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -20.149536
objectReference: {fileID: 0}
- target: {fileID: 224583999968006936, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -15
objectReference: {fileID: 0}
- target: {fileID: 224610035285452082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224610035285452082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224610035285452082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224637299749416518, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 44
objectReference: {fileID: 0}
- target: {fileID: 224644087938703276, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 42.5
objectReference: {fileID: 0}
- target: {fileID: 224644087938703276, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -38.000015
objectReference: {fileID: 0}
- target: {fileID: 224645578938524194, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -5.000084
objectReference: {fileID: 0}
- target: {fileID: 224669605026362836, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224669605026362836, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224669605026362836, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -32.382263
objectReference: {fileID: 0}
- target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224674625992951200, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: -17
objectReference: {fileID: 0}
- target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224717561306693260, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: -17
objectReference: {fileID: 0}
- target: {fileID: 224743413962790258, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224743413962790258, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224743413962790258, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -151.2593
objectReference: {fileID: 0}
- target: {fileID: 224767781100948698, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 280
objectReference: {fileID: 0}
- target: {fileID: 224767781100948698, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224767781100948698, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224767781100948698, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224767781100948698, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 30
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224779545611503972, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -170.0001
objectReference: {fileID: 0}
- target: {fileID: 224780286526567530, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224780286526567530, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224780286526567530, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224783682016277658, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: 107.7
objectReference: {fileID: 0}
- target: {fileID: 224783682016277658, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 36.6
objectReference: {fileID: 0}
- target: {fileID: 224783682016277658, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -26.438438
objectReference: {fileID: 0}
- target: {fileID: 224844084699342872, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -5
objectReference: {fileID: 0}
- target: {fileID: 224868547678790928, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224868547678790928, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224868547678790928, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224885472704193994, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 59.7307
objectReference: {fileID: 0}
- target: {fileID: 224900994433759770, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224900994433759770, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224900994433759770, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224923772708159588, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224923772708159588, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224923772708159588, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.z
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224936226206981256, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224936226206981256, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_LocalScale.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224936226206981256, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -0.12294
objectReference: {fileID: 0}
- target: {fileID: 224936226206981256, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 119
objectReference: {fileID: 0}
- target: {fileID: 224940156073756706, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: 26
objectReference: {fileID: 0}
- target: {fileID: 224940156073756706, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: 30
objectReference: {fileID: 0}
- target: {fileID: 224965823879777082, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.x
value: -0.000009536743
objectReference: {fileID: 0}
- target: {fileID: 224980480561340686, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224980480561340686, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.y
value: 208.5957
objectReference: {fileID: 0}
- target: {fileID: 224980480561340686, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchoredPosition.y
value: -129.8479
value: -0.000061035156
objectReference: {fileID: 0}
- target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_AnchorMax.x
value: 1
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224999961568001832, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
propertyPath: m_SizeDelta.x
value: -17
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 1826089602461288, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
insertIndex: -1
addedObject: {fileID: 2089978718}
m_SourcePrefab: {fileID: 100100000, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
--- !u!82 &1701715073
AudioSource:
@ -1156,6 +585,25 @@ PrefabInstance:
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6f74297a315f9614b9035d703d20ba63, type: 3}
--- !u!1 &2089978716 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1826089602461288, guid: eb881dc82c2856d4ea4d3a831ade675a, type: 3}
m_PrefabInstance: {fileID: 1594222359}
m_PrefabAsset: {fileID: 0}
--- !u!114 &2089978718
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2089978716}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!82 &1449281395300916468
AudioSource:
m_ObjectHideFlags: 0

View File

@ -1,4 +1,6 @@
#if UNITY_SWITCH
using nn.account;
#endif
public class AxiNS
{
@ -28,8 +30,10 @@ public class AxiNS
/// </summary>
public void Init()
{
#if UNITY_SWITCH
if (!user.GetUserID(out Uid uid))
return;
mount.MountSave(uid);
#endif
}
}

View File

@ -1,13 +1,13 @@
public static class AxiNSErrCode
{
#if UNITY_SWITCH
public static string GetErrorInfo(this nn.Result result)
{
if (result.IsSuccess())
return "NoErr";
return GetErrorDetails(result.GetModule(), result.GetDescription());
}
#endif
/// <summary>
/// 根据模块 ID 和描述 ID 返回任天堂 Switch 错误码的含义、可能原因及解决办法。
/// </summary>

View File

@ -1,142 +1,89 @@
#if UNITY_SWITCH
using nn.fs;
using System.Security.Cryptography;
#endif
public class AxiNSIO
{
string save_name => AxiNS.instance.mount.SaveMountName;
public string save_path => $"{save_name}:/";
string save_name => AxiNS.instance.mount.SaveMountName;
public string save_path => $"{save_name}:/";
#if UNITY_SWITCH
private FileHandle fileHandle = new nn.fs.FileHandle();
bool CheckPathExists(string filePath)
{
nn.fs.EntryType entryType = 0;
#endif
/// <summary>
/// 检查Path是否存在
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public bool CheckPathExists(string filePath)
{
#if !UNITY_SWITCH
return false;
#else
nn.fs.EntryType entryType = 0;
nn.Result result = nn.fs.FileSystem.GetEntryType(ref entryType, filePath);
//result.abortUnlessSuccess();
//这个异常捕获。真的别扭
return nn.fs.FileSystem.ResultPathAlreadyExists.Includes(result);
}
public bool CheckPathNotFound(string filePath)
{
nn.fs.EntryType entryType = 0;
#endif
}
/// <summary>
/// 检查Path是否不存在
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public bool CheckPathNotFound(string filePath)
{
#if !UNITY_SWITCH
return false;
#else
nn.fs.EntryType entryType = 0;
nn.Result result = nn.fs.FileSystem.GetEntryType(ref entryType, filePath);
//这个异常捕获。真的别扭
return nn.fs.FileSystem.ResultPathNotFound.Includes(result);
}
bool EnsureParentDirectory(string filePath, bool bAutoCreateDir = true)
{
// 参数校验
if (string.IsNullOrEmpty(filePath))
{
UnityEngine.Debug.LogError($"无效参数filePath={filePath}");
return false;
}
// 提取路径前缀(如 save:/、sd:/
int prefixEndIndex = filePath.IndexOf(":/");
if (prefixEndIndex == -1)
{
UnityEngine.Debug.LogError($"文件路径 {filePath} 格式无效,未找到 ':/' 前缀");
return false;
}
string pathPrefix = filePath.Substring(0, prefixEndIndex + 2); // 提取前缀,例如 "save:/"
string relativePath = filePath.Substring(prefixEndIndex + 2); // 移除前缀,得到相对路径
// 检查挂载状态
if (!IsMountPointAccessible(pathPrefix))
{
UnityEngine.Debug.LogError($"挂载点 {pathPrefix} 未挂载,无法操作路径 {filePath}");
return false;
}
// 提取父目录路径
string directoryPath = System.IO.Path.GetDirectoryName(relativePath); // 获取父目录相对路径
if (string.IsNullOrEmpty(directoryPath))
{
UnityEngine.Debug.Log($"文件路径 {filePath} 无需创建父目录(位于根目录)");
return true; // 根目录无需创建
}
string fullDirectoryPath = $"{pathPrefix}{directoryPath}"; // 拼接完整父目录路径
UnityEngine.Debug.Log($"检查父目录: {fullDirectoryPath}");
// 检查路径是否存在及其类型
nn.fs.EntryType entryType = 0;
nn.Result result = nn.fs.FileSystem.GetEntryType(ref entryType, fullDirectoryPath);
if (!result.IsSuccess() && nn.fs.FileSystem.ResultPathNotFound.Includes(result))
{
if (bAutoCreateDir)
{
// 路径不存在,尝试创建
UnityEngine.Debug.Log($"父目录 {fullDirectoryPath} 不存在,尝试创建 (判断依据 result=>{result.ToString()})");
result = nn.fs.Directory.Create(fullDirectoryPath);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"创建父目录失败: {result.GetErrorInfo()}");
return false;
}
UnityEngine.Debug.Log($"父目录 {fullDirectoryPath} 创建成功");
return true;
}
return false;
}
else if (result.IsSuccess() && entryType != nn.fs.EntryType.Directory)
{
// 路径存在,但不是目录
UnityEngine.Debug.LogError($"路径 {fullDirectoryPath} 已存在,但不是目录");
return false;
}
else if (!result.IsSuccess())
{
// 其他错误
UnityEngine.Debug.LogError($"检查父目录失败: {result.GetErrorInfo()}");
return false;
}
// 路径存在且是目录
UnityEngine.Debug.Log($"父目录 {fullDirectoryPath} 已存在且有效");
#endif
}
/// <summary>
/// 创建目录目录存在也会返回true
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public bool CreateDir(string filePath)
{
#if !UNITY_SWITCH
return false;
#else
// 使用封装函数检查和创建父目录
if (!EnsureParentDirectory(filePath, true))
{
UnityEngine.Debug.LogError($"无法确保父目录,文件写入取消: {filePath}");
return false;
}
return true;
}
/// <summary>
/// 检查指定挂载点是否可访问
/// </summary>
/// <param name="pathPrefix">路径前缀,例如 "save:/" 或 "sd:/"</param>
/// <returns>挂载点是否可访问</returns>
bool IsMountPointAccessible(string pathPrefix)
{
if (string.IsNullOrEmpty(pathPrefix))
{
UnityEngine.Debug.LogError($"无效挂载点: {pathPrefix}");
return false;
}
// 根据前缀判断挂载点类型并检查挂载状态
if (pathPrefix == $"{save_name}:/")
{
if (!AxiNS.instance.mount.SaveIsMount)
{
UnityEngine.Debug.LogError($"{save_name}:/ 未挂载");
return false;
}
return true;
}
else if (pathPrefix == "sd:/")
{
long freeSpace = 0;
// 检查 SD 卡挂载状态(示例,需根据实际实现调整)
nn.Result result = nn.fs.FileSystem.GetFreeSpaceSize(ref freeSpace, "sd:/");
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"sd:/ 未挂载或无法访问: {result.GetErrorInfo()}");
return false;
}
return true;
}
else
{
UnityEngine.Debug.LogWarning($"未知挂载点 {pathPrefix},假定已挂载");
return true; // 其他挂载点需根据实际需求实现
}
}
public bool CreateFileToSave(string filePath, byte[] data)
{
#endif
}
/// <summary>
/// 保存并创建文件(如果目录不存在回先自动创建目录)
/// </summary>
/// <param name="filePath"></param>
/// <param name="bw"></param>
/// <returns></returns>
public bool FileToSaveWithCreate(string filePath, System.IO.MemoryStream ms)
{
return FileToSaveWithCreate(filePath, ms.ToArray());
}
/// <summary>
/// 保存并创建文件(如果目录不存在回先自动创建目录)
/// </summary>
/// <param name="filePath"></param>
/// <param name="data"></param>
/// <returns></returns>
public bool FileToSaveWithCreate(string filePath, byte[] data)
{
#if !UNITY_SWITCH
return false;
#else
if (!AxiNS.instance.mount.SaveIsMount)
{
UnityEngine.Debug.LogError($"Save 尚未挂载,无法存储 {filePath}");
@ -236,9 +183,26 @@ public class AxiNSIO
#endif
return true;
}
public bool LoadSwitchDataFile(string filename, out byte[] outputData)
{
#endif
}
public bool LoadSwitchDataFile(string filename, ref System.IO.MemoryStream ms)
{
if (LoadSwitchDataFile(filename, out byte[] outputData))
{
using (System.IO.BinaryWriter writer = new System.IO.BinaryWriter(ms))
{
writer.Write(outputData);
}
return true;
}
return false;
}
public bool LoadSwitchDataFile(string filename, out byte[] outputData)
{
#if !UNITY_SWITCH
outputData = null;
return false;
#else
outputData = null;
if (!AxiNS.instance.mount.SaveIsMount)
{
@ -284,5 +248,321 @@ public class AxiNSIO
outputData = loadedData;
return true;
#endif
}
public bool DeletePathFile(string filename)
{
#if !UNITY_SWITCH
return false;
#else
#if UNITY_SWITCH && !UNITY_EDITOR
// This next line prevents the user from quitting the game while saving.
// This is required for Nintendo Switch Guideline 0080
UnityEngine.Switch.Notification.EnterExitRequestHandlingSection();
#endif
if (CheckPathNotFound(filename))
return false;
nn.Result result;
result = nn.fs.File.Delete(filename);
if (result.IsSuccess() == false)
{
UnityEngine.Debug.LogError($"nn.fs.File.Delete 失败 {filename} : result=>{result.GetErrorInfo()}");
return false;
}
result = nn.fs.FileSystem.Commit(save_name);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"FileSystem.Commit({save_name}) 失败: " + result.GetErrorInfo());
return false;
}
return true;
#if UNITY_SWITCH && !UNITY_EDITOR
// End preventing the user from quitting the game while saving.
UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection();
#endif
#endif
}
public bool DeletePathDir(string filename)
{
#if !UNITY_SWITCH
return false;
#else
#if UNITY_SWITCH && !UNITY_EDITOR
// This next line prevents the user from quitting the game while saving.
// This is required for Nintendo Switch Guideline 0080
UnityEngine.Switch.Notification.EnterExitRequestHandlingSection();
#endif
if (CheckPathNotFound(filename))
return false;
nn.Result result;
result = nn.fs.Directory.Delete(filename);
if (result.IsSuccess() == false)
{
UnityEngine.Debug.LogError($"nn.fs.File.Delete 失败 {filename} : result=>{result.GetErrorInfo()}");
return false;
}
result = nn.fs.FileSystem.Commit(save_name);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"FileSystem.Commit({save_name}) 失败: " + result.GetErrorInfo());
return false;
}
return true;
#if UNITY_SWITCH && !UNITY_EDITOR
// End preventing the user from quitting the game while saving.
UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection();
#endif
#endif
}
/// <summary>
/// 递归删除目录
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public bool DeleteRecursivelyPathDir(string filename)
{
#if !UNITY_SWITCH
return false;
#else
#if UNITY_SWITCH && !UNITY_EDITOR
// This next line prevents the user from quitting the game while saving.
// This is required for Nintendo Switch Guideline 0080
UnityEngine.Switch.Notification.EnterExitRequestHandlingSection();
#endif
if (CheckPathNotFound(filename))
return false;
nn.Result result;
result = nn.fs.Directory.DeleteRecursively(filename);
if (result.IsSuccess() == false)
{
UnityEngine.Debug.LogError($"nn.fs.File.DeleteRecursively 失败 {filename} : result=>{result.GetErrorInfo()}");
return false;
}
result = nn.fs.FileSystem.Commit(save_name);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"FileSystem.Commit({save_name}) 失败: " + result.GetErrorInfo());
return false;
}
return true;
#if UNITY_SWITCH && !UNITY_EDITOR
// End preventing the user from quitting the game while saving.
UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection();
#endif
#endif
}
/// <summary>
/// 递归删除情况
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public bool CleanRecursivelyPathDir(string filename)
{
#if !UNITY_SWITCH
return false;
#else
#if UNITY_SWITCH && !UNITY_EDITOR
// This next line prevents the user from quitting the game while saving.
// This is required for Nintendo Switch Guideline 0080
UnityEngine.Switch.Notification.EnterExitRequestHandlingSection();
#endif
if (CheckPathNotFound(filename))
return false;
nn.Result result;
result = nn.fs.Directory.CleanRecursively(filename);
if (result.IsSuccess() == false)
{
UnityEngine.Debug.LogError($"nn.fs.File.DeleteRecursively 失败 {filename} : result=>{result.GetErrorInfo()}");
return false;
}
result = nn.fs.FileSystem.Commit(save_name);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"FileSystem.Commit({save_name}) 失败: " + result.GetErrorInfo());
return false;
}
return true;
#if UNITY_SWITCH && !UNITY_EDITOR
// End preventing the user from quitting the game while saving.
UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection();
#endif
#endif
}
public bool RenameDir(string oldpath,string newpath)
{
#if !UNITY_SWITCH
return false;
#else
#if UNITY_SWITCH && !UNITY_EDITOR
// This next line prevents the user from quitting the game while saving.
// This is required for Nintendo Switch Guideline 0080
UnityEngine.Switch.Notification.EnterExitRequestHandlingSection();
#endif
if (CheckPathNotFound(oldpath))
return false;
nn.Result result;
result = nn.fs.Directory.Rename(oldpath, newpath);
if (result.IsSuccess() == false)
{
UnityEngine.Debug.LogError($"nn.fs.File.Rename 失败 {oldpath} to {newpath} : result=>{result.GetErrorInfo()}");
return false;
}
result = nn.fs.FileSystem.Commit(save_name);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"FileSystem.Commit({save_name}) 失败: " + result.GetErrorInfo());
return false;
}
return true;
#if UNITY_SWITCH && !UNITY_EDITOR
// End preventing the user from quitting the game while saving.
UnityEngine.Switch.Notification.LeaveExitRequestHandlingSection();
#endif
#endif
}
bool EnsureParentDirectory(string filePath, bool bAutoCreateDir = true)
{
#if !UNITY_SWITCH
return false;
#else
// 参数校验
if (string.IsNullOrEmpty(filePath))
{
UnityEngine.Debug.LogError($"无效参数filePath={filePath}");
return false;
}
// 提取路径前缀(如 save:/、sd:/
int prefixEndIndex = filePath.IndexOf(":/");
if (prefixEndIndex == -1)
{
UnityEngine.Debug.LogError($"文件路径 {filePath} 格式无效,未找到 ':/' 前缀");
return false;
}
string pathPrefix = filePath.Substring(0, prefixEndIndex + 2); // 提取前缀,例如 "save:/"
string relativePath = filePath.Substring(prefixEndIndex + 2); // 移除前缀,得到相对路径
// 检查挂载状态
if (!IsMountPointAccessible(pathPrefix))
{
UnityEngine.Debug.LogError($"挂载点 {pathPrefix} 未挂载,无法操作路径 {filePath}");
return false;
}
// 提取父目录路径
string directoryPath = System.IO.Path.GetDirectoryName(relativePath); // 获取父目录相对路径
if (string.IsNullOrEmpty(directoryPath))
{
UnityEngine.Debug.Log($"文件路径 {filePath} 无需创建父目录(位于根目录)");
return true; // 根目录无需创建
}
string fullDirectoryPath = $"{pathPrefix}{directoryPath}"; // 拼接完整父目录路径
UnityEngine.Debug.Log($"检查父目录: {fullDirectoryPath}");
// 检查路径是否存在及其类型
nn.fs.EntryType entryType = 0;
nn.Result result = nn.fs.FileSystem.GetEntryType(ref entryType, fullDirectoryPath);
if (!result.IsSuccess() && nn.fs.FileSystem.ResultPathNotFound.Includes(result))
{
if (bAutoCreateDir)
{
// 路径不存在,尝试创建
UnityEngine.Debug.Log($"父目录 {fullDirectoryPath} 不存在,尝试创建 (判断依据 result=>{result.ToString()})");
result = nn.fs.Directory.Create(fullDirectoryPath);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"创建父目录失败: {result.GetErrorInfo()}");
return false;
}
UnityEngine.Debug.Log($"父目录 {fullDirectoryPath} 创建成功");
return true;
}
return false;
}
else if (result.IsSuccess() && entryType != nn.fs.EntryType.Directory)
{
// 路径存在,但不是目录
UnityEngine.Debug.LogError($"路径 {fullDirectoryPath} 已存在,但不是目录");
return false;
}
else if (!result.IsSuccess())
{
// 其他错误
UnityEngine.Debug.LogError($"检查父目录失败: {result.GetErrorInfo()}");
return false;
}
// 路径存在且是目录
UnityEngine.Debug.Log($"父目录 {fullDirectoryPath} 已存在且有效");
return true;
#endif
}
/// <summary>
/// 检查指定挂载点是否可访问
/// </summary>
/// <param name="pathPrefix">路径前缀,例如 "save:/" 或 "sd:/"</param>
/// <returns>挂载点是否可访问</returns>
bool IsMountPointAccessible(string pathPrefix)
{
#if !UNITY_SWITCH
return false;
#else
if (string.IsNullOrEmpty(pathPrefix))
{
UnityEngine.Debug.LogError($"无效挂载点: {pathPrefix}");
return false;
}
// 根据前缀判断挂载点类型并检查挂载状态
if (pathPrefix == $"{save_name}:/")
{
if (!AxiNS.instance.mount.SaveIsMount)
{
UnityEngine.Debug.LogError($"{save_name}:/ 未挂载");
return false;
}
return true;
}
else if (pathPrefix == "sd:/")
{
long freeSpace = 0;
// 检查 SD 卡挂载状态(示例,需根据实际实现调整)
nn.Result result = nn.fs.FileSystem.GetFreeSpaceSize(ref freeSpace, "sd:/");
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"sd:/ 未挂载或无法访问: {result.GetErrorInfo()}");
return false;
}
return true;
}
else
{
UnityEngine.Debug.LogWarning($"未知挂载点 {pathPrefix},假定已挂载");
return true; // 其他挂载点需根据实际需求实现
}
#endif
}
}

View File

@ -1,25 +1,28 @@
#if UNITY_SWITCH
using nn.account;
#endif
public class AxiNSMount
{
static bool bInMount = false;
internal static string m_SaveMountName;
static bool bInMountForDebug = false;
internal static string m_SaveMountForDebugName;
static bool bInMount = false;
internal static string m_SaveMountName;
static bool bInSdCardMount = false;
internal static string m_SdCardMountName;
static bool bInSdCardDebugMount = false;
internal static string m_SdCardDebugMountName;
public bool SaveIsMount => bInMount;
public string SaveMountName
{
get
{
if (!bInMount)
return string.Empty;
else
return m_SaveMountName;
}
}
public string SaveMountName
{
get
{
if (!bInMount)
return string.Empty;
else
return m_SaveMountName;
}
}
#if UNITY_SWITCH
public bool MountSave(Uid userId, string mountName = "save")
{
if (bInMount)
@ -46,67 +49,86 @@ public class AxiNSMount
bInMount = true;
return true;
}
#endif
public bool MountSDForDebug(string mountName = "sd")
{
if (bInMountForDebug)
return true;
nn.Result result;
result = nn.fs.SdCard.MountForDebug(mountName);
//result.abortUnlessSuccess();
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"nn_fs_MountSdCardForDebug->挂载{mountName}:/ 失败: " + result.ToString());
return false;
}
UnityEngine.Debug.Log($"nn_fs_MountSdCardForDebug->挂载{mountName}:/ 成功 ");
m_SaveMountForDebugName = mountName;
bInMountForDebug = true;
return true;
public bool MountSDForDebug(string mountName = "dbgsd")
{
#if !UNITY_SWITCH
return false;
#else
if (bInSdCardDebugMount)
return true;
nn.Result result;
result = nn.fs.SdCard.MountForDebug(mountName);
//result.abortUnlessSuccess();
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"nn_fs_MountSdCardForDebug->挂载{mountName}:/ 失败: " + result.ToString());
return false;
}
UnityEngine.Debug.Log($"nn_fs_MountSdCardForDebug->挂载{mountName}:/ 成功 ");
m_SdCardDebugMountName = mountName;
bInSdCardDebugMount = true;
return true;
#endif
}
public bool MountSD(string mountName = "sd")
{
#if !UNITY_SWITCH
return false;
#else
if (bInSdCardMount)
return true;
nn.Result result;
result = AxiNSSDCard.Mount(mountName);
if (!result.IsSuccess())
{
UnityEngine.Debug.LogError($"nn_fs_MountSdCard->挂载{mountName}:/ 失败: " + result.ToString());
return false;
}
UnityEngine.Debug.Log($"nn_fs_MountSdCard->挂载{mountName}:/ 成功 ");
m_SdCardMountName = mountName;
bInSdCardMount = true;
return true;
#endif
}
public void UnmountSave()
{
#if UNITY_SWITCH
if (!bInMount)
{
UnityEngine.Debug.LogError($"{m_SaveMountName}:/ 没有被挂载,无需卸载");
return;
}
nn.fs.FileSystem.Unmount(m_SaveMountName);
UnityEngine.Debug.LogError($"UnmountSaveForDebufa->已卸载{m_SaveMountName}:/ ");
bInMount = false;
#endif
}
public void UnmountSDCardForDebug()
{
#if UNITY_SWITCH
if (!bInSdCardDebugMount)
{
UnityEngine.Debug.LogError($"{m_SdCardDebugMountName}:/ 没有被挂载,无需卸载");
return;
}
nn.fs.FileSystem.Unmount(m_SdCardDebugMountName);
UnityEngine.Debug.LogError($"UnmountSDCardForDebug->已卸载{m_SdCardDebugMountName}:/ ");
bInSdCardDebugMount = false;
#endif
}
public bool MountSD(string mountName = "sd")
public void UnmountSDCard()
{
if (bInMountForDebug)
return true;
nn.Result result;
result = nn.fs.SdCard.Mount(mountName);
//result.abortUnlessSuccess();
if (!result.IsSuccess())
#if UNITY_SWITCH
if (!bInSdCardMount)
{
UnityEngine.Debug.LogError($"nn_fs_MountSdCard->挂载{mountName}:/ 失败: " + result.ToString());
return false;
}
UnityEngine.Debug.Log($"nn_fs_MountSdCard->挂载{mountName}:/ 成功 ");
m_SaveMountForDebugName = mountName;
bInMountForDebug = true;
return true;
}
public void UnmountSave()
{
if (!bInMount)
{
UnityEngine.Debug.LogError($"{m_SaveMountName}:/ 没有被挂载,无需卸载");
UnityEngine.Debug.LogError($"{m_SdCardMountName}:/ 没有被挂载,无需卸载");
return;
}
nn.fs.FileSystem.Unmount(m_SaveMountName);
UnityEngine.Debug.LogError($"UnmountSaveForDebufa->已卸载{m_SaveMountName}:/ ");
bInMount = false;
nn.fs.FileSystem.Unmount(m_SdCardMountName);
UnityEngine.Debug.LogError($"UnmountSDCard->已卸载{m_SdCardMountName}:/ ");
bInSdCardMount = false;
#endif
}
public void UnmountSaveForDebug()
{
if (!bInMountForDebug)
{
UnityEngine.Debug.LogError($"{m_SaveMountForDebugName}:/ 没有被挂载,无需卸载");
return;
}
nn.fs.FileSystem.Unmount(m_SaveMountForDebugName);
UnityEngine.Debug.LogError($"UnmountSaveForDebufa->已卸载{m_SaveMountForDebugName}:/ ");
bInMountForDebug = false;
}
}
}

View File

@ -0,0 +1,23 @@
#if UNITY_SWITCH
using nn.account;
#endif
public class AxiNSSDCard
{
#if UNITY_SWITCH
#if DEVELOPMENT_BUILD || NN_FS_SD_CARD_FOR_DEBUG_ENABLE
[DllImport(Nn.DllName,
CallingConvention = CallingConvention.Cdecl,
EntryPoint = "nn_fs_MountSdCard")]
public static extern nn.Result Mount(string name);
#else
public static nn.Result Mount(string name)
{
return new nn.Result();
}
#endif
#endif
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 21fa04ba4da10d74aafd65dd138478b7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +1,21 @@
#if UNITY_SWITCH
using nn.account;
#endif
public class AxiNSUser
{
bool m_bInit = false;
bool m_bGotOpenPreselectedUser = false;
#if UNITY_SWITCH
Uid m_UserId;
nn.account.UserHandle mUserHandle;
nn.account.Nickname m_NickName;
#endif
#region
#if UNITY_SWITCH
public bool GetUserID(out Uid uid)
{
InitPreselectedUserInfo();
@ -20,8 +27,13 @@ public class AxiNSUser
uid = m_UserId;
return true;
}
#endif
public bool GetNickName(out string NickName)
{
#if !UNITY_SWITCH
NickName = "";
return true;
#else
InitPreselectedUserInfo();
if (!m_bGotOpenPreselectedUser)
{
@ -30,25 +42,29 @@ public class AxiNSUser
}
NickName = m_NickName.ToString();
return true;
#endif
}
#endregion
#endregion
/// <summary>
/// 初始化Account模块儿
/// </summary>
void InitNSAccount()
{
{
#if UNITY_SWITCH
if (m_bInit)
return;
//必须先初始化NS的Account 不然调用即崩
nn.account.Account.Initialize();
m_bInit = true;
#endif
}
/// <summary>
/// 获取预选用户
/// </summary>
void InitPreselectedUserInfo()
{
{
#if UNITY_SWITCH
if (m_bGotOpenPreselectedUser)
return;
@ -85,5 +101,6 @@ public class AxiNSUser
}
UnityEngine.Debug.Log($"获取用户 NickName ID:{m_NickName.ToString()}");
m_bGotOpenPreselectedUser = true;
#endif
}
}

View File

@ -0,0 +1,9 @@
using UnityEngine;
public class ToCenter : MonoBehaviour
{
private void OnEnable()
{
this.transform.localPosition = new Vector3(0, this.transform.localPosition.y, this.transform.localPosition.z);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d3090e686e65a0840b408890a5267a41
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: