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 string SpecifyUnityVersion;
public bool ZstdEnabled = true;
public bool LoadingViaTypeTreeEnabled = true;
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 ConcurrentDictionary<string, BinaryReader> resourceFileReaders = new ConcurrentDictionary<string, BinaryReader>(StringComparer.OrdinalIgnoreCase);
private UnityVersion specifiedUnityVersion;
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> noexistFiles = 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)
{
if (filteredAssetTypesList.Count == 0)
@ -230,7 +258,7 @@ namespace AssetStudio
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))
{
@ -238,9 +266,9 @@ namespace AssetStudio
{
var assetsFile = new SerializedFile(reader, this);
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);
assetsFileList.Add(assetsFile);
@ -270,7 +298,7 @@ namespace AssetStudio
Logger.Info("Loading " + reader.FullPath);
try
{
var bundleFile = new BundleFile(reader, ZstdEnabled, SpecifyUnityVersion);
var bundleFile = new BundleFile(reader, ZstdEnabled, specifiedUnityVersion);
foreach (var file in bundleFile.fileList)
{
var dummyPath = Path.Combine(Path.GetDirectoryName(reader.FullPath), file.fileName);
@ -448,11 +476,11 @@ namespace AssetStudio
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);
}
@ -560,7 +588,7 @@ namespace AssetStudio
obj = new RectTransform(objectReader);
break;
case ClassIDType.Shader:
if (objectReader.version[0] < 2021)
if (objectReader.version < 2021)
obj = new Shader(objectReader);
break;
case ClassIDType.SkinnedMeshRenderer:

View File

@ -3,7 +3,6 @@ using ZstdSharp;
using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace AssetStudio
{
@ -48,7 +47,7 @@ namespace AssetStudio
public string signature;
public uint version;
public string unityVersion;
public string unityRevision;
public UnityVersion unityRevision;
public long size;
public uint compressedBlocksInfoSize;
public uint uncompressedBlocksInfoSize;
@ -76,13 +75,13 @@ namespace AssetStudio
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.signature = reader.ReadStringToNull();
m_Header.version = reader.ReadUInt32();
m_Header.unityVersion = reader.ReadStringToNull();
m_Header.unityRevision = reader.ReadStringToNull();
m_Header.unityRevision = new UnityVersion(reader.ReadStringToNull());
switch (m_Header.signature)
{
case "UnityArchive":
@ -104,15 +103,25 @@ namespace AssetStudio
ReadHeader(reader);
var isUnityCnEnc = false;
var unityVerStr = string.IsNullOrEmpty(specUnityVer) ? m_Header.unityRevision : specUnityVer;
int[] ver = Regex.Matches(unityVerStr, @"\d+").Cast<Match>().Select(x => int.Parse(x.Value)).ToArray();
if (ver.Length > 0 && ver[0] != 0)
var unityVer = m_Header.unityRevision;
if (specUnityVer != null)
{
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
if (ver[0] < 2020
|| (ver[0] == 2020 && ver[1] <= 3 && ver[2] < 34)
|| (ver[0] == 2021 && ver[1] <= 3 && ver[2] < 2)
|| (ver[0] == 2022 && ver[1] <= 1 && ver[2] < 1))
if (unityVer < 2020
|| unityVer.IsInRange(2020, (2020, 3, 34))
|| unityVer.IsInRange(2021, (2021, 3, 2))
|| unityVer.IsInRange(2022, (2022, 1, 1)))
{
isUnityCnEnc = ((CnEncryptionFlags)m_Header.flags & CnEncryptionFlags.OldFlag) != 0;
}
@ -123,10 +132,14 @@ namespace AssetStudio
}
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))
{
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;
@ -269,7 +282,7 @@ namespace AssetStudio
{
reader.AlignStream(16);
}
else if (unityVer[0] >= 2019 && unityVer[1] >= 4)
else if (unityVer >= (2019, 4))
{
//check if we need to align the reader
//- align to 16 bytes and check if all are 0

View File

@ -25,7 +25,7 @@ namespace AssetStudio
value = readerFunc();
inSlope = readerFunc();
outSlope = readerFunc();
if (reader.version[0] >= 2018) //2018 and up
if (reader.version >= 2018) //2018 and up
{
weightedMode = reader.ReadInt32();
inWeight = readerFunc();
@ -55,7 +55,7 @@ namespace AssetStudio
m_PreInfinity = 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();
}
@ -323,7 +323,7 @@ namespace AssetStudio
path = reader.ReadAlignedString();
classID = (ClassIDType)reader.ReadInt32();
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();
}
@ -369,7 +369,7 @@ namespace AssetStudio
path = reader.ReadAlignedString();
classID = reader.ReadInt32();
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();
}
@ -401,9 +401,9 @@ namespace AssetStudio
public xform(ObjectReader reader)
{
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();
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_WeightT = 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();
}
}
@ -470,7 +470,7 @@ namespace AssetStudio
{
var version = reader.version;
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();
int numGoals = reader.ReadInt32();
@ -485,13 +485,13 @@ namespace AssetStudio
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();
m_TDoFArray = new Vector3[numTDof];
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;
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();
}
@ -698,11 +698,11 @@ namespace AssetStudio
var version = reader.version;
m_StreamedClip = new StreamedClip(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);
}
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);
}
@ -806,18 +806,18 @@ namespace AssetStudio
var version = reader.version;
m_DeltaPose = new HumanPose(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_LeftFootStartX = 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_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_StartTime = reader.ReadSingle();
m_StopTime = reader.ReadSingle();
@ -827,7 +827,7 @@ namespace AssetStudio
m_AverageAngularSpeed = reader.ReadSingle();
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();
}
@ -837,13 +837,13 @@ namespace AssetStudio
{
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_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();
}
@ -851,7 +851,7 @@ namespace AssetStudio
m_LoopBlendOrientation = reader.ReadBoolean();
m_LoopBlendPositionY = 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();
}
@ -881,7 +881,7 @@ namespace AssetStudio
path = reader.ReadUInt32();
attribute = reader.ReadUInt32();
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();
}
@ -891,7 +891,7 @@ namespace AssetStudio
}
customType = 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();
}
@ -980,7 +980,7 @@ namespace AssetStudio
data = reader.ReadAlignedString();
objectReferenceParameter = new PPtr<Object>(reader);
floatParameter = reader.ReadSingle();
if (version[0] >= 3) //3 and up
if (version >= 3) //3 and up
{
intParameter = reader.ReadInt32();
}
@ -1045,11 +1045,11 @@ namespace AssetStudio
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();
}
else if (version[0] >= 4)//4.0 and up
else if (version >= 4)//4.0 and up
{
m_AnimationType = (AnimationType)reader.ReadInt32();
if (m_AnimationType == AnimationType.Legacy)
@ -1060,7 +1060,7 @@ namespace AssetStudio
m_Legacy = true;
}
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();
}
@ -1079,7 +1079,7 @@ namespace AssetStudio
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();
m_EulerCurves = new Vector3Curve[numEulerCurves];
@ -1110,7 +1110,7 @@ namespace AssetStudio
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();
m_PPtrCurves = new PPtrCurve[numPtrCurves];
@ -1122,20 +1122,20 @@ namespace AssetStudio
m_SampleRate = reader.ReadSingle();
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);
}
if (version[0] >= 4)//4.0 and up
if (version >= 4)//4.0 and up
{
m_MuscleClipSize = reader.ReadUInt32();
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);
}
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_HasMotionFloatCurves = reader.ReadBoolean();
@ -1147,7 +1147,7 @@ namespace AssetStudio
{
m_Events[i] = new AnimationEvent(reader);
}
if (version[0] >= 2017) //2017 and up
if (version >= 2017) //2017 and up
{
reader.AlignStream();
}

