Raplace Unity ver array with Unity ver class

This commit is contained in:
VaDiM 2024-03-30 14:19:54 +03:00
parent c9e9bc840c
commit 3cc6bed844
39 changed files with 830 additions and 341 deletions

View File

@ -11,20 +11,48 @@ namespace AssetStudio
{ {
public class AssetsManager public class AssetsManager
{ {
public string SpecifyUnityVersion;
public bool ZstdEnabled = true; public bool ZstdEnabled = true;
public bool LoadingViaTypeTreeEnabled = true; public bool LoadingViaTypeTreeEnabled = true;
public List<SerializedFile> assetsFileList = new List<SerializedFile>(); public List<SerializedFile> assetsFileList = new List<SerializedFile>();
private HashSet<ClassIDType> filteredAssetTypesList = new HashSet<ClassIDType>();
internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase); internal Dictionary<string, int> assetsFileIndexCache = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
internal ConcurrentDictionary<string, BinaryReader> resourceFileReaders = new ConcurrentDictionary<string, BinaryReader>(StringComparer.OrdinalIgnoreCase); internal ConcurrentDictionary<string, BinaryReader> resourceFileReaders = new ConcurrentDictionary<string, BinaryReader>(StringComparer.OrdinalIgnoreCase);
private UnityVersion specifiedUnityVersion;
private List<string> importFiles = new List<string>(); private List<string> importFiles = new List<string>();
private HashSet<ClassIDType> filteredAssetTypesList = new HashSet<ClassIDType>();
private HashSet<string> importFilesHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> importFilesHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private HashSet<string> noexistFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> noexistFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase); private HashSet<string> assetsFileListHash = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
public UnityVersion SpecifyUnityVersion
{
get => specifiedUnityVersion;
set
{
if (specifiedUnityVersion == value)
{
return;
}
if (value == null)
{
specifiedUnityVersion = null;
Logger.Info("Specified Unity version: None");
return;
}
if (string.IsNullOrEmpty(value.BuildType))
{
throw new NotSupportedException("Specified Unity version is not in a correct format.\n" +
"Specify full Unity version, including letters at the end.\n" +
"Example: 2017.4.39f1");
}
specifiedUnityVersion = value;
Logger.Info($"Specified Unity version: {specifiedUnityVersion}");
}
}
public void SetAssetFilter(params ClassIDType[] classIDTypes) public void SetAssetFilter(params ClassIDType[] classIDTypes)
{ {
if (filteredAssetTypesList.Count == 0) if (filteredAssetTypesList.Count == 0)
@ -230,7 +258,7 @@ namespace AssetStudio
return true; return true;
} }
private bool LoadAssetsFromMemory(FileReader reader, string originalPath, string unityVersion = null) private bool LoadAssetsFromMemory(FileReader reader, string originalPath, UnityVersion assetBundleUnityVer = null)
{ {
if (!assetsFileListHash.Contains(reader.FileName)) if (!assetsFileListHash.Contains(reader.FileName))
{ {
@ -238,9 +266,9 @@ namespace AssetStudio
{ {
var assetsFile = new SerializedFile(reader, this); var assetsFile = new SerializedFile(reader, this);
assetsFile.originalPath = originalPath; assetsFile.originalPath = originalPath;
if (!string.IsNullOrEmpty(unityVersion) && assetsFile.header.m_Version < SerializedFileFormatVersion.Unknown_7) if (assetBundleUnityVer != null && assetsFile.header.m_Version < SerializedFileFormatVersion.Unknown_7)
{ {
assetsFile.SetVersion(unityVersion); assetsFile.SetVersion(assetBundleUnityVer);
} }
CheckStrippedVersion(assetsFile); CheckStrippedVersion(assetsFile);
assetsFileList.Add(assetsFile); assetsFileList.Add(assetsFile);
@ -270,7 +298,7 @@ namespace AssetStudio
Logger.Info("Loading " + reader.FullPath); Logger.Info("Loading " + reader.FullPath);
try try
{ {
var bundleFile = new BundleFile(reader, ZstdEnabled, SpecifyUnityVersion); var bundleFile = new BundleFile(reader, ZstdEnabled, specifiedUnityVersion);
foreach (var file in bundleFile.fileList) foreach (var file in bundleFile.fileList)
{ {
var dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), file.fileName); var dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), file.fileName);
@ -448,11 +476,11 @@ namespace AssetStudio
public void CheckStrippedVersion(SerializedFile assetsFile) public void CheckStrippedVersion(SerializedFile assetsFile)
{ {
if (assetsFile.IsVersionStripped && string.IsNullOrEmpty(SpecifyUnityVersion)) if (assetsFile.version.IsStripped && specifiedUnityVersion == null)
{ {
throw new NotSupportedException("The Unity version has been stripped, please set the version in the options"); throw new NotSupportedException("The asset's Unity version has been stripped, please set the version in the options");
} }
if (!string.IsNullOrEmpty(SpecifyUnityVersion)) if (specifiedUnityVersion != null)
{ {
assetsFile.SetVersion(SpecifyUnityVersion); assetsFile.SetVersion(SpecifyUnityVersion);
} }
@ -560,7 +588,7 @@ namespace AssetStudio
obj = new RectTransform(objectReader); obj = new RectTransform(objectReader);
break; break;
case ClassIDType.Shader: case ClassIDType.Shader:
if (objectReader.version[0] < 2021) if (objectReader.version < 2021)
obj = new Shader(objectReader); obj = new Shader(objectReader);
break; break;
case ClassIDType.SkinnedMeshRenderer: case ClassIDType.SkinnedMeshRenderer:

View File

@ -3,7 +3,6 @@ using ZstdSharp;
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions;
namespace AssetStudio namespace AssetStudio
{ {
@ -48,7 +47,7 @@ namespace AssetStudio
public string signature; public string signature;
public uint version; public uint version;
public string unityVersion; public string unityVersion;
public string unityRevision; public UnityVersion unityRevision;
public long size; public long size;
public uint compressedBlocksInfoSize; public uint compressedBlocksInfoSize;
public uint uncompressedBlocksInfoSize; public uint uncompressedBlocksInfoSize;
@ -76,13 +75,13 @@ namespace AssetStudio
public StreamFile[] fileList; public StreamFile[] fileList;
public BundleFile(FileReader reader, bool useZstd, string specUnityVer = "") public BundleFile(FileReader reader, bool useZstd, UnityVersion specUnityVer = null)
{ {
m_Header = new Header(); m_Header = new Header();
m_Header.signature = reader.ReadStringToNull(); m_Header.signature = reader.ReadStringToNull();
m_Header.version = reader.ReadUInt32(); m_Header.version = reader.ReadUInt32();
m_Header.unityVersion = reader.ReadStringToNull(); m_Header.unityVersion = reader.ReadStringToNull();
m_Header.unityRevision = reader.ReadStringToNull(); m_Header.unityRevision = new UnityVersion(reader.ReadStringToNull());
switch (m_Header.signature) switch (m_Header.signature)
{ {
case "UnityArchive": case "UnityArchive":
@ -104,15 +103,25 @@ namespace AssetStudio
ReadHeader(reader); ReadHeader(reader);
var isUnityCnEnc = false; var isUnityCnEnc = false;
var unityVerStr = string.IsNullOrEmpty(specUnityVer) ? m_Header.unityRevision : specUnityVer; var unityVer = m_Header.unityRevision;
int[] ver = Regex.Matches(unityVerStr, @"\d+").Cast<Match>().Select(x => int.Parse(x.Value)).ToArray(); if (specUnityVer != null)
if (ver.Length > 0 && ver[0] != 0) {
if (!unityVer.IsStripped && specUnityVer != unityVer)
{
Logger.Warning($"Detected Unity version is different from the specified one ({specUnityVer.FullVersion.Color(ColorConsole.BrightCyan)}).\n" +
$"Assets may load with errors.\n" +
$"It is recommended to specify the detected Unity version: {unityVer.FullVersion.Color(ColorConsole.BrightCyan)}");
}
unityVer = specUnityVer;
}
if (!unityVer.IsStripped)
{ {
// https://issuetracker.unity3d.com/issues/files-within-assetbundles-do-not-start-on-aligned-boundaries-breaking-patching-on-nintendo-switch // https://issuetracker.unity3d.com/issues/files-within-assetbundles-do-not-start-on-aligned-boundaries-breaking-patching-on-nintendo-switch
if (ver[0] < 2020 if (unityVer < 2020
|| (ver[0] == 2020 && ver[1] <= 3 && ver[2] < 34) || unityVer.IsInRange(2020, (2020, 3, 34))
|| (ver[0] == 2021 && ver[1] <= 3 && ver[2] < 2) || unityVer.IsInRange(2021, (2021, 3, 2))
|| (ver[0] == 2022 && ver[1] <= 1 && ver[2] < 1)) || unityVer.IsInRange(2022, (2022, 1, 1)))
{ {
isUnityCnEnc = ((CnEncryptionFlags)m_Header.flags & CnEncryptionFlags.OldFlag) != 0; isUnityCnEnc = ((CnEncryptionFlags)m_Header.flags & CnEncryptionFlags.OldFlag) != 0;
} }
@ -123,10 +132,14 @@ namespace AssetStudio
} }
if (isUnityCnEnc) if (isUnityCnEnc)
{ {
throw new NotSupportedException("Unsupported bundle file. UnityCN encryption was detected."); var msg = "Unsupported bundle file. ";
msg += specUnityVer != null
? "UnityCN encryption was detected or the specified Unity version is incorrect."
: "UnityCN encryption was detected.";
throw new NotSupportedException(msg);
} }
ReadBlocksInfoAndDirectory(reader, ver); ReadBlocksInfoAndDirectory(reader, unityVer);
using (var blocksStream = CreateBlocksStream(reader.FullPath)) using (var blocksStream = CreateBlocksStream(reader.FullPath))
{ {
ReadBlocks(reader, blocksStream, useZstd); ReadBlocks(reader, blocksStream, useZstd);
@ -261,7 +274,7 @@ namespace AssetStudio
} }
} }
private void ReadBlocksInfoAndDirectory(FileReader reader, int[] unityVer) private void ReadBlocksInfoAndDirectory(FileReader reader, UnityVersion unityVer)
{ {
byte[] blocksInfoBytes; byte[] blocksInfoBytes;
@ -269,7 +282,7 @@ namespace AssetStudio
{ {
reader.AlignStream(16); reader.AlignStream(16);
} }
else if (unityVer[0] >= 2019 && unityVer[1] >= 4) else if (unityVer >= (2019, 4))
{ {
//check if we need to align the reader //check if we need to align the reader
//- align to 16 bytes and check if all are 0 //- align to 16 bytes and check if all are 0

View File

@ -25,7 +25,7 @@ namespace AssetStudio
value = readerFunc(); value = readerFunc();
inSlope = readerFunc(); inSlope = readerFunc();
outSlope = readerFunc(); outSlope = readerFunc();
if (reader.version[0] >= 2018) //2018 and up if (reader.version >= 2018) //2018 and up
{ {
weightedMode = reader.ReadInt32(); weightedMode = reader.ReadInt32();
inWeight = readerFunc(); inWeight = readerFunc();
@ -55,7 +55,7 @@ namespace AssetStudio
m_PreInfinity = reader.ReadInt32(); m_PreInfinity = reader.ReadInt32();
m_PostInfinity = reader.ReadInt32(); m_PostInfinity = reader.ReadInt32();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up if (version >= (5, 3)) //5.3 and up
{ {
m_RotationOrder = reader.ReadInt32(); m_RotationOrder = reader.ReadInt32();
} }
@ -323,7 +323,7 @@ namespace AssetStudio
path = reader.ReadAlignedString(); path = reader.ReadAlignedString();
classID = (ClassIDType)reader.ReadInt32(); classID = (ClassIDType)reader.ReadInt32();
script = new PPtr<MonoScript>(reader); script = new PPtr<MonoScript>(reader);
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 2)) //2022.2 and up if (version >= (2022, 2)) //2022.2 and up
{ {
flags = reader.ReadInt32(); flags = reader.ReadInt32();
} }
@ -369,7 +369,7 @@ namespace AssetStudio
path = reader.ReadAlignedString(); path = reader.ReadAlignedString();
classID = reader.ReadInt32(); classID = reader.ReadInt32();
script = new PPtr<MonoScript>(reader); script = new PPtr<MonoScript>(reader);
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 2)) //2022.2 and up if (version >= (2022, 2)) //2022.2 and up
{ {
flags = reader.ReadInt32(); flags = reader.ReadInt32();
} }
@ -401,9 +401,9 @@ namespace AssetStudio
public xform(ObjectReader reader) public xform(ObjectReader reader)
{ {
var version = reader.version; var version = reader.version;
t = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up t = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
q = reader.ReadQuaternion(); q = reader.ReadQuaternion();
s = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up s = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
} }
} }
@ -445,9 +445,9 @@ namespace AssetStudio
m_X = new xform(reader); m_X = new xform(reader);
m_WeightT = reader.ReadSingle(); m_WeightT = reader.ReadSingle();
m_WeightR = reader.ReadSingle(); m_WeightR = reader.ReadSingle();
if (version[0] >= 5)//5.0 and up if (version >= 5)//5.0 and up
{ {
m_HintT = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up m_HintT = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
m_HintWeightT = reader.ReadSingle(); m_HintWeightT = reader.ReadSingle();
} }
} }
@ -470,7 +470,7 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
m_RootX = new xform(reader); m_RootX = new xform(reader);
m_LookAtPosition = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up m_LookAtPosition = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
m_LookAtWeight = reader.ReadVector4(); m_LookAtWeight = reader.ReadVector4();
int numGoals = reader.ReadInt32(); int numGoals = reader.ReadInt32();
@ -485,13 +485,13 @@ namespace AssetStudio
m_DoFArray = reader.ReadSingleArray(); m_DoFArray = reader.ReadSingleArray();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2))//5.2 and up if (version >= (5, 2))//5.2 and up
{ {
int numTDof = reader.ReadInt32(); int numTDof = reader.ReadInt32();
m_TDoFArray = new Vector3[numTDof]; m_TDoFArray = new Vector3[numTDof];
for (int i = 0; i < numTDof; i++) for (int i = 0; i < numTDof; i++)
{ {
m_TDoFArray[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up m_TDoFArray[i] = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
} }
} }
} }
@ -646,7 +646,7 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
m_ID = reader.ReadUInt32(); m_ID = reader.ReadUInt32();
if (version[0] < 5 || (version[0] == 5 && version[1] < 5))//5.5 down if (version < (5, 5)) //5.5 down
{ {
m_TypeID = reader.ReadUInt32(); m_TypeID = reader.ReadUInt32();
} }
@ -698,11 +698,11 @@ namespace AssetStudio
var version = reader.version; var version = reader.version;
m_StreamedClip = new StreamedClip(reader); m_StreamedClip = new StreamedClip(reader);
m_DenseClip = new DenseClip(reader); m_DenseClip = new DenseClip(reader);
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_ConstantClip = new ConstantClip(reader); m_ConstantClip = new ConstantClip(reader);
} }
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 3)) //2018.3 down if (version < (2018, 3)) //2018.3 down
{ {
m_Binding = new ValueArrayConstant(reader); m_Binding = new ValueArrayConstant(reader);
} }
@ -806,18 +806,18 @@ namespace AssetStudio
var version = reader.version; var version = reader.version;
m_DeltaPose = new HumanPose(reader); m_DeltaPose = new HumanPose(reader);
m_StartX = new xform(reader); m_StartX = new xform(reader);
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up if (version >= (5, 5)) //5.5 and up
{ {
m_StopX = new xform(reader); m_StopX = new xform(reader);
} }
m_LeftFootStartX = new xform(reader); m_LeftFootStartX = new xform(reader);
m_RightFootStartX = new xform(reader); m_RightFootStartX = new xform(reader);
if (version[0] < 5)//5.0 down if (version < 5)//5.0 down
{ {
m_MotionStartX = new xform(reader); m_MotionStartX = new xform(reader);
m_MotionStopX = new xform(reader); m_MotionStopX = new xform(reader);
} }
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up m_AverageSpeed = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
m_Clip = new OffsetPtr(reader); m_Clip = new OffsetPtr(reader);
m_StartTime = reader.ReadSingle(); m_StartTime = reader.ReadSingle();
m_StopTime = reader.ReadSingle(); m_StopTime = reader.ReadSingle();
@ -827,7 +827,7 @@ namespace AssetStudio
m_AverageAngularSpeed = reader.ReadSingle(); m_AverageAngularSpeed = reader.ReadSingle();
m_IndexArray = reader.ReadInt32Array(); m_IndexArray = reader.ReadInt32Array();
if (version[0] < 4 || (version[0] == 4 && version[1] < 3)) //4.3 down if (version < (4, 3)) //4.3 down
{ {
var m_AdditionalCurveIndexArray = reader.ReadInt32Array(); var m_AdditionalCurveIndexArray = reader.ReadInt32Array();
} }
@ -837,13 +837,13 @@ namespace AssetStudio
{ {
m_ValueArrayDelta[i] = new ValueDelta(reader); m_ValueArrayDelta[i] = new ValueDelta(reader);
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up if (version >= (5, 3))//5.3 and up
{ {
m_ValueArrayReferencePose = reader.ReadSingleArray(); m_ValueArrayReferencePose = reader.ReadSingleArray();
} }
m_Mirror = reader.ReadBoolean(); m_Mirror = reader.ReadBoolean();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_LoopTime = reader.ReadBoolean(); m_LoopTime = reader.ReadBoolean();
} }
@ -851,7 +851,7 @@ namespace AssetStudio
m_LoopBlendOrientation = reader.ReadBoolean(); m_LoopBlendOrientation = reader.ReadBoolean();
m_LoopBlendPositionY = reader.ReadBoolean(); m_LoopBlendPositionY = reader.ReadBoolean();
m_LoopBlendPositionXZ = reader.ReadBoolean(); m_LoopBlendPositionXZ = reader.ReadBoolean();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up if (version >= (5, 5))//5.5 and up
{ {
m_StartAtOrigin = reader.ReadBoolean(); m_StartAtOrigin = reader.ReadBoolean();
} }
@ -881,7 +881,7 @@ namespace AssetStudio
path = reader.ReadUInt32(); path = reader.ReadUInt32();
attribute = reader.ReadUInt32(); attribute = reader.ReadUInt32();
script = new PPtr<Object>(reader); script = new PPtr<Object>(reader);
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up if (version >= (5, 6)) //5.6 and up
{ {
typeID = (ClassIDType)reader.ReadInt32(); typeID = (ClassIDType)reader.ReadInt32();
} }
@ -891,7 +891,7 @@ namespace AssetStudio
} }
customType = reader.ReadByte(); customType = reader.ReadByte();
isPPtrCurve = reader.ReadByte(); isPPtrCurve = reader.ReadByte();
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up if (version >= (2022, 1)) //2022.1 and up
{ {
isIntCurve = reader.ReadByte(); isIntCurve = reader.ReadByte();
} }
@ -980,7 +980,7 @@ namespace AssetStudio
data = reader.ReadAlignedString(); data = reader.ReadAlignedString();
objectReferenceParameter = new PPtr<Object>(reader); objectReferenceParameter = new PPtr<Object>(reader);
floatParameter = reader.ReadSingle(); floatParameter = reader.ReadSingle();
if (version[0] >= 3) //3 and up if (version >= 3) //3 and up
{ {
intParameter = reader.ReadInt32(); intParameter = reader.ReadInt32();
} }
@ -1045,11 +1045,11 @@ namespace AssetStudio
public AnimationClip(ObjectReader reader) : base(reader) public AnimationClip(ObjectReader reader) : base(reader)
{ {
if (version[0] >= 5)//5.0 and up if (version >= 5)//5.0 and up
{ {
m_Legacy = reader.ReadBoolean(); m_Legacy = reader.ReadBoolean();
} }
else if (version[0] >= 4)//4.0 and up else if (version >= 4)//4.0 and up
{ {
m_AnimationType = (AnimationType)reader.ReadInt32(); m_AnimationType = (AnimationType)reader.ReadInt32();
if (m_AnimationType == AnimationType.Legacy) if (m_AnimationType == AnimationType.Legacy)
@ -1060,7 +1060,7 @@ namespace AssetStudio
m_Legacy = true; m_Legacy = true;
} }
m_Compressed = reader.ReadBoolean(); m_Compressed = reader.ReadBoolean();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up if (version >= (4, 3))//4.3 and up
{ {
m_UseHighQualityCurve = reader.ReadBoolean(); m_UseHighQualityCurve = reader.ReadBoolean();
} }
@ -1079,7 +1079,7 @@ namespace AssetStudio
m_CompressedRotationCurves[i] = new CompressedAnimationCurve(reader); m_CompressedRotationCurves[i] = new CompressedAnimationCurve(reader);
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up if (version >= (5, 3))//5.3 and up
{ {
int numEulerCurves = reader.ReadInt32(); int numEulerCurves = reader.ReadInt32();
m_EulerCurves = new Vector3Curve[numEulerCurves]; m_EulerCurves = new Vector3Curve[numEulerCurves];
@ -1110,7 +1110,7 @@ namespace AssetStudio
m_FloatCurves[i] = new FloatCurve(reader); m_FloatCurves[i] = new FloatCurve(reader);
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
int numPtrCurves = reader.ReadInt32(); int numPtrCurves = reader.ReadInt32();
m_PPtrCurves = new PPtrCurve[numPtrCurves]; m_PPtrCurves = new PPtrCurve[numPtrCurves];
@ -1122,20 +1122,20 @@ namespace AssetStudio
m_SampleRate = reader.ReadSingle(); m_SampleRate = reader.ReadSingle();
m_WrapMode = reader.ReadInt32(); m_WrapMode = reader.ReadInt32();
if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up if (version >= (3, 4)) //3.4 and up
{ {
m_Bounds = new AABB(reader); m_Bounds = new AABB(reader);
} }
if (version[0] >= 4)//4.0 and up if (version >= 4)//4.0 and up
{ {
m_MuscleClipSize = reader.ReadUInt32(); m_MuscleClipSize = reader.ReadUInt32();
m_MuscleClip = new ClipMuscleConstant(reader); m_MuscleClip = new ClipMuscleConstant(reader);
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_ClipBindingConstant = new AnimationClipBindingConstant(reader); m_ClipBindingConstant = new AnimationClipBindingConstant(reader);
} }
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 3)) //2018.3 and up if (version >= (2018, 3)) //2018.3 and up
{ {
var m_HasGenericRootTransform = reader.ReadBoolean(); var m_HasGenericRootTransform = reader.ReadBoolean();
var m_HasMotionFloatCurves = reader.ReadBoolean(); var m_HasMotionFloatCurves = reader.ReadBoolean();
@ -1147,7 +1147,7 @@ namespace AssetStudio
{ {
m_Events[i] = new AnimationEvent(reader); m_Events[i] = new AnimationEvent(reader);
} }
if (version[0] >= 2017) //2017 and up if (version >= 2017) //2017 and up
{ {
reader.AlignStream(); reader.AlignStream();
} }

View File

@ -17,47 +17,47 @@ namespace AssetStudio
m_Controller = new PPtr<RuntimeAnimatorController>(reader); m_Controller = new PPtr<RuntimeAnimatorController>(reader);
var m_CullingMode = reader.ReadInt32(); var m_CullingMode = reader.ReadInt32();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up if (version >= (4, 5)) //4.5 and up
{ {
var m_UpdateMode = reader.ReadInt32(); var m_UpdateMode = reader.ReadInt32();
} }
var m_ApplyRootMotion = reader.ReadBoolean(); var m_ApplyRootMotion = reader.ReadBoolean();
if (version[0] == 4 && version[1] >= 5) //4.5 and up - 5.0 down if (version == 4 && version.Minor >= 5) //4.5 and up - 5.0 down
{ {
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
var m_LinearVelocityBlending = reader.ReadBoolean(); var m_LinearVelocityBlending = reader.ReadBoolean();
if (version[0] > 2021 || (version[0] == 2021 && version[1] >= 2)) //2021.2 and up if (version >= (2021, 2)) //2021.2 and up
{ {
var m_StabilizeFeet = reader.ReadBoolean(); var m_StabilizeFeet = reader.ReadBoolean();
} }
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] < 4 || (version[0] == 4 && version[1] < 5)) //4.5 down if (version < (4, 5)) //4.5 down
{ {
var m_AnimatePhysics = reader.ReadBoolean(); var m_AnimatePhysics = reader.ReadBoolean();
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_HasTransformHierarchy = reader.ReadBoolean(); m_HasTransformHierarchy = reader.ReadBoolean();
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up if (version >= (4, 5)) //4.5 and up
{ {
var m_AllowConstantClipSamplingOptimization = reader.ReadBoolean(); var m_AllowConstantClipSamplingOptimization = reader.ReadBoolean();
} }
if (version[0] >= 5 && version[0] < 2018) //5.0 and up - 2018 down if (version.IsInRange(5, 2018)) //5.0 and up - 2018 down
{ {
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] >= 2018) //2018 and up if (version >= 2018) //2018 and up
{ {
var m_KeepAnimatorControllerStateOnDisable = reader.ReadBoolean(); var m_KeepAnimatorControllerStateOnDisable = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();

View File

@ -17,7 +17,7 @@ namespace AssetStudio
word0 = reader.ReadUInt32(); word0 = reader.ReadUInt32();
word1 = reader.ReadUInt32(); word1 = reader.ReadUInt32();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2)) //5.2 and up if (version >= (5, 2)) //5.2 and up
{ {
word2 = reader.ReadUInt32(); word2 = reader.ReadUInt32();
} }
@ -73,12 +73,12 @@ namespace AssetStudio
m_SkeletonMask = new SkeletonMask(reader); m_SkeletonMask = new SkeletonMask(reader);
m_Binding = reader.ReadUInt32(); m_Binding = reader.ReadUInt32();
m_LayerBlendingMode = reader.ReadInt32(); m_LayerBlendingMode = reader.ReadInt32();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 2)) //4.2 and up if (version >= (4, 2)) //4.2 and up
{ {
m_DefaultWeight = reader.ReadSingle(); m_DefaultWeight = reader.ReadSingle();
} }
m_IKPass = reader.ReadBoolean(); m_IKPass = reader.ReadBoolean();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 2)) //4.2 and up if (version >= (4, 2)) //4.2 and up
{ {
m_SyncedLayerAffectsTiming = reader.ReadBoolean(); m_SyncedLayerAffectsTiming = reader.ReadBoolean();
} }
@ -131,7 +131,7 @@ namespace AssetStudio
} }
m_DestinationState = reader.ReadUInt32(); m_DestinationState = reader.ReadUInt32();
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
m_FullPathID = reader.ReadUInt32(); m_FullPathID = reader.ReadUInt32();
} }
@ -140,7 +140,7 @@ namespace AssetStudio
m_UserID = reader.ReadUInt32(); m_UserID = reader.ReadUInt32();
m_TransitionDuration = reader.ReadSingle(); m_TransitionDuration = reader.ReadSingle();
m_TransitionOffset = reader.ReadSingle(); m_TransitionOffset = reader.ReadSingle();
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
m_ExitTime = reader.ReadSingle(); m_ExitTime = reader.ReadSingle();
m_HasExitTime = reader.ReadBoolean(); m_HasExitTime = reader.ReadBoolean();
@ -154,7 +154,7 @@ namespace AssetStudio
m_Atomic = reader.ReadBoolean(); m_Atomic = reader.ReadBoolean();
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up if (version >= (4, 5)) //4.5 and up
{ {
m_CanTransitionToSelf = reader.ReadBoolean(); m_CanTransitionToSelf = reader.ReadBoolean();
} }
@ -252,43 +252,41 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
if (version[0] > 4 || (version[0] == 4 && version[1] >= 1)) //4.1 and up if (version >= (4, 1)) //4.1 and up
{ {
m_BlendType = reader.ReadUInt32(); m_BlendType = reader.ReadUInt32();
} }
m_BlendEventID = reader.ReadUInt32(); m_BlendEventID = reader.ReadUInt32();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 1)) //4.1 and up if (version >= (4, 1)) //4.1 and up
{ {
m_BlendEventYID = reader.ReadUInt32(); m_BlendEventYID = reader.ReadUInt32();
} }
m_ChildIndices = reader.ReadUInt32Array(); m_ChildIndices = reader.ReadUInt32Array();
if (version[0] < 4 || (version[0] == 4 && version[1] < 1)) //4.1 down if (version < (4, 1)) //4.1 down
{ {
m_ChildThresholdArray = reader.ReadSingleArray(); m_ChildThresholdArray = reader.ReadSingleArray();
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 1)) //4.1 and up if (version >= (4, 1)) //4.1 and up
{ {
m_Blend1dData = new Blend1dDataConstant(reader); m_Blend1dData = new Blend1dDataConstant(reader);
m_Blend2dData = new Blend2dDataConstant(reader); m_Blend2dData = new Blend2dDataConstant(reader);
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
m_BlendDirectData = new BlendDirectDataConstant(reader); m_BlendDirectData = new BlendDirectDataConstant(reader);
} }
m_ClipID = reader.ReadUInt32(); m_ClipID = reader.ReadUInt32();
if (version[0] == 4 && version[1] >= 5) //4.5 - 5.0 if (version == 4 && version.Minor >= 5) //4.5 - 5.0
{ {
m_ClipIndex = reader.ReadUInt32(); m_ClipIndex = reader.ReadUInt32();
} }
m_Duration = reader.ReadSingle(); m_Duration = reader.ReadSingle();
if (version[0] > 4 if (version >= (4, 1, 3)) //4.1.3 and up
|| (version[0] == 4 && version[1] > 1)
|| (version[0] == 4 && version[1] == 1 && version[2] >= 3)) //4.1.3 and up
{ {
m_CycleOffset = reader.ReadSingle(); m_CycleOffset = reader.ReadSingle();
m_Mirror = reader.ReadBoolean(); m_Mirror = reader.ReadBoolean();
@ -313,7 +311,7 @@ namespace AssetStudio
m_NodeArray[i] = new BlendTreeNodeConstant(reader); m_NodeArray[i] = new BlendTreeNodeConstant(reader);
} }
if (version[0] < 4 || (version[0] == 4 && version[1] < 5)) //4.5 down if (version < (4, 5)) //4.5 down
{ {
m_BlendEventArrayConstant = new ValueArrayConstant(reader); m_BlendEventArrayConstant = new ValueArrayConstant(reader);
} }
@ -354,7 +352,7 @@ namespace AssetStudio
m_BlendTreeConstantIndexArray = reader.ReadInt32Array(); m_BlendTreeConstantIndexArray = reader.ReadInt32Array();
if (version[0] < 5 || (version[0] == 5 && version[1] < 2)) //5.2 down if (version < (5, 2)) //5.2 down
{ {
int numInfos = reader.ReadInt32(); int numInfos = reader.ReadInt32();
m_LeafInfoArray = new LeafInfoConstant[numInfos]; m_LeafInfoArray = new LeafInfoConstant[numInfos];
@ -372,41 +370,41 @@ namespace AssetStudio
} }
m_NameID = reader.ReadUInt32(); m_NameID = reader.ReadUInt32();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_PathID = reader.ReadUInt32(); m_PathID = reader.ReadUInt32();
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
m_FullPathID = reader.ReadUInt32(); m_FullPathID = reader.ReadUInt32();
} }
m_TagID = reader.ReadUInt32(); m_TagID = reader.ReadUInt32();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 1)) //5.1 and up if (version >= (5, 1)) //5.1 and up
{ {
m_SpeedParamID = reader.ReadUInt32(); m_SpeedParamID = reader.ReadUInt32();
m_MirrorParamID = reader.ReadUInt32(); m_MirrorParamID = reader.ReadUInt32();
m_CycleOffsetParamID = reader.ReadUInt32(); m_CycleOffsetParamID = reader.ReadUInt32();
} }
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up if (version >= (2017, 2)) //2017.2 and up
{ {
var m_TimeParamID = reader.ReadUInt32(); var m_TimeParamID = reader.ReadUInt32();
} }
m_Speed = reader.ReadSingle(); m_Speed = reader.ReadSingle();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 1)) //4.1 and up if (version >= (4, 1)) //4.1 and up
{ {
m_CycleOffset = reader.ReadSingle(); m_CycleOffset = reader.ReadSingle();
} }
m_IKOnFeet = reader.ReadBoolean(); m_IKOnFeet = reader.ReadBoolean();
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
m_WriteDefaultValues = reader.ReadBoolean(); m_WriteDefaultValues = reader.ReadBoolean();
} }
m_Loop = reader.ReadBoolean(); m_Loop = reader.ReadBoolean();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 1)) //4.1 and up if (version >= (4, 1)) //4.1 and up
{ {
m_Mirror = reader.ReadBoolean(); m_Mirror = reader.ReadBoolean();
} }
@ -480,7 +478,7 @@ namespace AssetStudio
m_AnyStateTransitionConstantArray[i] = new TransitionConstant(reader); m_AnyStateTransitionConstantArray[i] = new TransitionConstant(reader);
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
int numSelectors = reader.ReadInt32(); int numSelectors = reader.ReadInt32();
m_SelectorStateConstantArray = new SelectorStateConstant[numSelectors]; m_SelectorStateConstantArray = new SelectorStateConstant[numSelectors];
@ -509,7 +507,7 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
if (version[0] < 5 || (version[0] == 5 && version[1] < 5)) //5.5 down if (version < (5, 5)) //5.5 down
{ {
m_BoolValues = reader.ReadBooleanArray(); m_BoolValues = reader.ReadBooleanArray();
reader.AlignStream(); reader.AlignStream();
@ -517,7 +515,7 @@ namespace AssetStudio
m_FloatValues = reader.ReadSingleArray(); m_FloatValues = reader.ReadSingleArray();
} }
if (version[0] < 4 || (version[0] == 4 && version[1] < 3)) //4.3 down if (version < (4, 3)) //4.3 down
{ {
m_VectorValues = reader.ReadVector4Array(); m_VectorValues = reader.ReadVector4Array();
} }
@ -527,7 +525,7 @@ namespace AssetStudio
m_PositionValues = new Vector3[numPosValues]; m_PositionValues = new Vector3[numPosValues];
for (int i = 0; i < numPosValues; i++) for (int i = 0; i < numPosValues; i++)
{ {
m_PositionValues[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4(); //5.4 and up m_PositionValues[i] = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4(); //5.4 and up
} }
m_QuaternionValues = reader.ReadVector4Array(); m_QuaternionValues = reader.ReadVector4Array();
@ -536,10 +534,10 @@ namespace AssetStudio
m_ScaleValues = new Vector3[numScaleValues]; m_ScaleValues = new Vector3[numScaleValues];
for (int i = 0; i < numScaleValues; i++) for (int i = 0; i < numScaleValues; i++)
{ {
m_ScaleValues[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4(); //5.4 and up m_ScaleValues[i] = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4(); //5.4 and up
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5)) //5.5 and up if (version >= (5, 5)) //5.5 and up
{ {
m_FloatValues = reader.ReadSingleArray(); m_FloatValues = reader.ReadSingleArray();
m_IntValues = reader.ReadInt32Array(); m_IntValues = reader.ReadInt32Array();

View File

@ -42,7 +42,7 @@ namespace AssetStudio
var m_MainAsset = new AssetInfo(reader); var m_MainAsset = new AssetInfo(reader);
if (version[0] == 5 && version[1] == 4) //5.4.x if (version == (5, 4)) //5.4.x
{ {
var m_ClassVersionMapSize = reader.ReadInt32(); var m_ClassVersionMapSize = reader.ReadInt32();
for (var i = 0; i < m_ClassVersionMapSize; i++) for (var i = 0; i < m_ClassVersionMapSize; i++)
@ -52,12 +52,12 @@ namespace AssetStudio
} }
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 2)) //4.2 and up if (version >= (4, 2)) //4.2 and up
{ {
var m_RuntimeCompatibility = reader.ReadUInt32(); var m_RuntimeCompatibility = reader.ReadUInt32();
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
m_AssetBundleName = reader.ReadAlignedString(); m_AssetBundleName = reader.ReadAlignedString();

View File

@ -33,7 +33,7 @@ namespace AssetStudio
public AudioClip(ObjectReader reader) : base(reader) public AudioClip(ObjectReader reader) : base(reader)
{ {
if (version[0] < 5) if (version < 5)
{ {
m_Format = reader.ReadInt32(); m_Format = reader.ReadInt32();
m_Type = (FMODSoundType)reader.ReadInt32(); m_Type = (FMODSoundType)reader.ReadInt32();
@ -41,7 +41,7 @@ namespace AssetStudio
m_UseHardware = reader.ReadBoolean(); m_UseHardware = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
if (version[0] >= 4 || (version[0] == 3 && version[1] >= 2)) //3.2.0 to 5 if (version >= (3, 2)) //3.2.0 to 5
{ {
int m_Stream = reader.ReadInt32(); int m_Stream = reader.ReadInt32();
m_Size = reader.ReadInt32(); m_Size = reader.ReadInt32();

View File

@ -23,7 +23,7 @@ namespace AssetStudio
public Limit(ObjectReader reader) public Limit(ObjectReader reader)
{ {
var version = reader.version; var version = reader.version;
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up if (version >= (5, 4))//5.4 and up
{ {
m_Min = reader.ReadVector3(); m_Min = reader.ReadVector3();
m_Max = reader.ReadVector3(); m_Max = reader.ReadVector3();
@ -50,7 +50,7 @@ namespace AssetStudio
var version = reader.version; var version = reader.version;
m_PreQ = reader.ReadVector4(); m_PreQ = reader.ReadVector4();
m_PostQ = reader.ReadVector4(); m_PostQ = reader.ReadVector4();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up if (version >= (5, 4)) //5.4 and up
{ {
m_Sgn = reader.ReadVector3(); m_Sgn = reader.ReadVector3();
} }
@ -189,7 +189,7 @@ namespace AssetStudio
m_LeftHand = new Hand(reader); m_LeftHand = new Hand(reader);
m_RightHand = new Hand(reader); m_RightHand = new Hand(reader);
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down if (version < (2018, 2)) //2018.2 down
{ {
int numHandles = reader.ReadInt32(); int numHandles = reader.ReadInt32();
m_Handles = new Handle[numHandles]; m_Handles = new Handle[numHandles];
@ -210,7 +210,7 @@ namespace AssetStudio
m_HumanBoneMass = reader.ReadSingleArray(); m_HumanBoneMass = reader.ReadSingleArray();
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down if (version < (2018, 2)) //2018.2 down
{ {
m_ColliderIndex = reader.ReadInt32Array(); m_ColliderIndex = reader.ReadInt32Array();
} }
@ -225,7 +225,7 @@ namespace AssetStudio
m_FeetSpacing = reader.ReadSingle(); m_FeetSpacing = reader.ReadSingle();
m_HasLeftHand = reader.ReadBoolean(); m_HasLeftHand = reader.ReadBoolean();
m_HasRightHand = reader.ReadBoolean(); m_HasRightHand = reader.ReadBoolean();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2)) //5.2 and up if (version >= (5, 2)) //5.2 and up
{ {
m_HasTDoF = reader.ReadBoolean(); m_HasTDoF = reader.ReadBoolean();
} }
@ -254,7 +254,7 @@ namespace AssetStudio
m_AvatarSkeleton = new Skeleton(reader); m_AvatarSkeleton = new Skeleton(reader);
m_AvatarSkeletonPose = new SkeletonPose(reader); m_AvatarSkeletonPose = new SkeletonPose(reader);
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_DefaultPose = new SkeletonPose(reader); m_DefaultPose = new SkeletonPose(reader);
@ -265,7 +265,7 @@ namespace AssetStudio
m_HumanSkeletonIndexArray = reader.ReadInt32Array(); m_HumanSkeletonIndexArray = reader.ReadInt32Array();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_HumanSkeletonReverseIndexArray = reader.ReadInt32Array(); m_HumanSkeletonReverseIndexArray = reader.ReadInt32Array();
} }
@ -273,7 +273,7 @@ namespace AssetStudio
m_RootMotionBoneIndex = reader.ReadInt32(); m_RootMotionBoneIndex = reader.ReadInt32();
m_RootMotionBoneX = new xform(reader); m_RootMotionBoneX = new xform(reader);
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_RootMotionSkeleton = new Skeleton(reader); m_RootMotionSkeleton = new Skeleton(reader);
m_RootMotionSkeletonPose = new SkeletonPose(reader); m_RootMotionSkeletonPose = new SkeletonPose(reader);

View File

@ -11,7 +11,7 @@ namespace AssetStudio
public Font(ObjectReader reader) : base(reader) public Font(ObjectReader reader) : base(reader)
{ {
if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5 and up if (version >= (5, 5))//5.5 and up
{ {
var m_LineSpacing = reader.ReadSingle(); var m_LineSpacing = reader.ReadSingle();
var m_DefaultMaterial = new PPtr<Material>(reader); var m_DefaultMaterial = new PPtr<Material>(reader);
@ -43,7 +43,7 @@ namespace AssetStudio
{ {
int m_AsciiStartOffset = reader.ReadInt32(); int m_AsciiStartOffset = reader.ReadInt32();
if (version[0] <= 3) if (version <= 3)
{ {
int m_FontCountX = reader.ReadInt32(); int m_FontCountX = reader.ReadInt32();
int m_FontCountY = reader.ReadInt32(); int m_FontCountY = reader.ReadInt32();
@ -52,7 +52,7 @@ namespace AssetStudio
float m_Kerning = reader.ReadSingle(); float m_Kerning = reader.ReadSingle();
float m_LineSpacing = reader.ReadSingle(); float m_LineSpacing = reader.ReadSingle();
if (version[0] <= 3) if (version <= 3)
{ {
int m_PerCharacterKerning_size = reader.ReadInt32(); int m_PerCharacterKerning_size = reader.ReadInt32();
for (int i = 0; i < m_PerCharacterKerning_size; i++) for (int i = 0; i < m_PerCharacterKerning_size; i++)
@ -86,7 +86,7 @@ namespace AssetStudio
float vertheight = reader.ReadSingle(); float vertheight = reader.ReadSingle();
float width = reader.ReadSingle(); float width = reader.ReadSingle();
if (version[0] >= 4) if (version >= 4)
{ {
var flipped = reader.ReadBoolean(); var flipped = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
@ -103,7 +103,7 @@ namespace AssetStudio
float second = reader.ReadSingle(); float second = reader.ReadSingle();
} }
if (version[0] <= 3) if (version <= 3)
{ {
var m_GridFont = reader.ReadBoolean(); var m_GridFont = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();

View File

@ -16,7 +16,7 @@
m_FilterMode = reader.ReadInt32(); m_FilterMode = reader.ReadInt32();
m_Aniso = reader.ReadInt32(); m_Aniso = reader.ReadInt32();
m_MipBias = reader.ReadSingle(); m_MipBias = reader.ReadSingle();
if (version[0] >= 2017)//2017.x and up if (version >= 2017)//2017.x and up
{ {
m_WrapMode = reader.ReadInt32(); //m_WrapU m_WrapMode = reader.ReadInt32(); //m_WrapU
int m_WrapV = reader.ReadInt32(); int m_WrapV = reader.ReadInt32();

View File

@ -23,7 +23,7 @@ namespace AssetStudio
m_Components = new PPtr<Component>[m_Component_size]; m_Components = new PPtr<Component>[m_Component_size];
for (int i = 0; i < m_Component_size; i++) for (int i = 0; i < m_Component_size; i++)
{ {
if ((version[0] == 5 && version[1] < 5) || version[0] < 5) //5.5 down if (version < (5, 5)) //5.5 down
{ {
int first = reader.ReadInt32(); int first = reader.ReadInt32();
} }

View File

@ -34,7 +34,7 @@ namespace AssetStudio
m_TexEnvs[i] = new KeyValuePair<string, UnityTexEnv>(reader.ReadAlignedString(), new UnityTexEnv(reader)); m_TexEnvs[i] = new KeyValuePair<string, UnityTexEnv>(reader.ReadAlignedString(), new UnityTexEnv(reader));
} }
if (version[0] >= 2021) //2021.1 and up if (version >= 2021) //2021.1 and up
{ {
int m_IntsSize = reader.ReadInt32(); int m_IntsSize = reader.ReadInt32();
m_Ints = new KeyValuePair<string, int>[m_IntsSize]; m_Ints = new KeyValuePair<string, int>[m_IntsSize];
@ -69,39 +69,39 @@ namespace AssetStudio
{ {
m_Shader = new PPtr<Shader>(reader); m_Shader = new PPtr<Shader>(reader);
if (version[0] == 4 && version[1] >= 1) //4.x if (version == 4 && version.Minor >= 1) //4.x
{ {
var m_ShaderKeywords = reader.ReadStringArray(); var m_ShaderKeywords = reader.ReadStringArray();
} }
if (version[0] > 2021 || (version[0] == 2021 && version[1] >= 3)) //2021.3 and up if (version >= (2021, 3)) //2021.3 and up
{ {
var m_ValidKeywords = reader.ReadStringArray(); var m_ValidKeywords = reader.ReadStringArray();
var m_InvalidKeywords = reader.ReadStringArray(); var m_InvalidKeywords = reader.ReadStringArray();
} }
else if (version[0] >= 5) //5.0 ~ 2021.2 else if (version >= 5) //5.0 ~ 2021.2
{ {
var m_ShaderKeywords = reader.ReadAlignedString(); var m_ShaderKeywords = reader.ReadAlignedString();
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
var m_LightmapFlags = reader.ReadUInt32(); var m_LightmapFlags = reader.ReadUInt32();
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up if (version >= (5, 6)) //5.6 and up
{ {
var m_EnableInstancingVariants = reader.ReadBoolean(); var m_EnableInstancingVariants = reader.ReadBoolean();
//var m_DoubleSidedGI = a_Stream.ReadBoolean(); //2017 and up //var m_DoubleSidedGI = a_Stream.ReadBoolean(); //2017 and up
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
var m_CustomRenderQueue = reader.ReadInt32(); var m_CustomRenderQueue = reader.ReadInt32();
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 1)) //5.1 and up if (version >= (5, 1)) //5.1 and up
{ {
var stringTagMapSize = reader.ReadInt32(); var stringTagMapSize = reader.ReadInt32();
for (int i = 0; i < stringTagMapSize; i++) for (int i = 0; i < stringTagMapSize; i++)
@ -111,7 +111,7 @@ namespace AssetStudio
} }
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up if (version >= (5, 6)) //5.6 and up
{ {
var disabledShaderPasses = reader.ReadStringArray(); var disabledShaderPasses = reader.ReadStringArray();
} }

View File

@ -40,7 +40,7 @@ namespace AssetStudio
m_Vertices = new PackedFloatVector(reader); m_Vertices = new PackedFloatVector(reader);
m_UV = new PackedFloatVector(reader); m_UV = new PackedFloatVector(reader);
if (version[0] < 5) if (version < 5)
{ {
m_BindPoses = new PackedFloatVector(reader); m_BindPoses = new PackedFloatVector(reader);
} }
@ -49,15 +49,15 @@ namespace AssetStudio
m_Weights = new PackedIntVector(reader); m_Weights = new PackedIntVector(reader);
m_NormalSigns = new PackedIntVector(reader); m_NormalSigns = new PackedIntVector(reader);
m_TangentSigns = new PackedIntVector(reader); m_TangentSigns = new PackedIntVector(reader);
if (version[0] >= 5) if (version >= 5)
{ {
m_FloatColors = new PackedFloatVector(reader); m_FloatColors = new PackedFloatVector(reader);
} }
m_BoneIndices = new PackedIntVector(reader); m_BoneIndices = new PackedIntVector(reader);
m_Triangles = new PackedIntVector(reader); m_Triangles = new PackedIntVector(reader);
if (version[0] > 3 || (version[0] == 3 && version[1] >= 5)) //3.5 and up if (version >= (3, 5)) //3.5 and up
{ {
if (version[0] < 5) if (version < 5)
{ {
m_Colors = new PackedIntVector(reader); m_Colors = new PackedIntVector(reader);
} }
@ -87,7 +87,7 @@ namespace AssetStudio
channelMask = reader.ReadUInt32(); channelMask = reader.ReadUInt32();
offset = reader.ReadUInt32(); offset = reader.ReadUInt32();
if (version[0] < 4) //4.0 down if (version < 4) //4.0 down
{ {
stride = reader.ReadUInt32(); stride = reader.ReadUInt32();
align = reader.ReadUInt32(); align = reader.ReadUInt32();
@ -131,14 +131,14 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
if (version[0] < 2018)//2018 down if (version < 2018)//2018 down
{ {
m_CurrentChannels = reader.ReadUInt32(); m_CurrentChannels = reader.ReadUInt32();
} }
m_VertexCount = reader.ReadUInt32(); m_VertexCount = reader.ReadUInt32();
if (version[0] >= 4) //4.0 and up if (version >= 4) //4.0 and up
{ {
var m_ChannelsSize = reader.ReadInt32(); var m_ChannelsSize = reader.ReadInt32();
m_Channels = new ChannelInfo[m_ChannelsSize]; m_Channels = new ChannelInfo[m_ChannelsSize];
@ -148,9 +148,9 @@ namespace AssetStudio
} }
} }
if (version[0] < 5) //5.0 down if (version < 5) //5.0 down
{ {
if (version[0] < 4) if (version < 4)
{ {
m_Streams = new StreamInfo[4]; m_Streams = new StreamInfo[4];
} }
@ -164,7 +164,7 @@ namespace AssetStudio
m_Streams[i] = new StreamInfo(reader); m_Streams[i] = new StreamInfo(reader);
} }
if (version[0] < 4) //4.0 down if (version < 4) //4.0 down
{ {
GetChannels(version); GetChannels(version);
} }
@ -178,7 +178,7 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
} }
private void GetStreams(int[] version) private void GetStreams(UnityVersion version)
{ {
var streamCount = m_Channels.Max(x => x.stream) + 1; var streamCount = m_Channels.Max(x => x.stream) + 1;
m_Streams = new StreamInfo[streamCount]; m_Streams = new StreamInfo[streamCount];
@ -213,7 +213,7 @@ namespace AssetStudio
} }
} }
private void GetChannels(int[] version) private void GetChannels(UnityVersion version)
{ {
m_Channels = new ChannelInfo[6]; m_Channels = new ChannelInfo[6];
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
@ -305,20 +305,20 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
if (version[0] == 4 && version[1] < 3) //4.3 down if (version < (4, 3)) //4.3 down
{ {
var name = reader.ReadAlignedString(); var name = reader.ReadAlignedString();
} }
firstVertex = reader.ReadUInt32(); firstVertex = reader.ReadUInt32();
vertexCount = reader.ReadUInt32(); vertexCount = reader.ReadUInt32();
if (version[0] == 4 && version[1] < 3) //4.3 down if (version < (4, 3)) //4.3 down
{ {
var aabbMinDelta = reader.ReadVector3(); var aabbMinDelta = reader.ReadVector3();
var aabbMaxDelta = reader.ReadVector3(); var aabbMaxDelta = reader.ReadVector3();
} }
hasNormals = reader.ReadBoolean(); hasNormals = reader.ReadBoolean();
hasTangents = reader.ReadBoolean(); hasTangents = reader.ReadBoolean();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
reader.AlignStream(); reader.AlignStream();
} }
@ -352,7 +352,7 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
int numVerts = reader.ReadInt32(); int numVerts = reader.ReadInt32();
vertices = new BlendShapeVertex[numVerts]; vertices = new BlendShapeVertex[numVerts];
@ -425,17 +425,17 @@ namespace AssetStudio
indexCount = reader.ReadUInt32(); indexCount = reader.ReadUInt32();
topology = (GfxPrimitiveType)reader.ReadInt32(); topology = (GfxPrimitiveType)reader.ReadInt32();
if (version[0] < 4) //4.0 down if (version < 4) //4.0 down
{ {
triangleCount = reader.ReadUInt32(); triangleCount = reader.ReadUInt32();
} }
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up if (version >= (2017, 3)) //2017.3 and up
{ {
baseVertex = reader.ReadUInt32(); baseVertex = reader.ReadUInt32();
} }
if (version[0] >= 3) //3.0 and up if (version >= 3) //3.0 and up
{ {
firstVertex = reader.ReadUInt32(); firstVertex = reader.ReadUInt32();
vertexCount = reader.ReadUInt32(); vertexCount = reader.ReadUInt32();
@ -474,12 +474,12 @@ namespace AssetStudio
public Mesh(ObjectReader reader) : base(reader) public Mesh(ObjectReader reader) : base(reader)
{ {
if (version[0] < 3 || (version[0] == 3 && version[1] < 5)) //3.5 down if (version < (3, 5)) //3.5 down
{ {
m_Use16BitIndices = reader.ReadInt32() > 0; m_Use16BitIndices = reader.ReadInt32() > 0;
} }
if (version[0] == 2 && version[1] <= 5) //2.5 and down if (version <= (2, 5)) //2.5 and down
{ {
int m_IndexBuffer_size = reader.ReadInt32(); int m_IndexBuffer_size = reader.ReadInt32();
@ -505,21 +505,21 @@ namespace AssetStudio
m_SubMeshes[i] = new SubMesh(reader); m_SubMeshes[i] = new SubMesh(reader);
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 1)) //4.1 and up if (version >= (4, 1)) //4.1 and up
{ {
m_Shapes = new BlendShapeData(reader); m_Shapes = new BlendShapeData(reader);
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_BindPose = reader.ReadMatrixArray(); m_BindPose = reader.ReadMatrixArray();
m_BoneNameHashes = reader.ReadUInt32Array(); m_BoneNameHashes = reader.ReadUInt32Array();
var m_RootBoneNameHash = reader.ReadUInt32(); var m_RootBoneNameHash = reader.ReadUInt32();
} }
if (version[0] > 2 || (version[0] == 2 && version[1] >= 6)) //2.6.0 and up if (version >= (2, 6)) //2.6.0 and up
{ {
if (version[0] >= 2019) //2019 and up if (version >= 2019) //2019 and up
{ {
var m_BonesAABBSize = reader.ReadInt32(); var m_BonesAABBSize = reader.ReadInt32();
var m_BonesAABB = new MinMaxAABB[m_BonesAABBSize]; var m_BonesAABB = new MinMaxAABB[m_BonesAABBSize];
@ -532,9 +532,9 @@ namespace AssetStudio
} }
var m_MeshCompression = reader.ReadByte(); var m_MeshCompression = reader.ReadByte();
if (version[0] >= 4) if (version >= 4)
{ {
if (version[0] < 5) if (version < 5)
{ {
var m_StreamCompression = reader.ReadByte(); var m_StreamCompression = reader.ReadByte();
} }
@ -545,9 +545,9 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
//Unity fixed it in 2017.3.1p1 and later versions //Unity fixed it in 2017.3.1p1 and later versions
if ((version[0] > 2017 || (version[0] == 2017 && version[1] >= 4)) || //2017.4 if (version >= (2017, 4) //2017.4
((version[0] == 2017 && version[1] == 3 && version[2] == 1) && buildType.IsPatch) || //fixed after 2017.3.1px || version == (2017, 3, 1) && buildType.IsPatch //fixed after 2017.3.1px
((version[0] == 2017 && version[1] == 3) && m_MeshCompression == 0))//2017.3.xfx with no compression || version == (2017, 3) && m_MeshCompression == 0)//2017.3.xfx with no compression
{ {
var m_IndexFormat = reader.ReadInt32(); var m_IndexFormat = reader.ReadInt32();
m_Use16BitIndices = m_IndexFormat == 0; m_Use16BitIndices = m_IndexFormat == 0;
@ -569,7 +569,7 @@ namespace AssetStudio
} }
} }
if (version[0] < 3 || (version[0] == 3 && version[1] < 5)) //3.4.2 and earlier if (version < (3, 5)) //3.4.2 and earlier
{ {
m_VertexCount = reader.ReadInt32(); m_VertexCount = reader.ReadInt32();
m_Vertices = reader.ReadSingleArray(m_VertexCount * 3); //Vector3 m_Vertices = reader.ReadSingleArray(m_VertexCount * 3); //Vector3
@ -586,7 +586,7 @@ namespace AssetStudio
m_UV1 = reader.ReadSingleArray(reader.ReadInt32() * 2); //Vector2 m_UV1 = reader.ReadSingleArray(reader.ReadInt32() * 2); //Vector2
if (version[0] == 2 && version[1] <= 5) //2.5 and down if (version <= (2, 5)) //2.5 and down
{ {
int m_TangentSpace_size = reader.ReadInt32(); int m_TangentSpace_size = reader.ReadInt32();
m_Normals = new float[m_TangentSpace_size * 3]; m_Normals = new float[m_TangentSpace_size * 3];
@ -611,7 +611,7 @@ namespace AssetStudio
} }
else else
{ {
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down if (version < (2018, 2)) //2018.2 down
{ {
m_Skin = new BoneWeights4[reader.ReadInt32()]; m_Skin = new BoneWeights4[reader.ReadInt32()];
for (int s = 0; s < m_Skin.Length; s++) for (int s = 0; s < m_Skin.Length; s++)
@ -620,7 +620,7 @@ namespace AssetStudio
} }
} }
if (version[0] == 3 || (version[0] == 4 && version[1] <= 2)) //4.2 and down if (version <= (4, 2)) //4.2 and down
{ {
m_BindPose = reader.ReadMatrixArray(); m_BindPose = reader.ReadMatrixArray();
} }
@ -628,14 +628,14 @@ namespace AssetStudio
m_VertexData = new VertexData(reader); m_VertexData = new VertexData(reader);
} }
if (version[0] > 2 || (version[0] == 2 && version[1] >= 6)) //2.6.0 and later if (version >= (2, 6)) //2.6.0 and later
{ {
m_CompressedMesh = new CompressedMesh(reader); m_CompressedMesh = new CompressedMesh(reader);
} }
reader.Position += 24; //AABB m_LocalAABB reader.Position += 24; //AABB m_LocalAABB
if (version[0] < 3 || (version[0] == 3 && version[1] <= 4)) //3.4.2 and earlier if (version <= (3, 4)) //3.4.2 and earlier
{ {
int m_Colors_size = reader.ReadInt32(); int m_Colors_size = reader.ReadInt32();
m_Colors = new float[m_Colors_size * 4]; m_Colors = new float[m_Colors_size * 4];
@ -651,12 +651,12 @@ namespace AssetStudio
int m_MeshUsageFlags = reader.ReadInt32(); int m_MeshUsageFlags = reader.ReadInt32();
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up if (version >= (2022, 1)) //2022.1 and up
{ {
int m_CookingOptions = reader.ReadInt32(); int m_CookingOptions = reader.ReadInt32();
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
var m_BakedConvexCollisionMesh = reader.ReadUInt8Array(); var m_BakedConvexCollisionMesh = reader.ReadUInt8Array();
reader.AlignStream(); reader.AlignStream();
@ -664,14 +664,14 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up if (version >= (2018, 2)) //2018.2 and up
{ {
var m_MeshMetrics = new float[2]; var m_MeshMetrics = new float[2];
m_MeshMetrics[0] = reader.ReadSingle(); m_MeshMetrics[0] = reader.ReadSingle();
m_MeshMetrics[1] = reader.ReadSingle(); m_MeshMetrics[1] = reader.ReadSingle();
} }
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 3)) //2018.3 and up if (version >= (2018, 3)) //2018.3 and up
{ {
reader.AlignStream(); reader.AlignStream();
m_StreamData = new StreamingInfo(reader); m_StreamData = new StreamingInfo(reader);
@ -690,12 +690,12 @@ namespace AssetStudio
m_VertexData.m_DataSize = resourceReader.GetData(); m_VertexData.m_DataSize = resourceReader.GetData();
} }
} }
if (version[0] > 3 || (version[0] == 3 && version[1] >= 5)) //3.5 and up if (version >= (3, 5)) //3.5 and up
{ {
ReadVertexData(); ReadVertexData();
} }
if (version[0] > 2 || (version[0] == 2 && version[1] >= 6)) //2.6.0 and later if (version >= (2, 6)) //2.6.0 and later
{ {
DecompressCompressedMesh(); DecompressCompressedMesh();
} }
@ -716,7 +716,7 @@ namespace AssetStudio
var channelMask = new BitArray(new[] { (int)m_Stream.channelMask }); var channelMask = new BitArray(new[] { (int)m_Stream.channelMask });
if (channelMask.Get(chn)) if (channelMask.Get(chn))
{ {
if (version[0] < 2018 && chn == 2 && m_Channel.format == 2) //kShaderChannelColor && kChannelFormatColor if (version < 2018 && chn == 2 && m_Channel.format == 2) //kShaderChannelColor && kChannelFormatColor
{ {
m_Channel.dimension = 4; m_Channel.dimension = 4;
} }
@ -752,7 +752,7 @@ namespace AssetStudio
else else
componentsFloatArray = MeshHelper.BytesToFloatArray(componentBytes, vertexFormat); componentsFloatArray = MeshHelper.BytesToFloatArray(componentBytes, vertexFormat);
if (version[0] >= 2018) if (version >= 2018)
{ {
switch (chn) switch (chn)
{ {
@ -841,7 +841,7 @@ namespace AssetStudio
m_UV1 = componentsFloatArray; m_UV1 = componentsFloatArray;
break; break;
case 5: case 5:
if (version[0] >= 5) //kShaderChannelTexCoord2 if (version >= 5) //kShaderChannelTexCoord2
{ {
m_UV2 = componentsFloatArray; m_UV2 = componentsFloatArray;
} }
@ -906,7 +906,7 @@ namespace AssetStudio
} }
} }
//BindPose //BindPose
if (version[0] < 5) if (version < 5)
{ {
if (m_CompressedMesh.m_BindPoses.m_NumItems > 0) if (m_CompressedMesh.m_BindPoses.m_NumItems > 0)
{ {
@ -983,7 +983,7 @@ namespace AssetStudio
} }
} }
//FloatColor //FloatColor
if (version[0] >= 5) if (version >= 5)
{ {
if (m_CompressedMesh.m_FloatColors.m_NumItems > 0) if (m_CompressedMesh.m_FloatColors.m_NumItems > 0)
{ {
@ -1074,7 +1074,7 @@ namespace AssetStudio
m_Indices.Add(m_IndexBuffer[firstIndex + i + 2]); m_Indices.Add(m_IndexBuffer[firstIndex + i + 2]);
} }
} }
else if (version[0] < 4 || topology == GfxPrimitiveType.TriangleStrip) else if (version < 4 || topology == GfxPrimitiveType.TriangleStrip)
{ {
// de-stripify : // de-stripify :
uint triIndex = 0; uint triIndex = 0;
@ -1238,9 +1238,9 @@ namespace AssetStudio
SInt32 SInt32
} }
public static VertexFormat ToVertexFormat(int format, int[] version) public static VertexFormat ToVertexFormat(int format, UnityVersion version)
{ {
if (version[0] < 2017) if (version < 2017)
{ {
switch ((VertexChannelFormat)format) switch ((VertexChannelFormat)format)
{ {
@ -1258,7 +1258,7 @@ namespace AssetStudio
throw new ArgumentOutOfRangeException(nameof(format), format, null); throw new ArgumentOutOfRangeException(nameof(format), format, null);
} }
} }
else if (version[0] < 2019) else if (version < 2019)
{ {
switch ((VertexFormat2017)format) switch ((VertexFormat2017)format)
{ {

View File

@ -13,11 +13,11 @@ namespace AssetStudio
public MonoScript(ObjectReader reader) : base(reader) public MonoScript(ObjectReader reader) : base(reader)
{ {
if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up if (version >= (3, 4)) //3.4 and up
{ {
var m_ExecutionOrder = reader.ReadInt32(); var m_ExecutionOrder = reader.ReadInt32();
} }
if (version[0] < 5) //5.0 down if (version < 5) //5.0 down
{ {
var m_PropertiesHash = reader.ReadUInt32(); var m_PropertiesHash = reader.ReadUInt32();
} }
@ -25,17 +25,17 @@ namespace AssetStudio
{ {
var m_PropertiesHash = reader.ReadBytes(16); var m_PropertiesHash = reader.ReadBytes(16);
} }
if (version[0] < 3) //3.0 down if (version < 3) //3.0 down
{ {
var m_PathName = reader.ReadAlignedString(); var m_PathName = reader.ReadAlignedString();
} }
m_ClassName = reader.ReadAlignedString(); m_ClassName = reader.ReadAlignedString();
if (version[0] >= 3) //3.0 and up if (version >= 3) //3.0 and up
{ {
m_Namespace = reader.ReadAlignedString(); m_Namespace = reader.ReadAlignedString();
} }
m_AssemblyName = reader.ReadAlignedString(); m_AssemblyName = reader.ReadAlignedString();
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down if (version < (2018, 2)) //2018.2 down
{ {
var m_IsEditorScript = reader.ReadBoolean(); var m_IsEditorScript = reader.ReadBoolean();
} }

View File

@ -11,7 +11,7 @@ namespace AssetStudio
public ObjectReader reader; public ObjectReader reader;
public long m_PathID; public long m_PathID;
[JsonIgnore] [JsonIgnore]
public int[] version; public UnityVersion version;
protected BuildType buildType; protected BuildType buildType;
[JsonIgnore] [JsonIgnore]
public BuildTarget platform; public BuildTarget platform;

View File

@ -12,7 +12,7 @@ namespace AssetStudio
public PlayerSettings(ObjectReader reader) : base(reader) public PlayerSettings(ObjectReader reader) : base(reader)
{ {
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4.0 nad up if (version >= (5, 4)) //5.4.0 and up
{ {
var productGUID = reader.ReadBytes(16); var productGUID = reader.ReadBytes(16);
} }
@ -23,12 +23,12 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
int defaultScreenOrientation = reader.ReadInt32(); int defaultScreenOrientation = reader.ReadInt32();
int targetDevice = reader.ReadInt32(); int targetDevice = reader.ReadInt32();
if (version[0] < 5 || (version[0] == 5 && version[1] < 3)) //5.3 down if (version < (5, 3)) //5.3 down
{ {
if (version[0] < 5) //5.0 down if (version < 5) //5.0 down
{ {
int targetPlatform = reader.ReadInt32(); //4.0 and up targetGlesGraphics int targetPlatform = reader.ReadInt32(); //4.0 and up targetGlesGraphics
if (version[0] > 4 || (version[0] == 4 && version[1] >= 6)) //4.6 and up if (version >= (4, 6)) //4.6 and up
{ {
var targetIOSGraphics = reader.ReadInt32(); var targetIOSGraphics = reader.ReadInt32();
} }
@ -40,7 +40,7 @@ namespace AssetStudio
var useOnDemandResources = reader.ReadBoolean(); var useOnDemandResources = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] > 3 || (version[0] == 3 && version[1] >= 5)) //3.5 and up if (version >= (3, 5)) //3.5 and up
{ {
var accelerometerFrequency = reader.ReadInt32(); var accelerometerFrequency = reader.ReadInt32();
} }

View File

@ -25,7 +25,7 @@ namespace AssetStudio
protected Renderer(ObjectReader reader) : base(reader) protected Renderer(ObjectReader reader) : base(reader)
{ {
if (version[0] < 5) //5.0 down if (version < 5) //5.0 down
{ {
var m_Enabled = reader.ReadBoolean(); var m_Enabled = reader.ReadBoolean();
var m_CastShadows = reader.ReadBoolean(); var m_CastShadows = reader.ReadBoolean();
@ -34,27 +34,27 @@ namespace AssetStudio
} }
else //5.0 and up else //5.0 and up
{ {
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up if (version >= (5, 4)) //5.4 and up
{ {
var m_Enabled = reader.ReadBoolean(); var m_Enabled = reader.ReadBoolean();
var m_CastShadows = reader.ReadByte(); var m_CastShadows = reader.ReadByte();
var m_ReceiveShadows = reader.ReadByte(); var m_ReceiveShadows = reader.ReadByte();
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up if (version >= (2017, 2)) //2017.2 and up
{ {
var m_DynamicOccludee = reader.ReadByte(); var m_DynamicOccludee = reader.ReadByte();
} }
if (version[0] >= 2021) //2021.1 and up if (version >= 2021) //2021.1 and up
{ {
var m_StaticShadowCaster = reader.ReadByte(); var m_StaticShadowCaster = reader.ReadByte();
} }
var m_MotionVectors = reader.ReadByte(); var m_MotionVectors = reader.ReadByte();
var m_LightProbeUsage = reader.ReadByte(); var m_LightProbeUsage = reader.ReadByte();
var m_ReflectionProbeUsage = reader.ReadByte(); var m_ReflectionProbeUsage = reader.ReadByte();
if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up if (version >= (2019, 3)) //2019.3 and up
{ {
var m_RayTracingMode = reader.ReadByte(); var m_RayTracingMode = reader.ReadByte();
} }
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
var m_RayTraceProcedural = reader.ReadByte(); var m_RayTraceProcedural = reader.ReadByte();
} }
@ -69,12 +69,12 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] >= 2018) //2018 and up if (version >= 2018) //2018 and up
{ {
var m_RenderingLayerMask = reader.ReadUInt32(); var m_RenderingLayerMask = reader.ReadUInt32();
} }
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 3)) //2018.3 and up if (version >= (2018, 3)) //2018.3 and up
{ {
var m_RendererPriority = reader.ReadInt32(); var m_RendererPriority = reader.ReadInt32();
} }
@ -83,12 +83,12 @@ namespace AssetStudio
var m_LightmapIndexDynamic = reader.ReadUInt16(); var m_LightmapIndexDynamic = reader.ReadUInt16();
} }
if (version[0] >= 3) //3.0 and up if (version >= 3) //3.0 and up
{ {
var m_LightmapTilingOffset = reader.ReadVector4(); var m_LightmapTilingOffset = reader.ReadVector4();
} }
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
var m_LightmapTilingOffsetDynamic = reader.ReadVector4(); var m_LightmapTilingOffsetDynamic = reader.ReadVector4();
} }
@ -100,13 +100,13 @@ namespace AssetStudio
m_Materials[i] = new PPtr<Material>(reader); m_Materials[i] = new PPtr<Material>(reader);
} }
if (version[0] < 3) //3.0 down if (version < 3) //3.0 down
{ {
var m_LightmapTilingOffset = reader.ReadVector4(); var m_LightmapTilingOffset = reader.ReadVector4();
} }
else //3.0 and up else //3.0 and up
{ {
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5)) //5.5 and up if (version >= (5, 5)) //5.5 and up
{ {
m_StaticBatchInfo = new StaticBatchInfo(reader); m_StaticBatchInfo = new StaticBatchInfo(reader);
} }
@ -118,17 +118,17 @@ namespace AssetStudio
var m_StaticBatchRoot = new PPtr<Transform>(reader); var m_StaticBatchRoot = new PPtr<Transform>(reader);
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up if (version >= (5, 4)) //5.4 and up
{ {
var m_ProbeAnchor = new PPtr<Transform>(reader); var m_ProbeAnchor = new PPtr<Transform>(reader);
var m_LightProbeVolumeOverride = new PPtr<GameObject>(reader); var m_LightProbeVolumeOverride = new PPtr<GameObject>(reader);
} }
else if (version[0] > 3 || (version[0] == 3 && version[1] >= 5)) //3.5 - 5.3 else if (version >= (3, 5)) //3.5 - 5.3
{ {
var m_UseLightProbes = reader.ReadBoolean(); var m_UseLightProbes = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
if (version[0] >= 5)//5.0 and up if (version >= 5)//5.0 and up
{ {
var m_ReflectionProbeUsage = reader.ReadInt32(); var m_ReflectionProbeUsage = reader.ReadInt32();
} }
@ -136,9 +136,9 @@ namespace AssetStudio
var m_LightProbeAnchor = new PPtr<Transform>(reader); //5.0 and up m_ProbeAnchor var m_LightProbeAnchor = new PPtr<Transform>(reader); //5.0 and up m_ProbeAnchor
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
if (version[0] == 4 && version[1] == 3) //4.3 if (version == (4, 3)) //4.3
{ {
var m_SortingLayer = reader.ReadInt16(); var m_SortingLayer = reader.ReadInt16();
} }

View File

@ -243,14 +243,14 @@ namespace AssetStudio
} }
rtSeparateBlend = reader.ReadBoolean(); rtSeparateBlend = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up if (version >= (2017, 2)) //2017.2 and up
{ {
zClip = new SerializedShaderFloatValue(reader); zClip = new SerializedShaderFloatValue(reader);
} }
zTest = new SerializedShaderFloatValue(reader); zTest = new SerializedShaderFloatValue(reader);
zWrite = new SerializedShaderFloatValue(reader); zWrite = new SerializedShaderFloatValue(reader);
culling = new SerializedShaderFloatValue(reader); culling = new SerializedShaderFloatValue(reader);
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
conservative = new SerializedShaderFloatValue(reader); conservative = new SerializedShaderFloatValue(reader);
} }
@ -359,7 +359,7 @@ namespace AssetStudio
m_NameIndex = reader.ReadInt32(); m_NameIndex = reader.ReadInt32();
m_Index = reader.ReadInt32(); m_Index = reader.ReadInt32();
m_SamplerIndex = reader.ReadInt32(); m_SamplerIndex = reader.ReadInt32();
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up if (version >= (2017, 3)) //2017.3 and up
{ {
var m_MultiSampled = reader.ReadBoolean(); var m_MultiSampled = reader.ReadBoolean();
} }
@ -380,7 +380,7 @@ namespace AssetStudio
m_NameIndex = reader.ReadInt32(); m_NameIndex = reader.ReadInt32();
m_Index = reader.ReadInt32(); m_Index = reader.ReadInt32();
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
m_ArraySize = reader.ReadInt32(); m_ArraySize = reader.ReadInt32();
} }
@ -415,7 +415,7 @@ namespace AssetStudio
{ {
m_VectorParams[i] = new VectorParameter(reader); m_VectorParams[i] = new VectorParameter(reader);
} }
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up if (version >= (2017, 3)) //2017.3 and up
{ {
int numStructParams = reader.ReadInt32(); int numStructParams = reader.ReadInt32();
m_StructParams = new StructParameter[numStructParams]; m_StructParams = new StructParameter[numStructParams];
@ -426,11 +426,8 @@ namespace AssetStudio
} }
m_Size = reader.ReadInt32(); m_Size = reader.ReadInt32();
if ((version[0] == 2020 && version[1] > 3) || if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up || version >= (2021, 1, 4)) //2021.1.4f1 and up
(version[0] > 2021) ||
(version[0] == 2021 && version[1] > 1) ||
(version[0] == 2021 && version[1] == 1 && version[2] >= 4)) //2021.1.4f1 and up
{ {
m_IsPartialCB = reader.ReadBoolean(); m_IsPartialCB = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
@ -584,7 +581,7 @@ namespace AssetStudio
m_BlobIndex = reader.ReadUInt32(); m_BlobIndex = reader.ReadUInt32();
m_Channels = new ParserBindChannels(reader); m_Channels = new ParserBindChannels(reader);
if ((version[0] >= 2019 && version[0] < 2021) || (version[0] == 2021 && version[1] < 2)) //2019 ~2021.1 if (version.IsInRange(2019, (2021, 2))) //2019 ~2021.1
{ {
var m_GlobalKeywordIndices = reader.ReadUInt16Array(); var m_GlobalKeywordIndices = reader.ReadUInt16Array();
reader.AlignStream(); reader.AlignStream();
@ -594,7 +591,7 @@ namespace AssetStudio
else else
{ {
m_KeywordIndices = reader.ReadUInt16Array(); m_KeywordIndices = reader.ReadUInt16Array();
if (version[0] >= 2017) //2017 and up if (version >= 2017) //2017 and up
{ {
reader.AlignStream(); reader.AlignStream();
} }
@ -604,11 +601,8 @@ namespace AssetStudio
m_GpuProgramType = (ShaderGpuProgramType)reader.ReadSByte(); m_GpuProgramType = (ShaderGpuProgramType)reader.ReadSByte();
reader.AlignStream(); reader.AlignStream();
if ((version[0] == 2020 && version[1] > 3) || if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up || version >= (2021, 1, 1)) //2021.1.1f1 and up
(version[0] > 2021) ||
(version[0] == 2021 && version[1] > 1) ||
(version[0] == 2021 && version[1] == 1 && version[2] >= 1)) //2021.1.1f1 and up
{ {
m_Parameters = new SerializedProgramParameters(reader); m_Parameters = new SerializedProgramParameters(reader);
} }
@ -663,7 +657,7 @@ namespace AssetStudio
m_UAVParams[i] = new UAVParameter(reader); m_UAVParams[i] = new UAVParameter(reader);
} }
if (version[0] >= 2017) //2017 and up if (version >= 2017) //2017 and up
{ {
int numSamplers = reader.ReadInt32(); int numSamplers = reader.ReadInt32();
m_Samplers = new SamplerParameter[numSamplers]; m_Samplers = new SamplerParameter[numSamplers];
@ -674,9 +668,9 @@ namespace AssetStudio
} }
} }
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up if (version >= (2017, 2)) //2017.2 and up
{ {
if (version[0] >= 2021) //2021.1 and up if (version >= 2021) //2021.1 and up
{ {
var m_ShaderRequirements = reader.ReadInt64(); var m_ShaderRequirements = reader.ReadInt64();
} }
@ -705,16 +699,13 @@ namespace AssetStudio
m_SubPrograms[i] = new SerializedSubProgram(reader); m_SubPrograms[i] = new SerializedSubProgram(reader);
} }
if ((version[0] == 2020 && version[1] > 3) || if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 and up || version >= (2021, 1, 1)) //2021.1.1f1 and up
(version[0] > 2021) ||
(version[0] == 2021 && version[1] > 1) ||
(version[0] == 2021 && version[1] == 1 && version[2] >= 1)) //2021.1.1f1 and up
{ {
m_CommonParameters = new SerializedProgramParameters(reader); m_CommonParameters = new SerializedProgramParameters(reader);
} }
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 1)) //2022.1 and up if (version >= (2022, 1)) //2022.1 and up
{ {
m_SerializedKeywordStateMask = reader.ReadUInt16Array(); m_SerializedKeywordStateMask = reader.ReadUInt16Array();
reader.AlignStream(); reader.AlignStream();
@ -756,7 +747,7 @@ namespace AssetStudio
{ {
var version = reader.version; var version = reader.version;
if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up if (version >= (2020, 2)) //2020.2 and up
{ {
int numEditorDataHash = reader.ReadInt32(); int numEditorDataHash = reader.ReadInt32();
m_EditorDataHash = new Hash128[numEditorDataHash]; m_EditorDataHash = new Hash128[numEditorDataHash];
@ -767,7 +758,7 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
m_Platforms = reader.ReadUInt8Array(); m_Platforms = reader.ReadUInt8Array();
reader.AlignStream(); reader.AlignStream();
if (version[0] < 2021 || (version[0] == 2021 && version[1] < 2)) //2021.1 and down if (version <= (2021, 1)) //2021.1 and down
{ {
m_LocalKeywordMask = reader.ReadUInt16Array(); m_LocalKeywordMask = reader.ReadUInt16Array();
reader.AlignStream(); reader.AlignStream();
@ -791,12 +782,12 @@ namespace AssetStudio
progGeometry = new SerializedProgram(reader); progGeometry = new SerializedProgram(reader);
progHull = new SerializedProgram(reader); progHull = new SerializedProgram(reader);
progDomain = new SerializedProgram(reader); progDomain = new SerializedProgram(reader);
if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up if (version >= (2019, 3)) //2019.3 and up
{ {
progRayTracing = new SerializedProgram(reader); progRayTracing = new SerializedProgram(reader);
} }
m_HasInstancingVariant = reader.ReadBoolean(); m_HasInstancingVariant = reader.ReadBoolean();
if (version[0] >= 2018) //2018 and up if (version >= 2018) //2018 and up
{ {
var m_HasProceduralInstancingVariant = reader.ReadBoolean(); var m_HasProceduralInstancingVariant = reader.ReadBoolean();
} }
@ -805,7 +796,7 @@ namespace AssetStudio
m_Name = reader.ReadAlignedString(); m_Name = reader.ReadAlignedString();
m_TextureName = reader.ReadAlignedString(); m_TextureName = reader.ReadAlignedString();
m_Tags = new SerializedTagMap(reader); m_Tags = new SerializedTagMap(reader);
if (version[0] == 2021 && version[1] >= 2) //2021.2 ~2021.x if (version == 2021 && version.Minor >= 2) //2021.2 ~2021.x
{ {
m_SerializedKeywordStateMask = reader.ReadUInt16Array(); m_SerializedKeywordStateMask = reader.ReadUInt16Array();
reader.AlignStream(); reader.AlignStream();
@ -898,7 +889,7 @@ namespace AssetStudio
m_SubShaders[i] = new SerializedSubShader(reader); m_SubShaders[i] = new SerializedSubShader(reader);
} }
if (version[0] > 2021 || (version[0] == 2021 && version[1] >= 2)) //2021.2 and up if (version >= (2021, 2)) //2021.2 and up
{ {
m_KeywordNames = reader.ReadStringArray(); m_KeywordNames = reader.ReadStringArray();
m_KeywordFlags = reader.ReadUInt8Array(); m_KeywordFlags = reader.ReadUInt8Array();
@ -916,7 +907,7 @@ namespace AssetStudio
m_Dependencies[i] = new SerializedShaderDependency(reader); m_Dependencies[i] = new SerializedShaderDependency(reader);
} }
if (version[0] >= 2021) //2021.1 and up if (version >= 2021) //2021.1 and up
{ {
int m_CustomEditorForRenderPipelinesSize = reader.ReadInt32(); int m_CustomEditorForRenderPipelinesSize = reader.ReadInt32();
m_CustomEditorForRenderPipelines = new SerializedCustomEditorForRenderPipeline[m_CustomEditorForRenderPipelinesSize]; m_CustomEditorForRenderPipelines = new SerializedCustomEditorForRenderPipeline[m_CustomEditorForRenderPipelinesSize];
@ -977,11 +968,11 @@ namespace AssetStudio
public Shader(ObjectReader reader) : base(reader) public Shader(ObjectReader reader) : base(reader)
{ {
if (version[0] == 5 && version[1] >= 5 || version[0] > 5) //5.5 and up if (version >= (5, 5)) //5.5 and up
{ {
m_ParsedForm = new SerializedShader(reader); m_ParsedForm = new SerializedShader(reader);
platforms = reader.ReadUInt32Array().Select(x => (ShaderCompilerPlatform)x).ToArray(); platforms = reader.ReadUInt32Array().Select(x => (ShaderCompilerPlatform)x).ToArray();
if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up if (version >= (2019, 3)) //2019.3 and up
{ {
offsets = reader.ReadUInt32ArrayArray(); offsets = reader.ReadUInt32ArrayArray();
compressedLengths = reader.ReadUInt32ArrayArray(); compressedLengths = reader.ReadUInt32ArrayArray();
@ -1002,7 +993,7 @@ namespace AssetStudio
new PPtr<Shader>(reader); new PPtr<Shader>(reader);
} }
if (version[0] >= 2018) if (version >= 2018)
{ {
var m_NonModifiableTexturesCount = reader.ReadInt32(); var m_NonModifiableTexturesCount = reader.ReadInt32();
for (int i = 0; i < m_NonModifiableTexturesCount; i++) for (int i = 0; i < m_NonModifiableTexturesCount; i++)
@ -1020,7 +1011,7 @@ namespace AssetStudio
m_Script = reader.ReadUInt8Array(); m_Script = reader.ReadUInt8Array();
reader.AlignStream(); reader.AlignStream();
var m_PathName = reader.ReadAlignedString(); var m_PathName = reader.ReadAlignedString();
if (version[0] == 5 && version[1] >= 3) //5.3 - 5.4 if (version == 5 && version.Minor >= 3) //5.3 - 5.4
{ {
decompressedSize = reader.ReadUInt32(); decompressedSize = reader.ReadUInt32();
m_SubProgramBlob = reader.ReadUInt8Array(); m_SubProgramBlob = reader.ReadUInt8Array();

View File

@ -18,7 +18,7 @@ namespace AssetStudio
var m_SkinNormals = reader.ReadBoolean(); //3.1.0 and below var m_SkinNormals = reader.ReadBoolean(); //3.1.0 and below
reader.AlignStream(); reader.AlignStream();
if (version[0] == 2 && version[1] < 6) //2.6 down if (version < (2, 6)) //2.6 down
{ {
var m_DisableAnimationWhenOffscreen = new PPtr<Animation>(reader); var m_DisableAnimationWhenOffscreen = new PPtr<Animation>(reader);
} }
@ -31,7 +31,7 @@ namespace AssetStudio
m_Bones[b] = new PPtr<Transform>(reader); m_Bones[b] = new PPtr<Transform>(reader);
} }
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up if (version >= (4, 3)) //4.3 and up
{ {
m_BlendShapeWeights = reader.ReadSingleArray(); m_BlendShapeWeights = reader.ReadSingleArray();
} }

View File

@ -68,7 +68,7 @@ namespace AssetStudio
var version = reader.version; var version = reader.version;
pos = reader.ReadVector3(); pos = reader.ReadVector3();
if (version[0] < 4 || (version[0] == 4 && version[1] <= 3)) //4.3 and down if (version <= (4, 3)) //4.3 and down
{ {
uv = reader.ReadVector2(); uv = reader.ReadVector2();
} }
@ -99,12 +99,12 @@ namespace AssetStudio
var version = reader.version; var version = reader.version;
texture = new PPtr<Texture2D>(reader); texture = new PPtr<Texture2D>(reader);
if (version[0] > 5 || (version[0] == 5 && version[1] >= 2)) //5.2 and up if (version >= (5, 2)) //5.2 and up
{ {
alphaTexture = new PPtr<Texture2D>(reader); alphaTexture = new PPtr<Texture2D>(reader);
} }
if (version[0] >= 2019) //2019 and up if (version >= 2019) //2019 and up
{ {
var secondaryTexturesSize = reader.ReadInt32(); var secondaryTexturesSize = reader.ReadInt32();
secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize]; secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize];
@ -114,7 +114,7 @@ namespace AssetStudio
} }
} }
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up if (version >= (5, 6)) //5.6 and up
{ {
var m_SubMeshesSize = reader.ReadInt32(); var m_SubMeshesSize = reader.ReadInt32();
m_SubMeshes = new SubMesh[m_SubMeshesSize]; m_SubMeshes = new SubMesh[m_SubMeshesSize];
@ -141,11 +141,11 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] >= 2018) //2018 and up if (version >= 2018) //2018 and up
{ {
m_Bindpose = reader.ReadMatrixArray(); m_Bindpose = reader.ReadMatrixArray();
if (version[0] == 2018 && version[1] < 2) //2018.2 down if (version < (2018, 2)) //2018.2 down
{ {
var m_SourceSkinSize = reader.ReadInt32(); var m_SourceSkinSize = reader.ReadInt32();
for (int i = 0; i < m_SourceSkinSize; i++) for (int i = 0; i < m_SourceSkinSize; i++)
@ -157,18 +157,18 @@ namespace AssetStudio
textureRect = new Rectf(reader); textureRect = new Rectf(reader);
textureRectOffset = reader.ReadVector2(); textureRectOffset = reader.ReadVector2();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up if (version >= (5, 6)) //5.6 and up
{ {
atlasRectOffset = reader.ReadVector2(); atlasRectOffset = reader.ReadVector2();
} }
settingsRaw = new SpriteSettings(reader); settingsRaw = new SpriteSettings(reader);
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up if (version >= (4, 5)) //4.5 and up
{ {
uvTransform = reader.ReadVector4(); uvTransform = reader.ReadVector4();
} }
if (version[0] >= 2017) //2017 and up if (version >= 2017) //2017 and up
{ {
downscaleMultiplier = reader.ReadSingle(); downscaleMultiplier = reader.ReadSingle();
} }
@ -210,28 +210,26 @@ namespace AssetStudio
{ {
m_Rect = new Rectf(reader); m_Rect = new Rectf(reader);
m_Offset = reader.ReadVector2(); m_Offset = reader.ReadVector2();
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up if (version >= (4, 5)) //4.5 and up
{ {
m_Border = reader.ReadVector4(); m_Border = reader.ReadVector4();
} }
m_PixelsToUnits = reader.ReadSingle(); m_PixelsToUnits = reader.ReadSingle();
if (version[0] > 5 if (version >= (5, 4, 2)
|| (version[0] == 5 && version[1] > 4) || version == (5, 4, 1) && buildType.IsPatch && version.Build >= 3) //5.4.1p3 and up
|| (version[0] == 5 && version[1] == 4 && version[2] >= 2)
|| (version[0] == 5 && version[1] == 4 && version[2] == 1 && buildType.IsPatch && version[3] >= 3)) //5.4.1p3 and up
{ {
m_Pivot = reader.ReadVector2(); m_Pivot = reader.ReadVector2();
} }
m_Extrude = reader.ReadUInt32(); m_Extrude = reader.ReadUInt32();
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3)) //5.3 and up if (version >= (5, 3)) //5.3 and up
{ {
m_IsPolygon = reader.ReadBoolean(); m_IsPolygon = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] >= 2017) //2017 and up if (version >= 2017) //2017 and up
{ {
var first = new Guid(reader.ReadBytes(16)); var first = new Guid(reader.ReadBytes(16));
var second = reader.ReadInt64(); var second = reader.ReadInt64();
@ -244,7 +242,7 @@ namespace AssetStudio
m_RD = new SpriteRenderData(reader); m_RD = new SpriteRenderData(reader);
if (version[0] >= 2017) //2017 and up if (version >= 2017) //2017 and up
{ {
var m_PhysicsShapeSize = reader.ReadInt32(); var m_PhysicsShapeSize = reader.ReadInt32();
m_PhysicsShape = new Vector2[m_PhysicsShapeSize][]; m_PhysicsShape = new Vector2[m_PhysicsShapeSize][];

View File

@ -22,14 +22,14 @@ namespace AssetStudio
alphaTexture = new PPtr<Texture2D>(reader); alphaTexture = new PPtr<Texture2D>(reader);
textureRect = new Rectf(reader); textureRect = new Rectf(reader);
textureRectOffset = reader.ReadVector2(); textureRectOffset = reader.ReadVector2();
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up if (version >= (2017, 2)) //2017.2 and up
{ {
atlasRectOffset = reader.ReadVector2(); atlasRectOffset = reader.ReadVector2();
} }
uvTransform = reader.ReadVector4(); uvTransform = reader.ReadVector4();
downscaleMultiplier = reader.ReadSingle(); downscaleMultiplier = reader.ReadSingle();
settingsRaw = new SpriteSettings(reader); settingsRaw = new SpriteSettings(reader);
if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up if (version >= (2020, 2)) //2020.2 and up
{ {
var secondaryTexturesSize = reader.ReadInt32(); var secondaryTexturesSize = reader.ReadInt32();
secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize]; secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize];

View File

@ -12,7 +12,7 @@
{ {
var version = reader.version; var version = reader.version;
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
offset = reader.ReadInt64(); offset = reader.ReadInt64();
} }

View File

@ -6,15 +6,15 @@
protected Texture(ObjectReader reader) : base(reader) protected Texture(ObjectReader reader) : base(reader)
{ {
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up if (version >= (2017, 3)) //2017.3 and up
{ {
if (version[0] < 2023 || (version[0] == 2023 && version[1] < 2)) //2023.2 down if (version < (2023, 2)) //2023.2 down
{ {
var m_ForcedFallbackFormat = reader.ReadInt32(); var m_ForcedFallbackFormat = reader.ReadInt32();
var m_DownscaleFallback = reader.ReadBoolean(); var m_DownscaleFallback = reader.ReadBoolean();
} }
if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up if (version >= (2020, 2)) //2020.2 and up
{ {
var m_IsAlphaChannelOptional = reader.ReadBoolean(); var m_IsAlphaChannelOptional = reader.ReadBoolean();
} }

View File

@ -78,12 +78,12 @@ namespace AssetStudio
m_Width = reader.ReadInt32(); m_Width = reader.ReadInt32();
m_Height = reader.ReadInt32(); m_Height = reader.ReadInt32();
m_CompleteImageSize = reader.ReadInt32(); m_CompleteImageSize = reader.ReadInt32();
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
var m_MipsStripped = reader.ReadInt32(); var m_MipsStripped = reader.ReadInt32();
} }
m_TextureFormat = (TextureFormat)reader.ReadInt32(); m_TextureFormat = (TextureFormat)reader.ReadInt32();
if (version[0] < 5 || (version[0] == 5 && version[1] < 2)) //5.2 down if (version < (5, 2)) //5.2 down
{ {
m_MipMap = reader.ReadBoolean(); m_MipMap = reader.ReadBoolean();
} }
@ -91,17 +91,17 @@ namespace AssetStudio
{ {
m_MipCount = reader.ReadInt32(); m_MipCount = reader.ReadInt32();
} }
if (version[0] > 2 || (version[0] == 2 && version[1] >= 6)) //2.6.0 and up if (version >= (2, 6)) //2.6.0 and up
{ {
var m_IsReadable = reader.ReadBoolean(); var m_IsReadable = reader.ReadBoolean();
} }
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
var m_IsPreProcessed = reader.ReadBoolean(); var m_IsPreProcessed = reader.ReadBoolean();
} }
if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up if (version >= (2019, 3)) //2019.3 and up
{ {
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 2)) //2022.2 and up if (version >= (2022, 2)) //2022.2 and up
{ {
var m_IgnoreMipmapLimit = reader.ReadBoolean(); var m_IgnoreMipmapLimit = reader.ReadBoolean();
reader.AlignStream(); reader.AlignStream();
@ -111,38 +111,35 @@ namespace AssetStudio
var m_IgnoreMasterTextureLimit = reader.ReadBoolean(); var m_IgnoreMasterTextureLimit = reader.ReadBoolean();
} }
} }
if (version[0] >= 3) //3.0.0 - 5.4 if (version.IsInRange(3, (5, 5))) //3.0.0 - 5.4
{ {
if (version[0] < 5 || (version[0] == 5 && version[1] <= 4)) var m_ReadAllowed = reader.ReadBoolean();
{
var m_ReadAllowed = reader.ReadBoolean();
}
} }
if (version[0] > 2022 || (version[0] == 2022 && version[1] >= 2)) //2022.2 and up if (version >= (2022, 2)) //2022.2 and up
{ {
var m_MipmapLimitGroupName = reader.ReadAlignedString(); var m_MipmapLimitGroupName = reader.ReadAlignedString();
} }
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up if (version >= (2018, 2)) //2018.2 and up
{ {
var m_StreamingMipmaps = reader.ReadBoolean(); var m_StreamingMipmaps = reader.ReadBoolean();
} }
reader.AlignStream(); reader.AlignStream();
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up if (version >= (2018, 2)) //2018.2 and up
{ {
var m_StreamingMipmapsPriority = reader.ReadInt32(); var m_StreamingMipmapsPriority = reader.ReadInt32();
} }
m_ImageCount = reader.ReadInt32(); m_ImageCount = reader.ReadInt32();
var m_TextureDimension = reader.ReadInt32(); var m_TextureDimension = reader.ReadInt32();
m_TextureSettings = new GLTextureSettings(reader); m_TextureSettings = new GLTextureSettings(reader);
if (version[0] >= 3) //3.0 and up if (version >= 3) //3.0 and up
{ {
var m_LightmapFormat = reader.ReadInt32(); var m_LightmapFormat = reader.ReadInt32();
} }
if (version[0] > 3 || (version[0] == 3 && version[1] >= 5)) //3.5.0 and up if (version >= (3, 5)) //3.5.0 and up
{ {
var m_ColorSpace = reader.ReadInt32(); var m_ColorSpace = reader.ReadInt32();
} }
if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up if (version >= (2020, 2)) //2020.2 and up
{ {
m_PlatformBlob = reader.ReadUInt8Array(); m_PlatformBlob = reader.ReadUInt8Array();
reader.AlignStream(); reader.AlignStream();
@ -152,7 +149,7 @@ namespace AssetStudio
m_PlatformBlob = Array.Empty<byte>(); m_PlatformBlob = Array.Empty<byte>();
} }
var image_data_size = reader.ReadInt32(); var image_data_size = reader.ReadInt32();
if (image_data_size == 0 && ((version[0] == 5 && version[1] >= 3) || version[0] > 5))//5.3.0 and up if (image_data_size == 0 && version >= (5, 3))//5.3.0 and up
{ {
m_StreamData = new StreamingInfo(reader); m_StreamData = new StreamingInfo(reader);
} }

View File

@ -30,7 +30,7 @@ namespace AssetStudio
m_MipCount = reader.ReadInt32(); m_MipCount = reader.ReadInt32();
m_DataSize = reader.ReadUInt32(); m_DataSize = reader.ReadUInt32();
m_TextureSettings = new GLTextureSettings(reader); m_TextureSettings = new GLTextureSettings(reader);
if (version[0] > 2020 || (version[0] == 2020 && version[1] >= 2)) //2020.2 and up if (version >= (2020, 2)) //2020.2 and up
{ {
var m_UsageMode = reader.ReadInt32(); var m_UsageMode = reader.ReadInt32();
} }

View File

@ -34,7 +34,7 @@ namespace AssetStudio
var m_ProxyHeight = reader.ReadUInt32(); var m_ProxyHeight = reader.ReadUInt32();
Width = reader.ReadUInt32(); Width = reader.ReadUInt32();
Height = reader.ReadUInt32(); Height = reader.ReadUInt32();
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up if (version >= (2017, 2)) //2017.2 and up
{ {
var m_PixelAspecRatioNum = reader.ReadUInt32(); var m_PixelAspecRatioNum = reader.ReadUInt32();
var m_PixelAspecRatioDen = reader.ReadUInt32(); var m_PixelAspecRatioDen = reader.ReadUInt32();
@ -46,7 +46,7 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
var m_AudioSampleRate = reader.ReadUInt32Array(); var m_AudioSampleRate = reader.ReadUInt32Array();
var m_AudioLanguage = reader.ReadStringArray(); var m_AudioLanguage = reader.ReadStringArray();
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
var m_VideoShadersSize = reader.ReadInt32(); var m_VideoShadersSize = reader.ReadInt32();
var m_VideoShaders = new PPtr<Shader>[m_VideoShadersSize]; var m_VideoShaders = new PPtr<Shader>[m_VideoShadersSize];
@ -57,7 +57,7 @@ namespace AssetStudio
} }
m_ExternalResources = new StreamedResource(reader); m_ExternalResources = new StreamedResource(reader);
m_HasSplitAlpha = reader.ReadBoolean(); m_HasSplitAlpha = reader.ReadBoolean();
if (version[0] >= 2020) //2020.1 and up if (version >= 2020) //2020.1 and up
{ {
var m_sRGB = reader.ReadBoolean(); var m_sRGB = reader.ReadBoolean();
} }

View File

@ -17,7 +17,7 @@ namespace AssetStudio
public BuildTarget platform; public BuildTarget platform;
public SerializedFileFormatVersion m_Version; public SerializedFileFormatVersion m_Version;
public int[] version => assetsFile.version; public UnityVersion version => assetsFile.version;
public BuildType buildType => assetsFile.buildType; public BuildType buildType => assetsFile.buildType;
public ObjectReader(EndianBinaryReader reader, SerializedFile assetsFile, ObjectInfo objectInfo) : base(reader.BaseStream, reader.Endian) public ObjectReader(EndianBinaryReader reader, SerializedFile assetsFile, ObjectInfo objectInfo) : base(reader.BaseStream, reader.Endian)

View File

@ -13,7 +13,7 @@ namespace AssetStudio
public string fullName; public string fullName;
public string originalPath; public string originalPath;
public string fileName; public string fileName;
public int[] version = { 0, 0, 0, 0 }; public UnityVersion version = new UnityVersion();
public BuildType buildType; public BuildType buildType;
public List<Object> Objects; public List<Object> Objects;
public Dictionary<long, Object> ObjectsDic; public Dictionary<long, Object> ObjectsDic;
@ -73,7 +73,7 @@ namespace AssetStudio
if (header.m_Version >= SerializedFileFormatVersion.Unknown_7) if (header.m_Version >= SerializedFileFormatVersion.Unknown_7)
{ {
unityVersion = reader.ReadStringToNull(); unityVersion = reader.ReadStringToNull();
SetVersion(unityVersion); SetVersion(new UnityVersion(unityVersion));
} }
if (header.m_Version >= SerializedFileFormatVersion.Unknown_8) if (header.m_Version >= SerializedFileFormatVersion.Unknown_8)
{ {
@ -217,19 +217,13 @@ namespace AssetStudio
//reader.AlignStream(16); //reader.AlignStream(16);
} }
public void SetVersion(string stringVersion) public void SetVersion(UnityVersion unityVer)
{ {
if (stringVersion != strippedVersion) if (unityVer != null && !unityVer.IsStripped)
{ {
unityVersion = stringVersion; unityVersion = unityVer.FullVersion;
var buildSplit = Regex.Replace(stringVersion, @"\d", "").Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries); buildType = new BuildType(unityVer.BuildType);
if (buildSplit.Length == 0) version = unityVer;
throw new NotSupportedException("Specified Unity version is not in a correct format.\n" +
"Specify full Unity version, including letters at the end.\n" +
"Example: 2017.4.39f1");
buildType = new BuildType(buildSplit[0]);
var versionSplit = Regex.Replace(stringVersion, @"\D", ".").Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
version = versionSplit.Select(int.Parse).ToArray();
} }
} }
@ -377,9 +371,5 @@ namespace AssetStudio
Objects.Add(obj); Objects.Add(obj);
ObjectsDic.Add(obj.m_PathID, obj); ObjectsDic.Add(obj.m_PathID, obj);
} }
public bool IsVersionStripped => unityVersion == strippedVersion;
private const string strippedVersion = "0.0.0";
} }
} }

449
AssetStudio/UnityVersion.cs Normal file
View File

@ -0,0 +1,449 @@
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace AssetStudio
{
public class UnityVersion : IComparable
{
public int Major { get; }
public int Minor { get; }
public int Patch { get; }
public int Build { get; }
public string BuildType { get; }
public string FullVersion { get; }
public bool IsStripped => this == (0, 0, 0);
public UnityVersion(string version)
{
if (string.IsNullOrEmpty(version))
throw new ArgumentException("Unity version cannot be empty.");
try
{
int[] ver = Regex.Matches(version, @"\d+").Cast<Match>().Select(x => int.Parse(x.Value)).ToArray();
(Major, Minor, Patch) = (ver[0], ver[1], ver[2]);
if (ver.Length == 4)
Build = ver[3];
FullVersion = version;
}
catch (Exception)
{
throw new NotSupportedException($"Failed to parse Unity version: \"{version}\".");
}
string[] build = Regex.Matches(version, @"\D+").Cast<Match>().Select(x => x.Value).ToArray();
if (build.Length > 2)
{
BuildType = build[2];
}
}
public UnityVersion(int major = 0, int minor = 0, int patch = 0)
{
(Major, Minor, Patch) = (major, minor, patch);
FullVersion = $"{Major}.{Minor}.{Patch}";
if (!IsStripped)
{
Build = 1;
BuildType = "f";
FullVersion += $"{BuildType}{Build}";
}
}
#region UnityVer, UnityVer
public static bool operator ==(UnityVersion left, UnityVersion right)
{
return Equals(left, right);
}
public static bool operator !=(UnityVersion left, UnityVersion right)
{
return !Equals(left, right);
}
public static bool operator >(UnityVersion left, UnityVersion right)
{
return left?.CompareTo(right) > 0;
}
public static bool operator <(UnityVersion left, UnityVersion right)
{
return left?.CompareTo(right) < 0;
}
public static bool operator >=(UnityVersion left, UnityVersion right)
{
return left == right || left > right;
}
public static bool operator <=(UnityVersion left, UnityVersion right)
{
return left == right || left < right;
}
#endregion
#region UnityVer, int
public static bool operator ==(UnityVersion left, int right)
{
return left?.Major == right;
}
public static bool operator !=(UnityVersion left, int right)
{
return left?.Major != right;
}
public static bool operator >(UnityVersion left, int right)
{
return left?.Major > right;
}
public static bool operator <(UnityVersion left, int right)
{
return left?.Major < right;
}
public static bool operator >=(UnityVersion left, int right)
{
return left?.Major >= right;
}
public static bool operator <=(UnityVersion left, int right)
{
return left?.Major <= right;
}
#endregion
#region UnityVer, (int, int)
public static bool operator ==(UnityVersion left, (int, int) right)
{
return (left?.Major, left?.Minor) == (right.Item1, right.Item2);
}
public static bool operator !=(UnityVersion left, (int, int) right)
{
return (left?.Major, left?.Minor) != (right.Item1, right.Item2);
}
public static bool operator >(UnityVersion left, (int, int) right)
{
return left?.CompareTo(right) > 0;
}
public static bool operator <(UnityVersion left, (int, int) right)
{
return left?.CompareTo(right) < 0;
}
public static bool operator >=(UnityVersion left, (int, int) right)
{
return left == right || left > right;
}
public static bool operator <=(UnityVersion left, (int, int) right)
{
return left == right || left < right;
}
#endregion
#region UnityVer, (int, int, int)
public static bool operator ==(UnityVersion left, (int, int, int) right)
{
return (left?.Major, left?.Minor, left?.Patch) == (right.Item1, right.Item2, right.Item3);
}
public static bool operator !=(UnityVersion left, (int, int, int) right)
{
return (left?.Major, left?.Minor, left?.Patch) != (right.Item1, right.Item2, right.Item3);
}
public static bool operator >(UnityVersion left, (int, int, int) right)
{
return left?.CompareTo(right) > 0;
}
public static bool operator <(UnityVersion left, (int, int, int) right)
{
return left?.CompareTo(right) < 0;
}
public static bool operator >=(UnityVersion left, (int, int, int) right)
{
return left == right || left > right;
}
public static bool operator <=(UnityVersion left, (int, int, int) right)
{
return left == right || left < right;
}
#endregion
#region int, UnityVer
public static bool operator ==(int left, UnityVersion right)
{
return left == right?.Major;
}
public static bool operator !=(int left, UnityVersion right)
{
return left != right?.Major;
}
public static bool operator >(int left, UnityVersion right)
{
return left > right?.Major;
}
public static bool operator <(int left, UnityVersion right)
{
return left < right?.Major;
}
public static bool operator >=(int left, UnityVersion right)
{
return left >= right?.Major;
}
public static bool operator <=(int left, UnityVersion right)
{
return left <= right?.Major;
}
#endregion
#region (int, int), UnityVer
public static bool operator ==((int, int) left, UnityVersion right)
{
return (left.Item1, left.Item2) == (right?.Major, right?.Minor);
}
public static bool operator !=((int, int) left, UnityVersion right)
{
return (left.Item1, left.Item2) != (right?.Major, right?.Minor);
}
public static bool operator >((int, int) left, UnityVersion right)
{
return right?.CompareTo(left) < 0;
}
public static bool operator <((int, int) left, UnityVersion right)
{
return right?.CompareTo(left) > 0;
}
public static bool operator >=((int, int) left, UnityVersion right)
{
return left == right || left > right;
}
public static bool operator <=((int, int) left, UnityVersion right)
{
return left == right || left < right;
}
#endregion
#region (int, int, int), UnityVer
public static bool operator ==((int, int, int) left, UnityVersion right)
{
return (left.Item1, left.Item2, left.Item3) == (right?.Major, right?.Minor, right?.Patch);
}
public static bool operator !=((int, int, int) left, UnityVersion right)
{
return (left.Item1, left.Item2, left.Item3) != (right?.Major, right?.Minor, right?.Patch);
}
public static bool operator >((int, int, int) left, UnityVersion right)
{
return right?.CompareTo(left) < 0;
}
public static bool operator <((int, int, int) left, UnityVersion right)
{
return right?.CompareTo(left) > 0;
}
public static bool operator >=((int, int, int) left, UnityVersion right)
{
return left == right || left > right;
}
public static bool operator <=((int, int, int) left, UnityVersion right)
{
return left == right || left < right;
}
#endregion
private int CompareTo((int, int) other)
{
var result = Major.CompareTo(other.Item1);
if (result != 0)
{
return result;
}
result = Minor.CompareTo(other.Item2);
if (result != 0)
{
return result;
}
return 0;
}
private int CompareTo((int, int, int) other)
{
var result = CompareTo((other.Item1, other.Item2));
if (result != 0)
{
return result;
}
result = Patch.CompareTo(other.Item3);
if (result != 0)
{
return result;
}
return 0;
}
private int CompareTo(UnityVersion other)
{
return CompareTo((other.Major, other.Minor, other.Patch));
}
private bool Equals(UnityVersion other)
{
return (Major, Minor, Patch) == (other.Major, other.Minor, other.Patch);
}
public override bool Equals(object other)
{
return other is UnityVersion otherUnityVer && Equals(otherUnityVer);
}
public override int GetHashCode()
{
var result = Major * 31;
result = result * 31 + Minor;
result = result * 31 + Patch;
result = result * 31 + Build;
return result.GetHashCode();
}
public int CompareTo(object obj)
{
return CompareTo((UnityVersion)obj);
}
public sealed override string ToString()
{
return FullVersion;
}
public Tuple<int, int, int> ToTuple()
{
return new Tuple<int, int, int>(Major, Minor, Patch);
}
public int[] ToArray()
{
return new[] {Major, Minor, Patch};
}
}
public static class UnityVersionExtensions
{
/// <summary>
/// Checks if the Unity version is within the range limits specified by the "lowerLimit" and "upperLimit" attributes.
/// </summary>
/// <param name="ver"></param>
/// <param name="lowerLimit">Minimal version. Included in the range.</param>
/// <param name="upperLimit">Maximal version. Not included in the range.</param>
/// <returns><see langword="true"/> if the Unity version is within the specified range; otherwise <see langword="false"/>.</returns>
/// <remarks>[lowerLimit, upperLimit)</remarks>
public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, UnityVersion upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, int lowerLimit, UnityVersion upperLimit)
{
return ver.Major >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, UnityVersion upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, UnityVersion upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, int upperLimit)
{
return ver >= lowerLimit && ver.Major < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, (int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, (int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, int lowerLimit, int upperLimit)
{
return ver.Major >= lowerLimit && ver.Major < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, int lowerLimit, (int, int) upperLimit)
{
return ver.Major >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, int lowerLimit, (int, int, int) upperLimit)
{
return ver.Major >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, int upperLimit)
{
return ver >= lowerLimit && ver.Major < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, int upperLimit)
{
return ver >= lowerLimit && ver.Major < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, (int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, (int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, (int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, (int, int, int) upperLimit)
{
return ver >= lowerLimit && ver < upperLimit;
}
}
}

View File

@ -115,7 +115,7 @@ namespace AssetStudioCLI.Options
public static Option<int> o_maxParallelExportTasks; public static Option<int> o_maxParallelExportTasks;
public static Option<ExportListType> o_exportAssetList; public static Option<ExportListType> o_exportAssetList;
public static Option<string> o_assemblyPath; public static Option<string> o_assemblyPath;
public static Option<string> o_unityVersion; public static Option<UnityVersion> o_unityVersion;
public static Option<bool> f_notRestoreExtensionName; public static Option<bool> f_notRestoreExtensionName;
public static Option<bool> f_avoidLoadingViaTypetree; public static Option<bool> f_avoidLoadingViaTypetree;
public static Option<bool> f_loadAllAssets; public static Option<bool> f_loadAllAssets;
@ -427,9 +427,9 @@ namespace AssetStudioCLI.Options
optionExample: "", optionExample: "",
optionHelpGroup: HelpGroups.Advanced optionHelpGroup: HelpGroups.Advanced
); );
o_unityVersion = new GroupedOption<string> o_unityVersion = new GroupedOption<UnityVersion>
( (
optionDefaultValue: "", optionDefaultValue: null,
optionName: "--unity-version <text>", optionName: "--unity-version <text>",
optionDescription: "Specify Unity version\n", optionDescription: "Specify Unity version\n",
optionExample: "Example: \"--unity-version 2017.4.39f1\"\n", optionExample: "Example: \"--unity-version 2017.4.39f1\"\n",
@ -970,7 +970,16 @@ namespace AssetStudioCLI.Options
} }
break; break;
case "--unity-version": case "--unity-version":
o_unityVersion.Value = value; try
{
o_unityVersion.Value = new UnityVersion(value);
}
catch (Exception e)
{
Console.WriteLine($"{"Error".Color(brightRed)} during parsing [{option.Color(brightYellow)}] option with value [{value.Color(brightRed)}].\n{e.Message}\n");
ShowOptionDescription(o_unityVersion);
return;
}
break; break;
default: default:
Console.WriteLine($"{"Error:".Color(brightRed)} Unknown option [{option.Color(brightRed)}].\n"); Console.WriteLine($"{"Error:".Color(brightRed)} Unknown option [{option.Color(brightRed)}].\n");

View File

@ -118,7 +118,7 @@ namespace AssetStudioCLI
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
sb.AppendLine($"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav.."); sb.AppendLine($"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav..");
sb.AppendLine(m_AudioClip.version[0] < 5 ? $"AudioClip type: {m_AudioClip.m_Type}" : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}"); sb.AppendLine(m_AudioClip.version < 5 ? $"AudioClip type: {m_AudioClip.m_Type}" : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}");
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}"); sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}"); sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}"); sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}");
@ -143,7 +143,7 @@ namespace AssetStudioCLI
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\".."); sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..");
sb.AppendLine(m_AudioClip.version[0] < 5 ? $"AudioClip type: {m_AudioClip.m_Type}" : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}"); sb.AppendLine(m_AudioClip.version < 5 ? $"AudioClip type: {m_AudioClip.m_Type}" : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}");
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}"); sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}"); sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}"); sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}");

View File

@ -208,7 +208,7 @@ namespace AssetStudioCLI
var log = $"Finished loading {assetsManager.assetsFileList.Count} files with {parsedAssetsList.Count} exportable assets"; var log = $"Finished loading {assetsManager.assetsFileList.Count} files with {parsedAssetsList.Count} exportable assets";
var unityVer = assetsManager.assetsFileList[0].version; var unityVer = assetsManager.assetsFileList[0].version;
long m_ObjectsCount; long m_ObjectsCount;
if (unityVer[0] > 2020) if (unityVer > 2020)
{ {
m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y => m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y =>
y.classID != (int)ClassIDType.Shader y.classID != (int)ClassIDType.Shader

View File

@ -316,7 +316,7 @@
this.customCompressionZstdToolStripMenuItem.CheckOnClick = true; this.customCompressionZstdToolStripMenuItem.CheckOnClick = true;
this.customCompressionZstdToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.customCompressionZstdToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
this.customCompressionZstdToolStripMenuItem.Name = "customCompressionZstdToolStripMenuItem"; this.customCompressionZstdToolStripMenuItem.Name = "customCompressionZstdToolStripMenuItem";
this.customCompressionZstdToolStripMenuItem.Size = new System.Drawing.Size(130, 22); this.customCompressionZstdToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.customCompressionZstdToolStripMenuItem.Text = "Zstd"; this.customCompressionZstdToolStripMenuItem.Text = "Zstd";
this.customCompressionZstdToolStripMenuItem.ToolTipText = "If selected, Zstd-decompression will be used for assets with custom compression t" + this.customCompressionZstdToolStripMenuItem.ToolTipText = "If selected, Zstd-decompression will be used for assets with custom compression t" +
"ype"; "ype";
@ -326,7 +326,7 @@
// //
this.customCompressionLZ4ToolStripMenuItem.CheckOnClick = true; this.customCompressionLZ4ToolStripMenuItem.CheckOnClick = true;
this.customCompressionLZ4ToolStripMenuItem.Name = "customCompressionLZ4ToolStripMenuItem"; this.customCompressionLZ4ToolStripMenuItem.Name = "customCompressionLZ4ToolStripMenuItem";
this.customCompressionLZ4ToolStripMenuItem.Size = new System.Drawing.Size(130, 22); this.customCompressionLZ4ToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.customCompressionLZ4ToolStripMenuItem.Text = "Lz4/Lz4HC"; this.customCompressionLZ4ToolStripMenuItem.Text = "Lz4/Lz4HC";
this.customCompressionLZ4ToolStripMenuItem.ToolTipText = "If selected, Lz4-decompression will be used for assets with custom compression ty" + this.customCompressionLZ4ToolStripMenuItem.ToolTipText = "If selected, Lz4-decompression will be used for assets with custom compression ty" +
"pe"; "pe";
@ -339,6 +339,7 @@
this.toolStripMenuItem14.Name = "toolStripMenuItem14"; this.toolStripMenuItem14.Name = "toolStripMenuItem14";
this.toolStripMenuItem14.Size = new System.Drawing.Size(213, 22); this.toolStripMenuItem14.Size = new System.Drawing.Size(213, 22);
this.toolStripMenuItem14.Text = "Specify Unity version"; this.toolStripMenuItem14.Text = "Specify Unity version";
this.toolStripMenuItem14.DropDownClosed += new System.EventHandler(this.specifyUnityVersion_Close);
// //
// specifyUnityVersion // specifyUnityVersion
// //

View File

@ -172,7 +172,6 @@ namespace AssetStudioGUI
} }
} }
} }
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, paths)); await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, paths));
saveDirectoryBackup = openDirectoryBackup; saveDirectoryBackup = openDirectoryBackup;
BuildAssetStructures(); BuildAssetStructures();
@ -184,7 +183,6 @@ namespace AssetStudioGUI
if (openFileDialog1.ShowDialog(this) == DialogResult.OK) if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{ {
ResetForm(); ResetForm();
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFileDialog1.FileNames)); await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFileDialog1.FileNames));
BuildAssetStructures(); BuildAssetStructures();
} }
@ -197,12 +195,29 @@ namespace AssetStudioGUI
if (openFolderDialog.ShowDialog(this) == DialogResult.OK) if (openFolderDialog.ShowDialog(this) == DialogResult.OK)
{ {
ResetForm(); ResetForm();
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFolderDialog.Folder)); await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFolderDialog.Folder));
BuildAssetStructures(); BuildAssetStructures();
} }
} }
private void specifyUnityVersion_Close(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(specifyUnityVersion.Text))
{
assetsManager.SpecifyUnityVersion = null;
return;
}
try
{
assetsManager.SpecifyUnityVersion = new UnityVersion(specifyUnityVersion.Text);
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}
private async void extractFileToolStripMenuItem_Click(object sender, EventArgs e) private async void extractFileToolStripMenuItem_Click(object sender, EventArgs e)
{ {
if (openFileDialog1.ShowDialog(this) == DialogResult.OK) if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
@ -288,7 +303,7 @@ namespace AssetStudioGUI
allToolStripMenuItem.Checked = true; allToolStripMenuItem.Checked = true;
var log = $"Finished loading {assetsManager.assetsFileList.Count} file(s) with {assetListView.Items.Count} exportable assets"; var log = $"Finished loading {assetsManager.assetsFileList.Count} file(s) with {assetListView.Items.Count} exportable assets";
var unityVer = assetsManager.assetsFileList[0].version; var unityVer = assetsManager.assetsFileList[0].version;
var m_ObjectsCount = unityVer[0] > 2020 ? var m_ObjectsCount = unityVer > 2020 ?
assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y => y.classID != (int)ClassIDType.Shader)) : assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y => y.classID != (int)ClassIDType.Shader)) :
assetsManager.assetsFileList.Sum(x => x.m_Objects.Count); assetsManager.assetsFileList.Sum(x => x.m_Objects.Count);
var objectsCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count); var objectsCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
@ -948,7 +963,7 @@ namespace AssetStudioGUI
{ {
//Info //Info
assetItem.InfoText = "Compression format: "; assetItem.InfoText = "Compression format: ";
if (m_AudioClip.version[0] < 5) if (m_AudioClip.version < 5)
{ {
switch (m_AudioClip.m_Type) switch (m_AudioClip.m_Type)
{ {

View File

@ -117,7 +117,7 @@ namespace AssetStudioGUI
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
sb.AppendLine($"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav.."); sb.AppendLine($"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav..");
sb.AppendLine(m_AudioClip.version[0] < 5 sb.AppendLine(m_AudioClip.version < 5
? $"AudioClip type: {m_AudioClip.m_Type}" ? $"AudioClip type: {m_AudioClip.m_Type}"
: $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}"); : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}");
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}"); sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
@ -144,7 +144,7 @@ namespace AssetStudioGUI
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\".."); sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..");
sb.AppendLine(m_AudioClip.version[0] < 5 sb.AppendLine(m_AudioClip.version < 5
? $"AudioClip type: {m_AudioClip.m_Type}" ? $"AudioClip type: {m_AudioClip.m_Type}"
: $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}"); : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}");
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}"); sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");

View File

@ -105,7 +105,7 @@ namespace AssetStudio
public string GetExtensionName() public string GetExtensionName()
{ {
if (m_AudioClip.version[0] < 5) if (m_AudioClip.version < 5)
{ {
switch (m_AudioClip.m_Type) switch (m_AudioClip.m_Type)
{ {
@ -170,7 +170,7 @@ namespace AssetStudio
{ {
public static bool IsConvertSupport(this AudioClip m_AudioClip) public static bool IsConvertSupport(this AudioClip m_AudioClip)
{ {
if (m_AudioClip.version[0] < 5) if (m_AudioClip.version < 5)
{ {
switch (m_AudioClip.m_Type) switch (m_AudioClip.m_Type)
{ {

View File

@ -4,9 +4,9 @@ namespace AssetStudio
{ {
public class SerializedTypeHelper public class SerializedTypeHelper
{ {
private readonly int[] version; private readonly UnityVersion version;
public SerializedTypeHelper(int[] version) public SerializedTypeHelper(UnityVersion version)
{ {
this.version = version; this.version = version;
} }
@ -24,7 +24,7 @@ namespace AssetStudio
{ {
nodes.Add(new TypeTreeNode($"PPtr<{type}>", name, indent, false)); nodes.Add(new TypeTreeNode($"PPtr<{type}>", name, indent, false));
nodes.Add(new TypeTreeNode("int", "m_FileID", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_FileID", indent + 1, false));
if (version[0] >= 5) //5.0 and up if (version >= 5) //5.0 and up
{ {
nodes.Add(new TypeTreeNode("SInt64", "m_PathID", indent + 1, false)); nodes.Add(new TypeTreeNode("SInt64", "m_PathID", indent + 1, false));
} }
@ -58,7 +58,7 @@ namespace AssetStudio
nodes.Add(new TypeTreeNode("float", "value", indent + 4, false)); nodes.Add(new TypeTreeNode("float", "value", indent + 4, false));
nodes.Add(new TypeTreeNode("float", "inSlope", indent + 4, false)); nodes.Add(new TypeTreeNode("float", "inSlope", indent + 4, false));
nodes.Add(new TypeTreeNode("float", "outSlope", indent + 4, false)); nodes.Add(new TypeTreeNode("float", "outSlope", indent + 4, false));
if (version[0] >= 2018) //2018 and up if (version >= 2018) //2018 and up
{ {
nodes.Add(new TypeTreeNode("int", "weightedMode", indent + 4, false)); nodes.Add(new TypeTreeNode("int", "weightedMode", indent + 4, false));
nodes.Add(new TypeTreeNode("float", "inWeight", indent + 4, false)); nodes.Add(new TypeTreeNode("float", "inWeight", indent + 4, false));
@ -66,7 +66,7 @@ namespace AssetStudio
} }
nodes.Add(new TypeTreeNode("int", "m_PreInfinity", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_PreInfinity", indent + 1, false));
nodes.Add(new TypeTreeNode("int", "m_PostInfinity", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_PostInfinity", indent + 1, false));
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3)) //5.3 and up if (version >= (5, 3)) //5.3 and up
{ {
nodes.Add(new TypeTreeNode("int", "m_RotationOrder", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_RotationOrder", indent + 1, false));
} }
@ -75,7 +75,7 @@ namespace AssetStudio
public void AddGradient(List<TypeTreeNode> nodes, string name, int indent) public void AddGradient(List<TypeTreeNode> nodes, string name, int indent)
{ {
nodes.Add(new TypeTreeNode("Gradient", name, indent, false)); nodes.Add(new TypeTreeNode("Gradient", name, indent, false));
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up if (version >= (5, 6)) //5.6 and up
{ {
AddColorRGBA(nodes, "key0", indent + 1); AddColorRGBA(nodes, "key0", indent + 1);
AddColorRGBA(nodes, "key1", indent + 1); AddColorRGBA(nodes, "key1", indent + 1);
@ -113,7 +113,7 @@ namespace AssetStudio
nodes.Add(new TypeTreeNode("UInt16", "atime5", indent + 1, false)); nodes.Add(new TypeTreeNode("UInt16", "atime5", indent + 1, false));
nodes.Add(new TypeTreeNode("UInt16", "atime6", indent + 1, false)); nodes.Add(new TypeTreeNode("UInt16", "atime6", indent + 1, false));
nodes.Add(new TypeTreeNode("UInt16", "atime7", indent + 1, false)); nodes.Add(new TypeTreeNode("UInt16", "atime7", indent + 1, false));
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5)) //5.5 and up if (version >= (5, 5)) //5.5 and up
{ {
nodes.Add(new TypeTreeNode("int", "m_Mode", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_Mode", indent + 1, false));
} }
@ -134,7 +134,7 @@ namespace AssetStudio
AddGUIStyleState(nodes, "m_OnActive", indent + 1); AddGUIStyleState(nodes, "m_OnActive", indent + 1);
AddGUIStyleState(nodes, "m_OnFocused", indent + 1); AddGUIStyleState(nodes, "m_OnFocused", indent + 1);
AddRectOffset(nodes, "m_Border", indent + 1); AddRectOffset(nodes, "m_Border", indent + 1);
if (version[0] >= 4) //4 and up if (version >= 4) //4 and up
{ {
AddRectOffset(nodes, "m_Margin", indent + 1); AddRectOffset(nodes, "m_Margin", indent + 1);
AddRectOffset(nodes, "m_Padding", indent + 1); AddRectOffset(nodes, "m_Padding", indent + 1);
@ -146,7 +146,7 @@ namespace AssetStudio
} }
AddRectOffset(nodes, "m_Overflow", indent + 1); AddRectOffset(nodes, "m_Overflow", indent + 1);
AddPPtr(nodes, "Font", "m_Font", indent + 1); AddPPtr(nodes, "Font", "m_Font", indent + 1);
if (version[0] >= 4) //4 and up if (version >= 4) //4 and up
{ {
nodes.Add(new TypeTreeNode("int", "m_FontSize", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_FontSize", indent + 1, false));
nodes.Add(new TypeTreeNode("int", "m_FontStyle", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_FontStyle", indent + 1, false));
@ -171,7 +171,7 @@ namespace AssetStudio
AddVector2f(nodes, "m_ClipOffset", indent + 1); AddVector2f(nodes, "m_ClipOffset", indent + 1);
nodes.Add(new TypeTreeNode("float", "m_FixedWidth", indent + 1, false)); nodes.Add(new TypeTreeNode("float", "m_FixedWidth", indent + 1, false));
nodes.Add(new TypeTreeNode("float", "m_FixedHeight", indent + 1, false)); nodes.Add(new TypeTreeNode("float", "m_FixedHeight", indent + 1, false));
if (version[0] >= 3) //3 and up if (version >= 3) //3 and up
{ {
nodes.Add(new TypeTreeNode("int", "m_FontSize", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_FontSize", indent + 1, false));
nodes.Add(new TypeTreeNode("int", "m_FontStyle", indent + 1, false)); nodes.Add(new TypeTreeNode("int", "m_FontStyle", indent + 1, false));

View File

@ -871,11 +871,11 @@ namespace AssetStudio
public int Length; public int Length;
public int Segment; public int Segment;
public ShaderSubProgramEntry(BinaryReader reader, int[] version) public ShaderSubProgramEntry(BinaryReader reader, UnityVersion version)
{ {
Offset = reader.ReadInt32(); Offset = reader.ReadInt32();
Length = reader.ReadInt32(); Length = reader.ReadInt32();
if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up if (version >= (2019, 3)) //2019.3 and up
{ {
Segment = reader.ReadInt32(); Segment = reader.ReadInt32();
} }
@ -887,7 +887,7 @@ namespace AssetStudio
public ShaderSubProgramEntry[] entries; public ShaderSubProgramEntry[] entries;
public ShaderSubProgram[] m_SubPrograms; public ShaderSubProgram[] m_SubPrograms;
public ShaderProgram(BinaryReader reader, int[] version) public ShaderProgram(BinaryReader reader, UnityVersion version)
{ {
var subProgramsCapacity = reader.ReadInt32(); var subProgramsCapacity = reader.ReadInt32();
entries = new ShaderSubProgramEntry[subProgramsCapacity]; entries = new ShaderSubProgramEntry[subProgramsCapacity];

View File

@ -13,7 +13,7 @@ namespace AssetStudio
private int m_HeightCrop; private int m_HeightCrop;
private TextureFormat m_TextureFormat; private TextureFormat m_TextureFormat;
private byte[] m_PlatformBlob; private byte[] m_PlatformBlob;
private int[] version; private UnityVersion version;
private BuildTarget platform; private BuildTarget platform;
private int outPutDataSize; private int outPutDataSize;
@ -748,7 +748,7 @@ namespace AssetStudio
private bool UnpackCrunch(byte[] image_data, out byte[] result) private bool UnpackCrunch(byte[] image_data, out byte[] result)
{ {
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3) //2017.3 and up if (version >= (2017, 3) //2017.3 and up
|| m_TextureFormat == TextureFormat.ETC_RGB4Crunched || m_TextureFormat == TextureFormat.ETC_RGB4Crunched
|| m_TextureFormat == TextureFormat.ETC2_RGBA8Crunched) || m_TextureFormat == TextureFormat.ETC2_RGBA8Crunched)
{ {