Improve file import

fixed bug
This commit is contained in:
Perfare
2018-03-01 03:42:43 +08:00
parent 4ef160de34
commit 3d60c5a7f6
28 changed files with 344 additions and 376 deletions

View File

@@ -27,7 +27,7 @@ namespace Unity_Studio
public AssetBundle(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
var m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

View File

@@ -38,7 +38,7 @@ namespace Unity_Studio
public AudioClip(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)
@@ -107,7 +107,10 @@ namespace Unity_Studio
if (!File.Exists(resourceFilePath))
{
var findFiles = Directory.GetFiles(Path.GetDirectoryName(sourceFile.filePath), resourceFileName, SearchOption.AllDirectories);
if (findFiles.Length > 0) { resourceFilePath = findFiles[0]; }
if (findFiles.Length > 0)
{
resourceFilePath = findFiles[0];
}
}
if (File.Exists(resourceFilePath))
{
@@ -119,7 +122,7 @@ namespace Unity_Studio
}
else
{
if (UnityStudio.assetsfileandstream.TryGetValue(resourceFileName, out var reader))
if (UnityStudio.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var reader))
{
reader.Position = m_Offset;
m_AudioData = reader.ReadBytes((int)m_Size);

View File

@@ -12,7 +12,7 @@ namespace Unity_Studio
public BuildSettings(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
int levels = a_Stream.ReadInt32();

View File

@@ -13,7 +13,7 @@ namespace Unity_Studio
public unityFont(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -25,7 +25,7 @@ namespace Unity_Studio
if (preloadData != null)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
uniqueID = preloadData.uniqueID;

View File

@@ -19,7 +19,7 @@ namespace Unity_Studio
public Material(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -331,7 +331,7 @@ namespace Unity_Studio
//Stream = new EndianStream(File.OpenRead(sourceFile.filePath), sourceFile.endianType);
//Stream.endian = sourceFile.endianType;
var version = MeshPD.sourceFile.version;
a_Stream = MeshPD.sourceFile.a_Stream;
a_Stream = MeshPD.sourceFile.assetsFileReader;
a_Stream.Position = MeshPD.Offset;
bool m_Use16BitIndices = true; //3.5.0 and newer always uses 16bit indices
uint m_MeshCompression = 0;

View File

@@ -14,7 +14,7 @@ namespace Unity_Studio
public MeshFilter(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -18,7 +18,7 @@ namespace Unity_Studio
public MeshRenderer(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -12,7 +12,7 @@ namespace Unity_Studio
public MonoBehaviour(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
var m_GameObject = sourceFile.ReadPPtr();

View File

@@ -13,7 +13,7 @@ namespace Unity_Studio
public MovieTexture(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

View File

@@ -13,7 +13,7 @@ namespace Unity_Studio
public PlayerSettings(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;

View File

@@ -16,7 +16,7 @@ namespace Unity_Studio
public Shader(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -21,7 +21,7 @@ namespace Unity_Studio
{
var sourceFile = preloadData.sourceFile;
var version = preloadData.sourceFile.version;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -21,7 +21,7 @@ namespace Unity_Studio
public Sprite(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var reader = preloadData.sourceFile.a_Stream;
var reader = preloadData.sourceFile.assetsFileReader;
reader.Position = preloadData.Offset;
var version = sourceFile.version;

View File

@@ -16,7 +16,7 @@ namespace Unity_Studio
public SpriteAtlas(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var reader = preloadData.sourceFile.a_Stream;
var reader = preloadData.sourceFile.assetsFileReader;
reader.Position = preloadData.Offset;
var m_Name = reader.ReadAlignedString(reader.ReadInt32());

View File

@@ -14,7 +14,7 @@ namespace Unity_Studio
public TextAsset(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -91,7 +91,7 @@ namespace Unity_Studio
public Texture2D(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
version = sourceFile.version;
@@ -171,7 +171,10 @@ namespace Unity_Studio
if (!File.Exists(resourceFilePath))
{
var findFiles = Directory.GetFiles(Path.GetDirectoryName(sourceFile.filePath), resourceFileName, SearchOption.AllDirectories);
if (findFiles.Length > 0) { resourceFilePath = findFiles[0]; }
if (findFiles.Length > 0)
{
resourceFilePath = findFiles[0];
}
}
if (File.Exists(resourceFilePath))
{
@@ -183,7 +186,7 @@ namespace Unity_Studio
}
else
{
if (UnityStudio.assetsfileandstream.TryGetValue(resourceFileName, out var reader))
if (UnityStudio.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var reader))
{
reader.Position = offset;
image_data = reader.ReadBytes(image_data_size);

View File

@@ -17,7 +17,7 @@ namespace Unity_Studio
public Transform(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
if (sourceFile.platform == -2)

View File

@@ -15,7 +15,7 @@ namespace Unity_Studio
public VideoClip(AssetPreloadData preloadData, bool readSwitch)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;
var a_Stream = preloadData.sourceFile.assetsFileReader;
a_Stream.Position = preloadData.Offset;
m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
@@ -47,38 +47,49 @@ namespace Unity_Studio
}
//StreamedResource m_ExternalResources
var m_Source = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
if (m_Source != "")
m_Source = Path.Combine(Path.GetDirectoryName(sourceFile.filePath), m_Source.Replace("archive:/", ""));
var m_Offset = a_Stream.ReadUInt64();
var m_Size = a_Stream.ReadUInt64();
var m_HasSplitAlpha = a_Stream.ReadBoolean();
if (readSwitch)
{
if (string.IsNullOrEmpty(m_Source))
if (!string.IsNullOrEmpty(m_Source))
{
if (m_Size > 0)
m_VideoData = a_Stream.ReadBytes((int)m_Size);
}
else if (File.Exists(m_Source) || File.Exists(m_Source = Path.Combine(Path.GetDirectoryName(sourceFile.filePath), Path.GetFileName(m_Source))))
{
using (var reader = new BinaryReader(File.OpenRead(m_Source)))
var resourceFileName = Path.GetFileName(m_Source);
var resourceFilePath = Path.GetDirectoryName(sourceFile.filePath) + "\\" + resourceFileName;
if (!File.Exists(resourceFilePath))
{
reader.BaseStream.Position = (long)m_Offset;
m_VideoData = reader.ReadBytes((int)m_Size);
var findFiles = Directory.GetFiles(Path.GetDirectoryName(sourceFile.filePath), resourceFileName, SearchOption.AllDirectories);
if (findFiles.Length > 0)
{
resourceFilePath = findFiles[0];
}
}
if (File.Exists(resourceFilePath))
{
using (var reader = new BinaryReader(File.OpenRead(resourceFilePath)))
{
reader.BaseStream.Position = (long)m_Offset;
m_VideoData = reader.ReadBytes((int)m_Size);
}
}
else
{
if (UnityStudio.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var reader))
{
reader.Position = (long)m_Offset;
m_VideoData = reader.ReadBytes((int)m_Size);
}
else
{
MessageBox.Show($"can't find the resource file {resourceFileName}");
}
}
}
else
{
if (UnityStudio.assetsfileandstream.TryGetValue(Path.GetFileName(m_Source), out var reader))
{
reader.Position = (long)m_Offset;
m_VideoData = reader.ReadBytes((int)m_Size);
}
else
{
MessageBox.Show($"can't find the resource file {Path.GetFileName(m_Source)}");
}
if (m_Size > 0)
m_VideoData = a_Stream.ReadBytes((int)m_Size);
}
}
else