View File

@ -17,47 +17,47 @@ namespace AssetStudio
m_Controller = new PPtr<RuntimeAnimatorController>(reader);
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_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();
}
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
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();
}
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();
}
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();
}
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();
}
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();
}
if (version[0] >= 2018) //2018 and up
if (version >= 2018) //2018 and up
{
var m_KeepAnimatorControllerStateOnDisable = reader.ReadBoolean();
reader.AlignStream();

View File

@ -17,7 +17,7 @@ namespace AssetStudio
word0 = 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();
}
@ -73,12 +73,12 @@ namespace AssetStudio
m_SkeletonMask = new SkeletonMask(reader);
m_Binding = reader.ReadUInt32();
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_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();
}
@ -131,7 +131,7 @@ namespace AssetStudio
}
m_DestinationState = reader.ReadUInt32();
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
m_FullPathID = reader.ReadUInt32();
}
@ -140,7 +140,7 @@ namespace AssetStudio
m_UserID = reader.ReadUInt32();
m_TransitionDuration = 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_HasExitTime = reader.ReadBoolean();
@ -154,7 +154,7 @@ namespace AssetStudio
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();
}
@ -252,43 +252,41 @@ namespace AssetStudio
{
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_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_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();
}
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_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_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_Duration = reader.ReadSingle();
if (version[0] > 4
|| (version[0] == 4 && version[1] > 1)
|| (version[0] == 4 && version[1] == 1 && version[2] >= 3)) //4.1.3 and up
if (version >= (4, 1, 3)) //4.1.3 and up
{
m_CycleOffset = reader.ReadSingle();
m_Mirror = reader.ReadBoolean();
@ -313,7 +311,7 @@ namespace AssetStudio
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);
}
@ -354,7 +352,7 @@ namespace AssetStudio
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();
m_LeafInfoArray = new LeafInfoConstant[numInfos];
@ -372,41 +370,41 @@ namespace AssetStudio
}
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();
}
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
m_FullPathID = 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_MirrorParamID = 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();
}
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_IKOnFeet = reader.ReadBoolean();
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
m_WriteDefaultValues = 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();
}
@ -480,7 +478,7 @@ namespace AssetStudio
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();
m_SelectorStateConstantArray = new SelectorStateConstant[numSelectors];
@ -509,7 +507,7 @@ namespace AssetStudio
{
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();
reader.AlignStream();
@ -517,7 +515,7 @@ namespace AssetStudio
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();
}
@ -527,7 +525,7 @@ namespace AssetStudio
m_PositionValues = new Vector3[numPosValues];
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();
@ -536,10 +534,10 @@ namespace AssetStudio
m_ScaleValues = new Vector3[numScaleValues];
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_IntValues = reader.ReadInt32Array();

