From 6bdf6fa80bdb28f477260d26bc50a8a172556cd3 Mon Sep 17 00:00:00 2001 From: VaDiM Date: Fri, 27 Feb 2026 03:24:13 +0300 Subject: [PATCH] Extend UnityVersion class to compare build numbers --- AssetStudio/Classes/AnimationClip.cs | 2 +- AssetStudio/Classes/Animator.cs | 2 +- AssetStudio/Classes/GameObject.cs | 2 +- AssetStudio/Classes/Mesh.cs | 2 +- AssetStudio/Classes/Texture2D.cs | 2 +- AssetStudio/UnityVersion.cs | 128 ++++++++++++++++++++++++++- 6 files changed, 132 insertions(+), 6 deletions(-) diff --git a/AssetStudio/Classes/AnimationClip.cs b/AssetStudio/Classes/AnimationClip.cs index 1a24d96..1558218 100644 --- a/AssetStudio/Classes/AnimationClip.cs +++ b/AssetStudio/Classes/AnimationClip.cs @@ -753,7 +753,7 @@ namespace AssetStudio { m_Binding = new ValueArrayConstant(reader); } - if (version.IsTuanjie && (version > (2022, 3, 48) || (version == (2022, 3, 48) && version.Build >= 3))) //2022.3.48t3(1.4.0) and up + if (version.IsTuanjie && version >= (2022, 3, 48, 3)) //2022.3.48t3(1.4.0) and up { m_ACLClip = new ACLClip(reader); } diff --git a/AssetStudio/Classes/Animator.cs b/AssetStudio/Classes/Animator.cs index e850b37..1a05f34 100644 --- a/AssetStudio/Classes/Animator.cs +++ b/AssetStudio/Classes/Animator.cs @@ -17,7 +17,7 @@ var m_UpdateMode = reader.ReadInt32(); } - if (version.IsTuanjie && (version > (2022, 3, 48) || version == (2022, 3, 48) && version.Build >= 7)) //2022.3.48t7(1.4.4) and up + if (version.IsTuanjie && version >= (2022, 3, 48, 7)) //2022.3.48t7(1.4.4) and up { var m_UpdateFrequencyMode = reader.ReadInt32(); var m_UpdateFrequency = reader.ReadSingle(); diff --git a/AssetStudio/Classes/GameObject.cs b/AssetStudio/Classes/GameObject.cs index a382413..e6d88a2 100644 --- a/AssetStudio/Classes/GameObject.cs +++ b/AssetStudio/Classes/GameObject.cs @@ -32,7 +32,7 @@ namespace AssetStudio } var m_Layer = reader.ReadInt32(); - if (version.IsTuanjie && (version > (2022, 3, 2) || (version == (2022, 3, 2) && version.Build >= 11))) //2022.3.2t11(1.1.3) and up + if (version.IsTuanjie && version >= (2022, 3, 2, 11)) //2022.3.2t11(1.1.3) and up { var m_HasEditorInfo = reader.ReadBoolean(); reader.AlignStream(); diff --git a/AssetStudio/Classes/Mesh.cs b/AssetStudio/Classes/Mesh.cs index e649407..8ba6da6 100644 --- a/AssetStudio/Classes/Mesh.cs +++ b/AssetStudio/Classes/Mesh.cs @@ -805,7 +805,7 @@ namespace AssetStudio m_StreamData = new StreamingInfo(reader); } - if (version.IsTuanjie && (version > (2022, 3, 2) || (version == (2022, 3, 2) && version.Build >= 13))) //2022.3.2t13(1.2.0) and up + if (version.IsTuanjie && version >= (2022, 3, 2, 13)) //2022.3.2t13(1.2.0) and up { var m_GenerateGeometryBuffer = reader.ReadBoolean(); m_HasVirtualGeometryMesh = reader.ReadBoolean(); diff --git a/AssetStudio/Classes/Texture2D.cs b/AssetStudio/Classes/Texture2D.cs index af36baa..65d57ad 100644 --- a/AssetStudio/Classes/Texture2D.cs +++ b/AssetStudio/Classes/Texture2D.cs @@ -83,7 +83,7 @@ namespace AssetStudio { var m_MipsStripped = reader.ReadInt32(); } - if (version.IsTuanjie && (version > (2022, 3, 2) || version.Build >= 8)) //2022.3.2t8(1.1.0) and up + if (version.IsTuanjie && version >= (2022, 3, 2, 8)) //2022.3.2t8(1.1.0) and up { var m_WebStreaming = reader.ReadBoolean(); reader.AlignStream(); diff --git a/AssetStudio/UnityVersion.cs b/AssetStudio/UnityVersion.cs index 2ba0ed1..ee9441a 100644 --- a/AssetStudio/UnityVersion.cs +++ b/AssetStudio/UnityVersion.cs @@ -210,6 +210,38 @@ namespace AssetStudio } #endregion + #region UnityVer, (int, int, int, int) + public static bool operator ==(UnityVersion left, (int, int, int, int) right) + { + return (left?.Major, left?.Minor, left?.Patch, left?.Build) == (right.Item1, right.Item2, right.Item3, right.Item4); + } + + public static bool operator !=(UnityVersion left, (int, int, int, int) right) + { + return (left?.Major, left?.Minor, left?.Patch, left?.Build) != (right.Item1, right.Item2, right.Item3, right.Item4); + } + + public static bool operator >(UnityVersion left, (int, int, int, int) right) + { + return left?.CompareTo(right) > 0; + } + + public static bool operator <(UnityVersion left, (int, int, int, int) right) + { + return left?.CompareTo(right) < 0; + } + + public static bool operator >=(UnityVersion left, (int, int, int, int) right) + { + return left == right || left > right; + } + + public static bool operator <=(UnityVersion left, (int, int, int, int) right) + { + return left == right || left < right; + } + #endregion + #region int, UnityVer public static bool operator ==(int left, UnityVersion right) { @@ -305,7 +337,39 @@ namespace AssetStudio return left == right || left < right; } #endregion - + + #region (int, int, int, int), UnityVer + public static bool operator ==((int, int, int, int) left, UnityVersion right) + { + return (left.Item1, left.Item2, left.Item3, left.Item4) == (right?.Major, right?.Minor, right?.Patch, right?.Build); + } + + public static bool operator !=((int, int, int, int) left, UnityVersion right) + { + return (left.Item1, left.Item2, left.Item3, left.Item4) != (right?.Major, right?.Minor, right?.Patch, right?.Build); + } + + public static bool operator >((int, int, int, int) left, UnityVersion right) + { + return right?.CompareTo(left) < 0; + } + + public static bool operator <((int, int, int, int) left, UnityVersion right) + { + return right?.CompareTo(left) > 0; + } + + public static bool operator >=((int, int, int, int) left, UnityVersion right) + { + return left == right || left > right; + } + + public static bool operator <=((int, int, int, int) left, UnityVersion right) + { + return left == right || left < right; + } + #endregion + private int CompareTo((int, int) other) { var result = Major.CompareTo(other.Item1); @@ -340,6 +404,23 @@ namespace AssetStudio return 0; } + private int CompareTo((int, int, int, int) other) + { + var result = CompareTo((other.Item1, other.Item2, other.Item3)); + if (result != 0) + { + return result; + } + + result = Build.CompareTo(other.Item4); + if (result != 0) + { + return result; + } + + return 0; + } + private int CompareTo(UnityVersion other) { return CompareTo((other.Major, other.Minor, other.Patch)); @@ -416,6 +497,11 @@ namespace AssetStudio return ver >= lowerLimit && ver < upperLimit; } + public static bool IsInRange(this UnityVersion ver, (int, 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; @@ -431,6 +517,11 @@ namespace AssetStudio return ver >= lowerLimit && ver < upperLimit; } + public static bool IsInRange(this UnityVersion ver, UnityVersion lowerLimit, (int, 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; @@ -446,6 +537,11 @@ namespace AssetStudio return ver.Major >= lowerLimit && ver < upperLimit; } + public static bool IsInRange(this UnityVersion ver, int lowerLimit, (int, 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; @@ -456,6 +552,11 @@ namespace AssetStudio return ver >= lowerLimit && ver.Major < upperLimit; } + public static bool IsInRange(this UnityVersion ver, (int, 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; @@ -466,6 +567,11 @@ namespace AssetStudio return ver >= lowerLimit && ver < upperLimit; } + public static bool IsInRange(this UnityVersion ver, (int, int) lowerLimit, (int, 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; @@ -475,5 +581,25 @@ namespace AssetStudio { return ver >= lowerLimit && ver < upperLimit; } + + public static bool IsInRange(this UnityVersion ver, (int, int, int) lowerLimit, (int, int, int, int) upperLimit) + { + return ver >= lowerLimit && ver < upperLimit; + } + + public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, (int, int) upperLimit) + { + return ver >= lowerLimit && ver < upperLimit; + } + + public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, (int, int, int) upperLimit) + { + return ver >= lowerLimit && ver < upperLimit; + } + + public static bool IsInRange(this UnityVersion ver, (int, int, int, int) lowerLimit, (int, int, int, int) upperLimit) + { + return ver >= lowerLimit && ver < upperLimit; + } } }