From f8e7303169f56db6089e85ee513dc36eed3d4a3d Mon Sep 17 00:00:00 2001 From: Perfare Date: Sat, 1 Apr 2017 04:28:46 +0800 Subject: [PATCH] support use asset original name when display and export --- Unity Studio/Properties/Settings.Designer.cs | 12 +++++ Unity Studio/Properties/Settings.settings | 3 ++ Unity Studio/Unity Classes/AssetBundle.cs | 52 +++++++++++++++++++ .../Unity Studio Classes/UnityStudio.cs | 18 ++++++- Unity Studio/Unity Studio.csproj | 1 + Unity Studio/UnityStudioForm.Designer.cs | 14 ++++- Unity Studio/UnityStudioForm.cs | 5 +- Unity Studio/app.config | 3 ++ 8 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 Unity Studio/Unity Classes/AssetBundle.cs diff --git a/Unity Studio/Properties/Settings.Designer.cs b/Unity Studio/Properties/Settings.Designer.cs index 30223fa..e8e1740 100644 --- a/Unity Studio/Properties/Settings.Designer.cs +++ b/Unity Studio/Properties/Settings.Designer.cs @@ -226,5 +226,17 @@ namespace Unity_Studio.Properties { this["convertType"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool displayOriginalName { + get { + return ((bool)(this["displayOriginalName"])); + } + set { + this["displayOriginalName"] = value; + } + } } } diff --git a/Unity Studio/Properties/Settings.settings b/Unity Studio/Properties/Settings.settings index e3ce73f..77ab853 100644 --- a/Unity Studio/Properties/Settings.settings +++ b/Unity Studio/Properties/Settings.settings @@ -53,5 +53,8 @@ PNG + + False + \ No newline at end of file diff --git a/Unity Studio/Unity Classes/AssetBundle.cs b/Unity Studio/Unity Classes/AssetBundle.cs new file mode 100644 index 0000000..da84b17 --- /dev/null +++ b/Unity Studio/Unity Classes/AssetBundle.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Unity_Studio +{ + + class AssetBundle + { + public class AssetInfo + { + public int preloadIndex; + public int preloadSize; + public PPtr asset; + } + + public class ContainerData + { + public string first; + public AssetInfo second; + } + + + public List m_Container = new List(); + + public AssetBundle(AssetPreloadData preloadData) + { + var sourceFile = preloadData.sourceFile; + var a_Stream = preloadData.sourceFile.a_Stream; + a_Stream.Position = preloadData.Offset; + + var m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); + var size = a_Stream.ReadInt32(); + for (int i = 0; i < size; i++) + { + sourceFile.ReadPPtr(); + } + size = a_Stream.ReadInt32(); + for (int i = 0; i < size; i++) + { + var temp = new ContainerData(); + temp.first = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); + temp.second = new AssetInfo(); + temp.second.preloadIndex = a_Stream.ReadInt32(); + temp.second.preloadSize = a_Stream.ReadInt32(); + temp.second.asset = sourceFile.ReadPPtr(); + m_Container.Add(temp); + } + } + } +} diff --git a/Unity Studio/Unity Studio Classes/UnityStudio.cs b/Unity Studio/Unity Studio Classes/UnityStudio.cs index 2230fbb..8247391 100644 --- a/Unity Studio/Unity Studio Classes/UnityStudio.cs +++ b/Unity Studio/Unity Studio Classes/UnityStudio.cs @@ -240,7 +240,7 @@ namespace Unity_Studio return extractedCount; } - public static void BuildAssetStructures(bool loadAssetsMenuItem, bool displayAll, bool buildHierarchyMenuItem, bool buildClassStructuresMenuItem) + public static void BuildAssetStructures(bool loadAssetsMenuItem, bool displayAll, bool buildHierarchyMenuItem, bool buildClassStructuresMenuItem, bool displayOriginalName) { #region first loop - read asset data & create list if (loadAssetsMenuItem) @@ -255,7 +255,7 @@ namespace Unity_Studio StatusStripUpdate("Building asset list from " + Path.GetFileName(assetsFile.filePath)); string fileID = i.ToString(fileIDfmt); - + AssetBundle ab = null; foreach (var asset in assetsFile.preloadTable.Values) { asset.uniqueID = fileID + asset.uniqueID; @@ -330,6 +330,11 @@ namespace Unity_Studio exportable = true; break; } + case 142: //AssetBundle + { + ab = new AssetBundle(asset); + break; + } case 21: //Material case 74: //AnimationClip case 90: //Avatar @@ -370,6 +375,15 @@ namespace Unity_Studio } ProgressBarPerformStep(); } + if (displayOriginalName) + { + assetsFile.exportableAssets.ForEach(x => + { + var replacename = ab?.m_Container.Find(y => y.second.asset.m_PathID == x.m_PathID)?.first; + if (!string.IsNullOrEmpty(replacename)) + x.Text = replacename.Replace(Path.GetExtension(replacename), ""); + }); + } exportableAssets.AddRange(assetsFile.exportableAssets); //if (assetGroup.Items.Count > 0) { listView1.Groups.Add(assetGroup); } } diff --git a/Unity Studio/Unity Studio.csproj b/Unity Studio/Unity Studio.csproj index 25a5e48..24f400a 100644 --- a/Unity Studio/Unity Studio.csproj +++ b/Unity Studio/Unity Studio.csproj @@ -159,6 +159,7 @@ AboutBox.cs + diff --git a/Unity Studio/UnityStudioForm.Designer.cs b/Unity Studio/UnityStudioForm.Designer.cs index 8ae181f..dd652a8 100644 --- a/Unity Studio/UnityStudioForm.Designer.cs +++ b/Unity Studio/UnityStudioForm.Designer.cs @@ -45,6 +45,7 @@ this.exportClassStructuresMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.displayAll = new System.Windows.Forms.ToolStripMenuItem(); + this.displayOriginalName = new System.Windows.Forms.ToolStripMenuItem(); this.enablePreview = new System.Windows.Forms.ToolStripMenuItem(); this.displayInfo = new System.Windows.Forms.ToolStripMenuItem(); this.openAfterExport = new System.Windows.Forms.ToolStripMenuItem(); @@ -233,6 +234,7 @@ // this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.displayAll, + this.displayOriginalName, this.enablePreview, this.displayInfo, this.openAfterExport, @@ -242,6 +244,15 @@ this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20); this.optionsToolStripMenuItem.Text = "Options"; // + // displayOriginalName + // + this.displayOriginalName.CheckOnClick = true; + this.displayOriginalName.Name = "displayOriginalName"; + this.displayOriginalName.Size = new System.Drawing.Size(252, 22); + this.displayOriginalName.Text = "Display asset original name"; + this.displayOriginalName.ToolTipText = "Check this option will use asset original name when display and export"; + this.displayOriginalName.CheckedChanged += new System.EventHandler(this.MenuItem_CheckedChanged); + // // displayAll // this.displayAll.CheckOnClick = true; @@ -808,7 +819,7 @@ // // timerOpenTK // - this.timerOpenTK.Interval = 1000/6; + this.timerOpenTK.Interval = 1000 / 6; this.timerOpenTK.Tick += new System.EventHandler(this.timerOpenTK_Tick); // // openFileDialog1 @@ -929,6 +940,7 @@ private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem displayAll; + private System.Windows.Forms.ToolStripMenuItem displayOriginalName; private System.Windows.Forms.ToolStripMenuItem enablePreview; private System.Windows.Forms.ToolStripMenuItem displayInfo; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index cda2964..1872b11 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -269,7 +269,7 @@ namespace Unity_Studio bool optionBuildHierarchyMenuItem = !dontBuildHierarchyMenuItem.Checked; bool optionBuildClassStructuresMenuItem = buildClassStructuresMenuItem.Checked; - BuildAssetStructures(optionLoadAssetsMenuItem, optionDisplayAll, optionBuildHierarchyMenuItem, optionBuildClassStructuresMenuItem); + BuildAssetStructures(optionLoadAssetsMenuItem, optionDisplayAll, optionBuildHierarchyMenuItem, optionBuildClassStructuresMenuItem, displayOriginalName.Checked); BeginInvoke(new Action(() => { @@ -1069,7 +1069,7 @@ namespace Unity_Studio textPreviewBox.Visible = true; } else*/ - StatusStripUpdate("Only supported export the raw file."); + StatusStripUpdate("Only supported export the raw file."); break; } } @@ -1682,6 +1682,7 @@ namespace Unity_Studio { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); InitializeComponent(); + displayOriginalName.Checked = (bool)Properties.Settings.Default["displayOriginalName"]; displayAll.Checked = (bool)Properties.Settings.Default["displayAll"]; displayInfo.Checked = (bool)Properties.Settings.Default["displayInfo"]; enablePreview.Checked = (bool)Properties.Settings.Default["enablePreview"]; diff --git a/Unity Studio/app.config b/Unity Studio/app.config index f66773c..9102bd1 100644 --- a/Unity Studio/app.config +++ b/Unity Studio/app.config @@ -58,6 +58,9 @@ PNG + + False +