View File

@ -42,7 +42,7 @@ namespace AssetStudio
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();
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();
}
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
m_AssetBundleName = reader.ReadAlignedString();

View File

@ -33,7 +33,7 @@ namespace AssetStudio
public AudioClip(ObjectReader reader) : base(reader)
{
if (version[0] < 5)
if (version < 5)
{
m_Format = reader.ReadInt32();
m_Type = (FMODSoundType)reader.ReadInt32();
@ -41,7 +41,7 @@ namespace AssetStudio
m_UseHardware = reader.ReadBoolean();
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();
m_Size = reader.ReadInt32();

View File

@ -23,7 +23,7 @@ namespace AssetStudio
public Limit(ObjectReader reader)
{
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_Max = reader.ReadVector3();
@ -50,7 +50,7 @@ namespace AssetStudio
var version = reader.version;
m_PreQ = 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();
}
@ -189,7 +189,7 @@ namespace AssetStudio
m_LeftHand = 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();
m_Handles = new Handle[numHandles];
@ -210,7 +210,7 @@ namespace AssetStudio
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();
}
@ -225,7 +225,7 @@ namespace AssetStudio
m_FeetSpacing = reader.ReadSingle();
m_HasLeftHand = 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();
}
@ -254,7 +254,7 @@ namespace AssetStudio
m_AvatarSkeleton = new Skeleton(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);
@ -265,7 +265,7 @@ namespace AssetStudio
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();
}
@ -273,7 +273,7 @@ namespace AssetStudio
m_RootMotionBoneIndex = reader.ReadInt32();
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_RootMotionSkeletonPose = new SkeletonPose(reader);

View File

@ -11,7 +11,7 @@ namespace AssetStudio
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_DefaultMaterial = new PPtr<Material>(reader);
@ -43,7 +43,7 @@ namespace AssetStudio
{
int m_AsciiStartOffset = reader.ReadInt32();
if (version[0] <= 3)
if (version <= 3)
{
int m_FontCountX = reader.ReadInt32();
int m_FontCountY = reader.ReadInt32();
@ -52,7 +52,7 @@ namespace AssetStudio
float m_Kerning = reader.ReadSingle();
float m_LineSpacing = reader.ReadSingle();
if (version[0] <= 3)
if (version <= 3)
{
int m_PerCharacterKerning_size = reader.ReadInt32();
for (int i = 0; i < m_PerCharacterKerning_size; i++)
@ -86,7 +86,7 @@ namespace AssetStudio
float vertheight = reader.ReadSingle();
float width = reader.ReadSingle();
if (version[0] >= 4)
if (version >= 4)
{
var flipped = reader.ReadBoolean();
reader.AlignStream();
@ -103,7 +103,7 @@ namespace AssetStudio
float second = reader.ReadSingle();
}
if (version[0] <= 3)
if (version <= 3)
{
var m_GridFont = reader.ReadBoolean();
reader.AlignStream();

View File

@ -16,7 +16,7 @@
m_FilterMode = reader.ReadInt32();
m_Aniso = reader.ReadInt32();
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
int m_WrapV = reader.ReadInt32();

View File

@ -23,7 +23,7 @@ namespace AssetStudio
m_Components = new PPtr<Component>[m_Component_size];
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();
}

View File

@ -34,7 +34,7 @@ namespace AssetStudio
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();
m_Ints = new KeyValuePair<string, int>[m_IntsSize];
@ -69,39 +69,39 @@ namespace AssetStudio
{
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();
}
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_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();
}
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
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_DoubleSidedGI = a_Stream.ReadBoolean(); //2017 and up
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();
}
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();
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();
}

View File

@ -40,7 +40,7 @@ namespace AssetStudio
m_Vertices = new PackedFloatVector(reader);
m_UV = new PackedFloatVector(reader);
if (version[0] < 5)
if (version < 5)
{
m_BindPoses = new PackedFloatVector(reader);
}
@ -49,15 +49,15 @@ namespace AssetStudio
m_Weights = new PackedIntVector(reader);
m_NormalSigns = new PackedIntVector(reader);
m_TangentSigns = new PackedIntVector(reader);
if (version[0] >= 5)
if (version >= 5)
{
m_FloatColors = new PackedFloatVector(reader);
}
m_BoneIndices = 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);
}
@ -87,7 +87,7 @@ namespace AssetStudio
channelMask = reader.ReadUInt32();
offset = reader.ReadUInt32();
if (version[0] < 4) //4.0 down
if (version < 4) //4.0 down
{
stride = reader.ReadUInt32();
align = reader.ReadUInt32();
@ -131,14 +131,14 @@ namespace AssetStudio
{
var version = reader.version;
if (version[0] < 2018)//2018 down
if (version < 2018)//2018 down
{
m_CurrentChannels = 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();
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];
}
@ -164,7 +164,7 @@ namespace AssetStudio
m_Streams[i] = new StreamInfo(reader);
}
if (version[0] < 4) //4.0 down
if (version < 4) //4.0 down
{
GetChannels(version);
}
@ -178,7 +178,7 @@ namespace AssetStudio
reader.AlignStream();
}
private void GetStreams(int[] version)
private void GetStreams(UnityVersion version)
{
var streamCount = m_Channels.Max(x => x.stream) + 1;
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];
for (int i = 0; i < 6; i++)
@ -305,20 +305,20 @@ namespace AssetStudio
{
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();
}
firstVertex = 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 aabbMaxDelta = reader.ReadVector3();
}
hasNormals = 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();
}
@ -352,7 +352,7 @@ namespace AssetStudio
{
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();
vertices = new BlendShapeVertex[numVerts];
@ -425,17 +425,17 @@ namespace AssetStudio
indexCount = reader.ReadUInt32();
topology = (GfxPrimitiveType)reader.ReadInt32();
if (version[0] < 4) //4.0 down
if (version < 4) //4.0 down
{
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();
}
if (version[0] >= 3) //3.0 and up
if (version >= 3) //3.0 and up
{
firstVertex = reader.ReadUInt32();
vertexCount = reader.ReadUInt32();
@ -474,12 +474,12 @@ namespace AssetStudio
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;
}
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();
@ -505,21 +505,21 @@ namespace AssetStudio
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);
}
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_BoneNameHashes = reader.ReadUInt32Array();
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_BonesAABB = new MinMaxAABB[m_BonesAABBSize];
@ -532,9 +532,9 @@ namespace AssetStudio
}
var m_MeshCompression = reader.ReadByte();
if (version[0] >= 4)
if (version >= 4)
{
if (version[0] < 5)
if (version < 5)
{
var m_StreamCompression = reader.ReadByte();
}
@ -545,9 +545,9 @@ namespace AssetStudio
reader.AlignStream();
//Unity fixed it in 2017.3.1p1 and later versions
if ((version[0] > 2017 || (version[0] == 2017 && version[1] >= 4)) || //2017.4
((version[0] == 2017 && version[1] == 3 && version[2] == 1) && buildType.IsPatch) || //fixed after 2017.3.1px
((version[0] == 2017 && version[1] == 3) && m_MeshCompression == 0))//2017.3.xfx with no compression
if (version >= (2017, 4) //2017.4
|| version == (2017, 3, 1) && buildType.IsPatch //fixed after 2017.3.1px
|| version == (2017, 3) && m_MeshCompression == 0)//2017.3.xfx with no compression
{
var m_IndexFormat = reader.ReadInt32();
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_Vertices = reader.ReadSingleArray(m_VertexCount * 3); //Vector3
@ -586,7 +586,7 @@ namespace AssetStudio
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();
m_Normals = new float[m_TangentSpace_size * 3];
@ -611,7 +611,7 @@ namespace AssetStudio
}
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()];
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();
}
@ -628,14 +628,14 @@ namespace AssetStudio
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);
}
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();
m_Colors = new float[m_Colors_size * 4];
@ -651,12 +651,12 @@ namespace AssetStudio
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();
}
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
var m_BakedConvexCollisionMesh = reader.ReadUInt8Array();
reader.AlignStream();
@ -664,14 +664,14 @@ namespace AssetStudio
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];
m_MeshMetrics[0] = 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();
m_StreamData = new StreamingInfo(reader);
@ -690,12 +690,12 @@ namespace AssetStudio
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();
}
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();
}
@ -716,7 +716,7 @@ namespace AssetStudio
var channelMask = new BitArray(new[] { (int)m_Stream.channelMask });
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;
}
@ -752,7 +752,7 @@ namespace AssetStudio
else
componentsFloatArray = MeshHelper.BytesToFloatArray(componentBytes, vertexFormat);
if (version[0] >= 2018)
if (version >= 2018)
{
switch (chn)
{
@ -841,7 +841,7 @@ namespace AssetStudio
m_UV1 = componentsFloatArray;
break;
case 5:
if (version[0] >= 5) //kShaderChannelTexCoord2
if (version >= 5) //kShaderChannelTexCoord2
{
m_UV2 = componentsFloatArray;
}
@ -906,7 +906,7 @@ namespace AssetStudio
}
}
//BindPose
if (version[0] < 5)
if (version < 5)
{
if (m_CompressedMesh.m_BindPoses.m_NumItems > 0)
{
@ -983,7 +983,7 @@ namespace AssetStudio
}
}
//FloatColor
if (version[0] >= 5)
if (version >= 5)
{
if (m_CompressedMesh.m_FloatColors.m_NumItems > 0)
{
@ -1074,7 +1074,7 @@ namespace AssetStudio
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 :
uint triIndex = 0;
@ -1238,9 +1238,9 @@ namespace AssetStudio
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)
{
@ -1258,7 +1258,7 @@ namespace AssetStudio
throw new ArgumentOutOfRangeException(nameof(format), format, null);
}
}
else if (version[0] < 2019)
else if (version < 2019)
{
switch ((VertexFormat2017)format)
{

View File

@ -13,11 +13,11 @@ namespace AssetStudio
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();
}
if (version[0] < 5) //5.0 down
if (version < 5) //5.0 down
{
var m_PropertiesHash = reader.ReadUInt32();
}
@ -25,17 +25,17 @@ namespace AssetStudio
{
var m_PropertiesHash = reader.ReadBytes(16);
}
if (version[0] < 3) //3.0 down
if (version < 3) //3.0 down
{
var m_PathName = 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_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();
}

View File

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

View File

@ -12,7 +12,7 @@ namespace AssetStudio
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);
}
@ -23,12 +23,12 @@ namespace AssetStudio
reader.AlignStream();
int defaultScreenOrientation = 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
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();
}
@ -40,7 +40,7 @@ namespace AssetStudio
var useOnDemandResources = reader.ReadBoolean();
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();
}

View File

@ -25,7 +25,7 @@ namespace AssetStudio
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_CastShadows = reader.ReadBoolean();
@ -34,27 +34,27 @@ namespace AssetStudio
}
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_CastShadows = 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();
}
if (version[0] >= 2021) //2021.1 and up
if (version >= 2021) //2021.1 and up
{
var m_StaticShadowCaster = reader.ReadByte();
}
var m_MotionVectors = reader.ReadByte();
var m_LightProbeUsage = 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();
}
if (version[0] >= 2020) //2020.1 and up
if (version >= 2020) //2020.1 and up
{
var m_RayTraceProcedural = reader.ReadByte();
}
@ -69,12 +69,12 @@ namespace AssetStudio
reader.AlignStream();
}
if (version[0] >= 2018) //2018 and up
if (version >= 2018) //2018 and up
{
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();
}
@ -83,12 +83,12 @@ namespace AssetStudio
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();
}
if (version[0] >= 5) //5.0 and up
if (version >= 5) //5.0 and up
{
var m_LightmapTilingOffsetDynamic = reader.ReadVector4();
}
@ -100,13 +100,13 @@ namespace AssetStudio
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();
}
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);
}
@ -118,17 +118,17 @@ namespace AssetStudio
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_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();
reader.AlignStream();
if (version[0] >= 5)//5.0 and up
if (version >= 5)//5.0 and up
{
var m_ReflectionProbeUsage = reader.ReadInt32();
}
@ -136,9 +136,9 @@ namespace AssetStudio
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();
}

View File

@ -243,14 +243,14 @@ namespace AssetStudio
}
rtSeparateBlend = reader.ReadBoolean();
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);
}
zTest = new SerializedShaderFloatValue(reader);
zWrite = 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);
}
@ -359,7 +359,7 @@ namespace AssetStudio
m_NameIndex = reader.ReadInt32();
m_Index = 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();
}
@ -380,7 +380,7 @@ namespace AssetStudio
m_NameIndex = 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();
}
@ -415,7 +415,7 @@ namespace AssetStudio
{
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();
m_StructParams = new StructParameter[numStructParams];
@ -426,11 +426,8 @@ namespace AssetStudio
}
m_Size = reader.ReadInt32();
if ((version[0] == 2020 && version[1] > 3) ||
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 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
if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
|| version >= (2021, 1, 4)) //2021.1.4f1 and up
{
m_IsPartialCB = reader.ReadBoolean();
reader.AlignStream();
@ -584,7 +581,7 @@ namespace AssetStudio
m_BlobIndex = reader.ReadUInt32();
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();
reader.AlignStream();
@ -594,7 +591,7 @@ namespace AssetStudio
else
{
m_KeywordIndices = reader.ReadUInt16Array();
if (version[0] >= 2017) //2017 and up
if (version >= 2017) //2017 and up
{
reader.AlignStream();
}
@ -604,11 +601,8 @@ namespace AssetStudio
m_GpuProgramType = (ShaderGpuProgramType)reader.ReadSByte();
reader.AlignStream();
if ((version[0] == 2020 && version[1] > 3) ||
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 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
if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
|| version >= (2021, 1, 1)) //2021.1.1f1 and up
{
m_Parameters = new SerializedProgramParameters(reader);
}
@ -663,7 +657,7 @@ namespace AssetStudio
m_UAVParams[i] = new UAVParameter(reader);
}
if (version[0] >= 2017) //2017 and up
if (version >= 2017) //2017 and up
{
int numSamplers = reader.ReadInt32();
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();
}
@ -705,16 +699,13 @@ namespace AssetStudio
m_SubPrograms[i] = new SerializedSubProgram(reader);
}
if ((version[0] == 2020 && version[1] > 3) ||
(version[0] == 2020 && version[1] == 3 && version[2] >= 2) || //2020.3.2f1 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
if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
|| version >= (2021, 1, 1)) //2021.1.1f1 and up
{
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();
reader.AlignStream();
@ -756,7 +747,7 @@ namespace AssetStudio
{
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();
m_EditorDataHash = new Hash128[numEditorDataHash];
@ -767,7 +758,7 @@ namespace AssetStudio
reader.AlignStream();
m_Platforms = reader.ReadUInt8Array();
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();
reader.AlignStream();
@ -791,12 +782,12 @@ namespace AssetStudio
progGeometry = new SerializedProgram(reader);
progHull = 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);
}
m_HasInstancingVariant = reader.ReadBoolean();
if (version[0] >= 2018) //2018 and up
if (version >= 2018) //2018 and up
{
var m_HasProceduralInstancingVariant = reader.ReadBoolean();
}
@ -805,7 +796,7 @@ namespace AssetStudio
m_Name = reader.ReadAlignedString();
m_TextureName = reader.ReadAlignedString();
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();
reader.AlignStream();
@ -898,7 +889,7 @@ namespace AssetStudio
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_KeywordFlags = reader.ReadUInt8Array();
@ -916,7 +907,7 @@ namespace AssetStudio
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();
m_CustomEditorForRenderPipelines = new SerializedCustomEditorForRenderPipeline[m_CustomEditorForRenderPipelinesSize];
@ -977,11 +968,11 @@ namespace AssetStudio
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);
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();
compressedLengths = reader.ReadUInt32ArrayArray();
@ -1002,7 +993,7 @@ namespace AssetStudio
new PPtr<Shader>(reader);
}
if (version[0] >= 2018)
if (version >= 2018)
{
var m_NonModifiableTexturesCount = reader.ReadInt32();
for (int i = 0; i < m_NonModifiableTexturesCount; i++)
@ -1020,7 +1011,7 @@ namespace AssetStudio
m_Script = reader.ReadUInt8Array();
reader.AlignStream();
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();
m_SubProgramBlob = reader.ReadUInt8Array();

View File

@ -18,7 +18,7 @@ namespace AssetStudio
var m_SkinNormals = reader.ReadBoolean(); //3.1.0 and below
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);
}
@ -31,7 +31,7 @@ namespace AssetStudio
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();
}

View File

@ -68,7 +68,7 @@ namespace AssetStudio
var version = reader.version;
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();
}
@ -99,12 +99,12 @@ namespace AssetStudio
var version = reader.version;
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);
}
if (version[0] >= 2019) //2019 and up
if (version >= 2019) //2019 and up
{
var secondaryTexturesSize = reader.ReadInt32();
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();
m_SubMeshes = new SubMesh[m_SubMeshesSize];
@ -141,11 +141,11 @@ namespace AssetStudio
reader.AlignStream();
}
if (version[0] >= 2018) //2018 and up
if (version >= 2018) //2018 and up
{
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();
for (int i = 0; i < m_SourceSkinSize; i++)
@ -157,18 +157,18 @@ namespace AssetStudio
textureRect = new Rectf(reader);
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();
}
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();
}
if (version[0] >= 2017) //2017 and up
if (version >= 2017) //2017 and up
{
downscaleMultiplier = reader.ReadSingle();
}
@ -210,28 +210,26 @@ namespace AssetStudio
{
m_Rect = new Rectf(reader);
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_PixelsToUnits = reader.ReadSingle();
if (version[0] > 5
|| (version[0] == 5 && version[1] > 4)
|| (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
if (version >= (5, 4, 2)
|| version == (5, 4, 1) && buildType.IsPatch && version.Build >= 3) //5.4.1p3 and up
{
m_Pivot = reader.ReadVector2();
}
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();
reader.AlignStream();
}
if (version[0] >= 2017) //2017 and up
if (version >= 2017) //2017 and up
{
var first = new Guid(reader.ReadBytes(16));
var second = reader.ReadInt64();
@ -244,7 +242,7 @@ namespace AssetStudio
m_RD = new SpriteRenderData(reader);
if (version[0] >= 2017) //2017 and up
if (version >= 2017) //2017 and up
{
var m_PhysicsShapeSize = reader.ReadInt32();
m_PhysicsShape = new Vector2[m_PhysicsShapeSize][];

View File

@ -22,14 +22,14 @@ namespace AssetStudio
alphaTexture = new PPtr<Texture2D>(reader);
textureRect = new Rectf(reader);
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();
}
uvTransform = reader.ReadVector4();
downscaleMultiplier = reader.ReadSingle();
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();
secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize];

View File

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

View File

@ -6,15 +6,15 @@
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_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();
}

View File

@ -78,12 +78,12 @@ namespace AssetStudio
m_Width = reader.ReadInt32();
m_Height = 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();
}
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();
}
@ -91,17 +91,17 @@ namespace AssetStudio
{
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();
}
if (version[0] >= 2020) //2020.1 and up
if (version >= 2020) //2020.1 and up
{
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();
reader.AlignStream();
@ -111,38 +111,35 @@ namespace AssetStudio
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();
}
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();
}
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();
}
m_ImageCount = reader.ReadInt32();
var m_TextureDimension = reader.ReadInt32();
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();
}
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();
}
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();
reader.AlignStream();
@ -152,7 +149,7 @@ namespace AssetStudio
m_PlatformBlob = Array.Empty<byte>();
}
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);
}

View File

@ -30,7 +30,7 @@ namespace AssetStudio
m_MipCount = reader.ReadInt32();
m_DataSize = reader.ReadUInt32();
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();
}

View File

@ -34,7 +34,7 @@ namespace AssetStudio
var m_ProxyHeight = reader.ReadUInt32();
Width = 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_PixelAspecRatioDen = reader.ReadUInt32();
@ -46,7 +46,7 @@ namespace AssetStudio
reader.AlignStream();
var m_AudioSampleRate = reader.ReadUInt32Array();
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_VideoShaders = new PPtr<Shader>[m_VideoShadersSize];
@ -57,7 +57,7 @@ namespace AssetStudio
}
m_ExternalResources = new StreamedResource(reader);
m_HasSplitAlpha = reader.ReadBoolean();
if (version[0] >= 2020) //2020.1 and up
if (version >= 2020) //2020.1 and up
{
var m_sRGB = reader.ReadBoolean();
}

View File

@ -17,7 +17,7 @@ namespace AssetStudio
public BuildTarget platform;
public SerializedFileFormatVersion m_Version;
public int[] version => assetsFile.version;
public UnityVersion version => assetsFile.version;
public BuildType buildType => assetsFile.buildType;
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 originalPath;
public string fileName;
public int[] version = { 0, 0, 0, 0 };
public UnityVersion version = new UnityVersion();
public BuildType buildType;
public List<Object> Objects;
public Dictionary<long, Object> ObjectsDic;
@ -73,7 +73,7 @@ namespace AssetStudio
if (header.m_Version >= SerializedFileFormatVersion.Unknown_7)
{
unityVersion = reader.ReadStringToNull();
SetVersion(unityVersion);
SetVersion(new UnityVersion(unityVersion));
}
if (header.m_Version >= SerializedFileFormatVersion.Unknown_8)
{
@ -217,19 +217,13 @@ namespace AssetStudio
//reader.AlignStream(16);
}
public void SetVersion(string stringVersion)
public void SetVersion(UnityVersion unityVer)
{
if (stringVersion != strippedVersion)
if (unityVer != null && !unityVer.IsStripped)
{
unityVersion = stringVersion;
var buildSplit = Regex.Replace(stringVersion, @"\d", "").Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
if (buildSplit.Length == 0)
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();
unityVersion = unityVer.FullVersion;
buildType = new BuildType(unityVer.BuildType);
version = unityVer;
}
}
@ -377,9 +371,5 @@ namespace AssetStudio
Objects.Add(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<ExportListType> o_exportAssetList;
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_avoidLoadingViaTypetree;
public static Option<bool> f_loadAllAssets;
@ -427,9 +427,9 @@ namespace AssetStudioCLI.Options
optionExample: "",
optionHelpGroup: HelpGroups.Advanced
);
o_unityVersion = new GroupedOption<string>
o_unityVersion = new GroupedOption<UnityVersion>
(
optionDefaultValue: "",
optionDefaultValue: null,
optionName: "--unity-version <text>",
optionDescription: "Specify Unity version\n",
optionExample: "Example: \"--unity-version 2017.4.39f1\"\n",
@ -970,7 +970,16 @@ namespace AssetStudioCLI.Options
}
break;
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;
default:
Console.WriteLine($"{"Error:".Color(brightRed)} Unknown option [{option.Color(brightRed)}].\n");

View File

@ -118,7 +118,7 @@ namespace AssetStudioCLI
{
var sb = new StringBuilder();
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 sample rate: {m_AudioClip.m_Frequency}");
sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}");
@ -143,7 +143,7 @@ namespace AssetStudioCLI
{
var sb = new StringBuilder();
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 sample rate: {m_AudioClip.m_Frequency}");
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 unityVer = assetsManager.assetsFileList[0].version;
long m_ObjectsCount;
if (unityVer[0] > 2020)
if (unityVer > 2020)
{
m_ObjectsCount = assetsManager.assetsFileList.Sum(x => x.m_Objects.LongCount(y =>
y.classID != (int)ClassIDType.Shader

View File

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

View File

@ -172,7 +172,6 @@ namespace AssetStudioGUI
}
}
}
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, paths));
saveDirectoryBackup = openDirectoryBackup;
BuildAssetStructures();
@ -184,7 +183,6 @@ namespace AssetStudioGUI
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
ResetForm();
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFileDialog1.FileNames));
BuildAssetStructures();
}
@ -197,12 +195,29 @@ namespace AssetStudioGUI
if (openFolderDialog.ShowDialog(this) == DialogResult.OK)
{
ResetForm();
assetsManager.SpecifyUnityVersion = specifyUnityVersion.Text;
await Task.Run(() => assetsManager.LoadFilesAndFolders(out openDirectoryBackup, openFolderDialog.Folder));
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)
{
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
@ -288,7 +303,7 @@ namespace AssetStudioGUI
allToolStripMenuItem.Checked = true;
var log = $"Finished loading {assetsManager.assetsFileList.Count} file(s) with {assetListView.Items.Count} exportable assets";
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.Count);
var objectsCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
@ -948,7 +963,7 @@ namespace AssetStudioGUI
{
//Info
assetItem.InfoText = "Compression format: ";
if (m_AudioClip.version[0] < 5)
if (m_AudioClip.version < 5)
{
switch (m_AudioClip.m_Type)
{

View File

@ -117,7 +117,7 @@ namespace AssetStudioGUI
{
var sb = new StringBuilder();
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 compression format: {m_AudioClip.m_CompressionFormat}");
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
@ -144,7 +144,7 @@ namespace AssetStudioGUI
{
var sb = new StringBuilder();
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 compression format: {m_AudioClip.m_CompressionFormat}");
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");

View File

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

View File

@ -4,9 +4,9 @@ namespace AssetStudio
{
public class SerializedTypeHelper
{
private readonly int[] version;
private readonly UnityVersion version;
public SerializedTypeHelper(int[] version)
public SerializedTypeHelper(UnityVersion version)
{
this.version = version;
}
@ -24,7 +24,7 @@ namespace AssetStudio
{
nodes.Add(new TypeTreeNode($"PPtr<{type}>", name, indent, 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));
}
@ -58,7 +58,7 @@ namespace AssetStudio
nodes.Add(new TypeTreeNode("float", "value", indent + 4, false));
nodes.Add(new TypeTreeNode("float", "inSlope", 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("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_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));
}
@ -75,7 +75,7 @@ namespace AssetStudio
public void AddGradient(List<TypeTreeNode> nodes, string name, int indent)
{
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, "key1", indent + 1);
@ -113,7 +113,7 @@ namespace AssetStudio
nodes.Add(new TypeTreeNode("UInt16", "atime5", indent + 1, false));
nodes.Add(new TypeTreeNode("UInt16", "atime6", 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));
}
@ -134,7 +134,7 @@ namespace AssetStudio
AddGUIStyleState(nodes, "m_OnActive", indent + 1);
AddGUIStyleState(nodes, "m_OnFocused", 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_Padding", indent + 1);
@ -146,7 +146,7 @@ namespace AssetStudio
}
AddRectOffset(nodes, "m_Overflow", 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_FontStyle", indent + 1, false));
@ -171,7 +171,7 @@ namespace AssetStudio
AddVector2f(nodes, "m_ClipOffset", indent + 1);
nodes.Add(new TypeTreeNode("float", "m_FixedWidth", 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_FontStyle", indent + 1, false));

View File

@ -871,11 +871,11 @@ namespace AssetStudio
public int Length;
public int Segment;
public ShaderSubProgramEntry(BinaryReader reader, int[] version)
public ShaderSubProgramEntry(BinaryReader reader, UnityVersion version)
{
Offset = 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();
}
@ -887,7 +887,7 @@ namespace AssetStudio
public ShaderSubProgramEntry[] entries;
public ShaderSubProgram[] m_SubPrograms;
public ShaderProgram(BinaryReader reader, int[] version)
public ShaderProgram(BinaryReader reader, UnityVersion version)
{
var subProgramsCapacity = reader.ReadInt32();
entries = new ShaderSubProgramEntry[subProgramsCapacity];

View File

@ -13,7 +13,7 @@ namespace AssetStudio
private int m_HeightCrop;
private TextureFormat m_TextureFormat;
private byte[] m_PlatformBlob;
private int[] version;
private UnityVersion version;
private BuildTarget platform;
private int outPutDataSize;
@ -748,7 +748,7 @@ namespace AssetStudio
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.ETC2_RGBA8Crunched)
{