Allocation-safe asset reading
Try to not pre-allocate memory during asset reading
This commit is contained in:
@@ -287,6 +287,11 @@ namespace AssetStudio
|
|||||||
|
|
||||||
var compressedSize = (int)m_Header.compressedBlocksInfoSize;
|
var compressedSize = (int)m_Header.compressedBlocksInfoSize;
|
||||||
var uncompressedSize = (int)m_Header.uncompressedBlocksInfoSize;
|
var uncompressedSize = (int)m_Header.uncompressedBlocksInfoSize;
|
||||||
|
if (uncompressedSize < 0 || compressedSize < 0 || compressedSize > reader.BaseStream.Length)
|
||||||
|
{
|
||||||
|
throw new IOException("Incorrect blockInfo length.\nBlockInfo sizes might be encrypted.\n");
|
||||||
|
}
|
||||||
|
|
||||||
if ((m_Header.flags & ArchiveFlags.BlocksInfoAtTheEnd) != 0)
|
if ((m_Header.flags & ArchiveFlags.BlocksInfoAtTheEnd) != 0)
|
||||||
{
|
{
|
||||||
var position = reader.Position;
|
var position = reader.Position;
|
||||||
|
|||||||
@@ -1,22 +1,19 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public sealed class Animation : Behaviour
|
public sealed class Animation : Behaviour
|
||||||
{
|
{
|
||||||
public PPtr<AnimationClip>[] m_Animations;
|
public List<PPtr<AnimationClip>> m_Animations;
|
||||||
|
|
||||||
public Animation(ObjectReader reader) : base(reader)
|
public Animation(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_Animation = new PPtr<AnimationClip>(reader);
|
var m_Animation = new PPtr<AnimationClip>(reader);
|
||||||
int numAnimations = reader.ReadInt32();
|
int numAnimations = reader.ReadInt32();
|
||||||
m_Animations = new PPtr<AnimationClip>[numAnimations];
|
m_Animations = new List<PPtr<AnimationClip>>();
|
||||||
for (int i = 0; i < numAnimations; i++)
|
for (var i = 0; i < numAnimations; i++)
|
||||||
{
|
{
|
||||||
m_Animations[i] = new PPtr<AnimationClip>(reader);
|
m_Animations.Add(new PPtr<AnimationClip>(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class AnimationCurve<T>
|
public class AnimationCurve<T>
|
||||||
{
|
{
|
||||||
public Keyframe<T>[] m_Curve;
|
public List<Keyframe<T>> m_Curve;
|
||||||
public int m_PreInfinity;
|
public int m_PreInfinity;
|
||||||
public int m_PostInfinity;
|
public int m_PostInfinity;
|
||||||
public int m_RotationOrder;
|
public int m_RotationOrder;
|
||||||
@@ -45,10 +45,10 @@ namespace AssetStudio
|
|||||||
public AnimationCurve(ObjectReader reader, Func<T> readerFunc)
|
public AnimationCurve(ObjectReader reader, Func<T> readerFunc)
|
||||||
{
|
{
|
||||||
int numCurves = reader.ReadInt32();
|
int numCurves = reader.ReadInt32();
|
||||||
m_Curve = new Keyframe<T>[numCurves];
|
m_Curve = new List<Keyframe<T>>();
|
||||||
for (int i = 0; i < numCurves; i++)
|
for (var i = 0; i < numCurves; i++)
|
||||||
{
|
{
|
||||||
m_Curve[i] = new Keyframe<T>(reader, readerFunc);
|
m_Curve.Add(new Keyframe<T>(reader, readerFunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_PreInfinity = reader.ReadInt32();
|
m_PreInfinity = reader.ReadInt32();
|
||||||
@@ -111,7 +111,7 @@ namespace AssetStudio
|
|||||||
var data = new List<float>();
|
var data = new List<float>();
|
||||||
for (var index = 0; index != end; index += chunkStride / 4)
|
for (var index = 0; index != end; index += chunkStride / 4)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < itemCountInChunk; ++i)
|
for (var i = 0; i < itemCountInChunk; ++i)
|
||||||
{
|
{
|
||||||
uint x = 0;
|
uint x = 0;
|
||||||
|
|
||||||
@@ -132,7 +132,6 @@ namespace AssetStudio
|
|||||||
data.Add(x / (scale * ((1 << m_BitSize) - 1)) + m_Start);
|
data.Add(x / (scale * ((1 << m_BitSize) - 1)) + m_Start);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return data.ToArray();
|
return data.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -159,16 +158,16 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public int[] UnpackInts()
|
public int[] UnpackInts()
|
||||||
{
|
{
|
||||||
var data = new int[m_NumItems];
|
var data = new List<int>();
|
||||||
int indexPos = 0;
|
int indexPos = 0;
|
||||||
int bitPos = 0;
|
int bitPos = 0;
|
||||||
for (int i = 0; i < m_NumItems; i++)
|
for (var i = 0; i < m_NumItems; i++)
|
||||||
{
|
{
|
||||||
int bits = 0;
|
int bits = 0;
|
||||||
data[i] = 0;
|
int elem = 0;
|
||||||
while (bits < m_BitSize)
|
while (bits < m_BitSize)
|
||||||
{
|
{
|
||||||
data[i] |= (m_Data[indexPos] >> bitPos) << bits;
|
elem |= (m_Data[indexPos] >> bitPos) << bits;
|
||||||
int num = Math.Min(m_BitSize - bits, 8 - bitPos);
|
int num = Math.Min(m_BitSize - bits, 8 - bitPos);
|
||||||
bitPos += num;
|
bitPos += num;
|
||||||
bits += num;
|
bits += num;
|
||||||
@@ -178,9 +177,10 @@ namespace AssetStudio
|
|||||||
bitPos = 0;
|
bitPos = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data[i] &= (1 << m_BitSize) - 1;
|
elem &= (1 << m_BitSize) - 1;
|
||||||
|
data.Add(elem);
|
||||||
}
|
}
|
||||||
return data;
|
return data.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,11 +203,11 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public Quaternion[] UnpackQuats()
|
public Quaternion[] UnpackQuats()
|
||||||
{
|
{
|
||||||
var data = new Quaternion[m_NumItems];
|
var data = new List<Quaternion>();
|
||||||
int indexPos = 0;
|
int indexPos = 0;
|
||||||
int bitPos = 0;
|
int bitPos = 0;
|
||||||
|
|
||||||
for (int i = 0; i < m_NumItems; i++)
|
for (var i = 0; i < m_NumItems; i++)
|
||||||
{
|
{
|
||||||
uint flags = 0;
|
uint flags = 0;
|
||||||
|
|
||||||
@@ -226,10 +226,9 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
flags &= 7;
|
flags &= 7;
|
||||||
|
|
||||||
|
|
||||||
var q = new Quaternion();
|
var q = new Quaternion();
|
||||||
float sum = 0;
|
float sum = 0;
|
||||||
for (int j = 0; j < 4; j++)
|
for (var j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
if ((flags & 3) != j)
|
if ((flags & 3) != j)
|
||||||
{
|
{
|
||||||
@@ -254,15 +253,13 @@ namespace AssetStudio
|
|||||||
sum += q[j] * q[j];
|
sum += q[j] * q[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int lastComponent = (int)(flags & 3);
|
int lastComponent = (int)(flags & 3);
|
||||||
q[lastComponent] = MathF.Sqrt(1 - sum);
|
q[lastComponent] = MathF.Sqrt(1 - sum);
|
||||||
if ((flags & 4) != 0u)
|
if ((flags & 4) != 0u)
|
||||||
q[lastComponent] = -q[lastComponent];
|
q[lastComponent] = -q[lastComponent];
|
||||||
data[i] = q;
|
data.Add(q);
|
||||||
}
|
}
|
||||||
|
return data.ToArray();
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,7 +340,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class PPtrCurve
|
public class PPtrCurve
|
||||||
{
|
{
|
||||||
public PPtrKeyframe[] curve;
|
public List<PPtrKeyframe> curve;
|
||||||
public string attribute;
|
public string attribute;
|
||||||
public string path;
|
public string path;
|
||||||
public int classID;
|
public int classID;
|
||||||
@@ -355,10 +352,10 @@ namespace AssetStudio
|
|||||||
public PPtrCurve(ObjectReader reader)
|
public PPtrCurve(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numCurves = reader.ReadInt32();
|
int numCurves = reader.ReadInt32();
|
||||||
curve = new PPtrKeyframe[numCurves];
|
curve = new List<PPtrKeyframe>();
|
||||||
for (int i = 0; i < numCurves; i++)
|
for (var i = 0; i < numCurves; i++)
|
||||||
{
|
{
|
||||||
curve[i] = new PPtrKeyframe(reader);
|
curve.Add(new PPtrKeyframe(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
attribute = reader.ReadAlignedString();
|
attribute = reader.ReadAlignedString();
|
||||||
@@ -470,11 +467,12 @@ namespace AssetStudio
|
|||||||
m_LookAtWeight = reader.ReadVector4();
|
m_LookAtWeight = reader.ReadVector4();
|
||||||
|
|
||||||
int numGoals = reader.ReadInt32();
|
int numGoals = reader.ReadInt32();
|
||||||
m_GoalArray = new HumanGoal[numGoals];
|
var goalList = new List<HumanGoal>();
|
||||||
for (int i = 0; i < numGoals; i++)
|
for (var i = 0; i < numGoals; i++)
|
||||||
{
|
{
|
||||||
m_GoalArray[i] = new HumanGoal(reader);
|
goalList.Add(new HumanGoal(reader));
|
||||||
}
|
}
|
||||||
|
m_GoalArray = goalList.ToArray();
|
||||||
|
|
||||||
m_LeftHandPose = new HandPose(reader);
|
m_LeftHandPose = new HandPose(reader);
|
||||||
m_RightHandPose = new HandPose(reader);
|
m_RightHandPose = new HandPose(reader);
|
||||||
@@ -484,11 +482,14 @@ namespace AssetStudio
|
|||||||
if (version >= (5, 2))//5.2 and up
|
if (version >= (5, 2))//5.2 and up
|
||||||
{
|
{
|
||||||
int numTDof = reader.ReadInt32();
|
int numTDof = reader.ReadInt32();
|
||||||
m_TDoFArray = new Vector3[numTDof];
|
var tDoFList = new List<Vector3>();
|
||||||
for (int i = 0; i < numTDof; i++)
|
for (var i = 0; i < numTDof; i++)
|
||||||
{
|
{
|
||||||
m_TDoFArray[i] = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4();//5.4 and up
|
tDoFList.Add(version >= (5, 4) //5.4 and up
|
||||||
|
? reader.ReadVector3()
|
||||||
|
: (Vector3) reader.ReadVector4());
|
||||||
}
|
}
|
||||||
|
m_TDoFArray = tDoFList.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -556,7 +557,7 @@ namespace AssetStudio
|
|||||||
public class StreamedFrame
|
public class StreamedFrame
|
||||||
{
|
{
|
||||||
public float time;
|
public float time;
|
||||||
public StreamedCurveKey[] keyList;
|
public List<StreamedCurveKey> keyList;
|
||||||
|
|
||||||
public StreamedFrame() { }
|
public StreamedFrame() { }
|
||||||
|
|
||||||
@@ -565,10 +566,10 @@ namespace AssetStudio
|
|||||||
time = reader.ReadSingle();
|
time = reader.ReadSingle();
|
||||||
|
|
||||||
int numKeys = reader.ReadInt32();
|
int numKeys = reader.ReadInt32();
|
||||||
keyList = new StreamedCurveKey[numKeys];
|
keyList = new List<StreamedCurveKey>();
|
||||||
for (int i = 0; i < numKeys; i++)
|
for (var i = 0; i < numKeys; i++)
|
||||||
{
|
{
|
||||||
keyList[i] = new StreamedCurveKey(reader);
|
keyList.Add(new StreamedCurveKey(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -586,12 +587,12 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int frameIndex = 2; frameIndex < frameList.Count - 1; frameIndex++)
|
for (var frameIndex = 2; frameIndex < frameList.Count - 1; frameIndex++)
|
||||||
{
|
{
|
||||||
var frame = frameList[frameIndex];
|
var frame = frameList[frameIndex];
|
||||||
foreach (var curveKey in frame.keyList)
|
foreach (var curveKey in frame.keyList)
|
||||||
{
|
{
|
||||||
for (int i = frameIndex - 1; i >= 0; i--)
|
for (var i = frameIndex - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
var preFrame = frameList[i];
|
var preFrame = frameList[i];
|
||||||
var preCurveKey = preFrame.keyList.FirstOrDefault(x => x.index == curveKey.index);
|
var preCurveKey = preFrame.keyList.FirstOrDefault(x => x.index == curveKey.index);
|
||||||
@@ -669,11 +670,12 @@ namespace AssetStudio
|
|||||||
public ValueArrayConstant(ObjectReader reader)
|
public ValueArrayConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numVals = reader.ReadInt32();
|
int numVals = reader.ReadInt32();
|
||||||
m_ValueArray = new ValueConstant[numVals];
|
var valueList = new List<ValueConstant>();
|
||||||
for (int i = 0; i < numVals; i++)
|
for (var i = 0; i < numVals; i++)
|
||||||
{
|
{
|
||||||
m_ValueArray[i] = new ValueConstant(reader);
|
valueList.Add(new ValueConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_ValueArray = valueList.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,7 +720,7 @@ namespace AssetStudio
|
|||||||
var bindings = new AnimationClipBindingConstant();
|
var bindings = new AnimationClipBindingConstant();
|
||||||
var genericBindings = new List<GenericBinding>();
|
var genericBindings = new List<GenericBinding>();
|
||||||
var values = m_Binding;
|
var values = m_Binding;
|
||||||
for (int i = 0; i < values.m_ValueArray.Length;)
|
for (var i = 0; i < values.m_ValueArray.Length;)
|
||||||
{
|
{
|
||||||
var curveID = values.m_ValueArray[i].m_ID;
|
var curveID = values.m_ValueArray[i].m_ID;
|
||||||
var curveTypeID = values.m_ValueArray[i].m_TypeID;
|
var curveTypeID = values.m_ValueArray[i].m_TypeID;
|
||||||
@@ -753,7 +755,7 @@ namespace AssetStudio
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bindings.genericBindings = genericBindings.ToArray();
|
bindings.genericBindings = genericBindings;
|
||||||
return bindings;
|
return bindings;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -834,11 +836,13 @@ namespace AssetStudio
|
|||||||
m_IndexArray = reader.ReadInt32Array();
|
m_IndexArray = reader.ReadInt32Array();
|
||||||
if (version < (4, 3)) //4.3 down
|
if (version < (4, 3)) //4.3 down
|
||||||
{
|
{
|
||||||
var m_AdditionalCurveIndexArray = reader.ReadInt32Array();
|
var m_AdditionalCurveIndexArrayNum = reader.ReadInt32();
|
||||||
|
reader.Position += m_AdditionalCurveIndexArrayNum * 4; //skip int[] m_AdditionalCurveIndexArray
|
||||||
}
|
}
|
||||||
int numDeltas = reader.ReadInt32();
|
int numDeltas = reader.ReadInt32();
|
||||||
|
reader.ThrowIfTooLarge(numDeltas * 8f);
|
||||||
m_ValueArrayDelta = new ValueDelta[numDeltas];
|
m_ValueArrayDelta = new ValueDelta[numDeltas];
|
||||||
for (int i = 0; i < numDeltas; i++)
|
for (var i = 0; i < numDeltas; i++)
|
||||||
{
|
{
|
||||||
m_ValueArrayDelta[i] = new ValueDelta(reader);
|
m_ValueArrayDelta[i] = new ValueDelta(reader);
|
||||||
}
|
}
|
||||||
@@ -911,25 +915,25 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class AnimationClipBindingConstant
|
public class AnimationClipBindingConstant
|
||||||
{
|
{
|
||||||
public GenericBinding[] genericBindings;
|
public List<GenericBinding> genericBindings;
|
||||||
public PPtr<Object>[] pptrCurveMapping;
|
public List<PPtr<Object>> pptrCurveMapping;
|
||||||
|
|
||||||
public AnimationClipBindingConstant() { }
|
public AnimationClipBindingConstant() { }
|
||||||
|
|
||||||
public AnimationClipBindingConstant(ObjectReader reader)
|
public AnimationClipBindingConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numBindings = reader.ReadInt32();
|
int numBindings = reader.ReadInt32();
|
||||||
genericBindings = new GenericBinding[numBindings];
|
genericBindings = new List<GenericBinding>();
|
||||||
for (int i = 0; i < numBindings; i++)
|
for (var i = 0; i < numBindings; i++)
|
||||||
{
|
{
|
||||||
genericBindings[i] = new GenericBinding(reader);
|
genericBindings.Add(new GenericBinding(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numMappings = reader.ReadInt32();
|
int numMappings = reader.ReadInt32();
|
||||||
pptrCurveMapping = new PPtr<Object>[numMappings];
|
pptrCurveMapping = new List<PPtr<Object>>();
|
||||||
for (int i = 0; i < numMappings; i++)
|
for (var i = 0; i < numMappings; i++)
|
||||||
{
|
{
|
||||||
pptrCurveMapping[i] = new PPtr<Object>(reader);
|
pptrCurveMapping.Add(new PPtr<Object>(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1013,20 +1017,20 @@ namespace AssetStudio
|
|||||||
public bool m_Legacy;
|
public bool m_Legacy;
|
||||||
public bool m_Compressed;
|
public bool m_Compressed;
|
||||||
public bool m_UseHighQualityCurve;
|
public bool m_UseHighQualityCurve;
|
||||||
public QuaternionCurve[] m_RotationCurves;
|
public List<QuaternionCurve> m_RotationCurves;
|
||||||
public CompressedAnimationCurve[] m_CompressedRotationCurves;
|
public List<CompressedAnimationCurve> m_CompressedRotationCurves;
|
||||||
public Vector3Curve[] m_EulerCurves;
|
public List<Vector3Curve> m_EulerCurves;
|
||||||
public Vector3Curve[] m_PositionCurves;
|
public List<Vector3Curve> m_PositionCurves;
|
||||||
public Vector3Curve[] m_ScaleCurves;
|
public List<Vector3Curve> m_ScaleCurves;
|
||||||
public FloatCurve[] m_FloatCurves;
|
public List<FloatCurve> m_FloatCurves;
|
||||||
public PPtrCurve[] m_PPtrCurves;
|
public List<PPtrCurve> m_PPtrCurves;
|
||||||
public float m_SampleRate;
|
public float m_SampleRate;
|
||||||
public int m_WrapMode;
|
public int m_WrapMode;
|
||||||
public AABB m_Bounds;
|
public AABB m_Bounds;
|
||||||
public uint m_MuscleClipSize;
|
public uint m_MuscleClipSize;
|
||||||
public ClipMuscleConstant m_MuscleClip;
|
public ClipMuscleConstant m_MuscleClip;
|
||||||
public AnimationClipBindingConstant m_ClipBindingConstant;
|
public AnimationClipBindingConstant m_ClipBindingConstant;
|
||||||
public AnimationEvent[] m_Events;
|
public List<AnimationEvent> m_Events;
|
||||||
public byte[] m_AnimData;
|
public byte[] m_AnimData;
|
||||||
public StreamingInfo m_StreamingInfo;
|
public StreamingInfo m_StreamingInfo;
|
||||||
|
|
||||||
@@ -1083,9 +1087,9 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_EulerCurves = Vector3CurveArray(objReader);
|
m_EulerCurves = Vector3CurveList(objReader);
|
||||||
m_PositionCurves = Vector3CurveArray(objReader);
|
m_PositionCurves = Vector3CurveList(objReader);
|
||||||
m_ScaleCurves = Vector3CurveArray(objReader);
|
m_ScaleCurves = Vector3CurveList(objReader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1116,19 +1120,19 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
int numRCurves = reader.ReadInt32();
|
int numRCurves = reader.ReadInt32();
|
||||||
m_RotationCurves = new QuaternionCurve[numRCurves];
|
m_RotationCurves = new List<QuaternionCurve>();
|
||||||
for (int i = 0; i < numRCurves; i++)
|
for (var i = 0; i < numRCurves; i++)
|
||||||
{
|
{
|
||||||
m_RotationCurves[i] = new QuaternionCurve(reader);
|
m_RotationCurves.Add(new QuaternionCurve(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= (2, 6)) //2.6 and up
|
if (version >= (2, 6)) //2.6 and up
|
||||||
{
|
{
|
||||||
int numCRCurves = reader.ReadInt32();
|
int numCRCurves = reader.ReadInt32();
|
||||||
m_CompressedRotationCurves = new CompressedAnimationCurve[numCRCurves];
|
m_CompressedRotationCurves = new List<CompressedAnimationCurve>();
|
||||||
for (int i = 0; i < numCRCurves; i++)
|
for (var i = 0; i < numCRCurves; i++)
|
||||||
{
|
{
|
||||||
m_CompressedRotationCurves[i] = new CompressedAnimationCurve(reader);
|
m_CompressedRotationCurves.Add(new CompressedAnimationCurve(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1136,26 +1140,26 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (version >= (5, 3)) //5.3 and up
|
if (version >= (5, 3)) //5.3 and up
|
||||||
{
|
{
|
||||||
m_EulerCurves = Vector3CurveArray(reader);
|
m_EulerCurves = Vector3CurveList(reader);
|
||||||
}
|
}
|
||||||
m_PositionCurves = Vector3CurveArray(reader);
|
m_PositionCurves = Vector3CurveList(reader);
|
||||||
m_ScaleCurves = Vector3CurveArray(reader);
|
m_ScaleCurves = Vector3CurveList(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numFCurves = reader.ReadInt32();
|
int numFCurves = reader.ReadInt32();
|
||||||
m_FloatCurves = new FloatCurve[numFCurves];
|
m_FloatCurves = new List<FloatCurve>();
|
||||||
for (int i = 0; i < numFCurves; i++)
|
for (var i = 0; i < numFCurves; i++)
|
||||||
{
|
{
|
||||||
m_FloatCurves[i] = new FloatCurve(reader);
|
m_FloatCurves.Add(new FloatCurve(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= (4, 3)) //4.3 and up
|
if (version >= (4, 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
int numPtrCurves = reader.ReadInt32();
|
int numPtrCurves = reader.ReadInt32();
|
||||||
m_PPtrCurves = new PPtrCurve[numPtrCurves];
|
m_PPtrCurves = new List<PPtrCurve>();
|
||||||
for (int i = 0; i < numPtrCurves; i++)
|
for (var i = 0; i < numPtrCurves; i++)
|
||||||
{
|
{
|
||||||
m_PPtrCurves[i] = new PPtrCurve(reader);
|
m_PPtrCurves.Add(new PPtrCurve(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1185,9 +1189,9 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_EulerCurves = Vector3CurveArray(reader);
|
m_EulerCurves = Vector3CurveList(reader);
|
||||||
m_PositionCurves = Vector3CurveArray(reader);
|
m_PositionCurves = Vector3CurveList(reader);
|
||||||
m_ScaleCurves = Vector3CurveArray(reader);
|
m_ScaleCurves = Vector3CurveList(reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1202,10 +1206,10 @@ namespace AssetStudio
|
|||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
}
|
}
|
||||||
int numEvents = reader.ReadInt32();
|
int numEvents = reader.ReadInt32();
|
||||||
m_Events = new AnimationEvent[numEvents];
|
m_Events = new List<AnimationEvent>();
|
||||||
for (int i = 0; i < numEvents; i++)
|
for (var i = 0; i < numEvents; i++)
|
||||||
{
|
{
|
||||||
m_Events[i] = new AnimationEvent(reader);
|
m_Events.Add(new AnimationEvent(reader));
|
||||||
}
|
}
|
||||||
if (version >= 2017) //2017 and up
|
if (version >= 2017) //2017 and up
|
||||||
{
|
{
|
||||||
@@ -1213,13 +1217,13 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vector3Curve[] Vector3CurveArray(ObjectReader reader)
|
private static List<Vector3Curve> Vector3CurveList(ObjectReader reader)
|
||||||
{
|
{
|
||||||
var curveNum = reader.ReadInt32();
|
var curveNum = reader.ReadInt32();
|
||||||
var vector3Curve = new Vector3Curve[curveNum];
|
var vector3Curve = new List<Vector3Curve>();
|
||||||
for (var i = 0; i < curveNum; i++)
|
for (var i = 0; i < curveNum; i++)
|
||||||
{
|
{
|
||||||
vector3Curve[i] = new Vector3Curve(reader);
|
vector3Curve.Add(new Vector3Curve(reader));
|
||||||
}
|
}
|
||||||
return vector3Curve;
|
return vector3Curve;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
@@ -38,15 +35,15 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class SkeletonMask
|
public class SkeletonMask
|
||||||
{
|
{
|
||||||
public SkeletonMaskElement[] m_Data;
|
public List<SkeletonMaskElement> m_Data;
|
||||||
|
|
||||||
public SkeletonMask(ObjectReader reader)
|
public SkeletonMask(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numElements = reader.ReadInt32();
|
int numElements = reader.ReadInt32();
|
||||||
m_Data = new SkeletonMaskElement[numElements];
|
m_Data = new List<SkeletonMaskElement>();
|
||||||
for (int i = 0; i < numElements; i++)
|
for (var i = 0; i < numElements; i++)
|
||||||
{
|
{
|
||||||
m_Data[i] = new SkeletonMaskElement(reader);
|
m_Data.Add(new SkeletonMaskElement(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,11 +121,12 @@ namespace AssetStudio
|
|||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
int numConditions = reader.ReadInt32();
|
int numConditions = reader.ReadInt32();
|
||||||
m_ConditionConstantArray = new ConditionConstant[numConditions];
|
var conditionConstantList = new List<ConditionConstant>();
|
||||||
for (int i = 0; i < numConditions; i++)
|
for (var i = 0; i < numConditions; i++)
|
||||||
{
|
{
|
||||||
m_ConditionConstantArray[i] = new ConditionConstant(reader);
|
conditionConstantList.Add(new ConditionConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_ConditionConstantArray = conditionConstantList.ToArray();
|
||||||
|
|
||||||
m_DestinationState = reader.ReadUInt32();
|
m_DestinationState = reader.ReadUInt32();
|
||||||
if (version >= 5) //5.0 and up
|
if (version >= 5) //5.0 and up
|
||||||
@@ -201,11 +199,12 @@ namespace AssetStudio
|
|||||||
m_ChildPairAvgMagInvArray = reader.ReadSingleArray();
|
m_ChildPairAvgMagInvArray = reader.ReadSingleArray();
|
||||||
|
|
||||||
int numNeighbours = reader.ReadInt32();
|
int numNeighbours = reader.ReadInt32();
|
||||||
m_ChildNeighborListArray = new MotionNeighborList[numNeighbours];
|
var childNeighborLists = new List<MotionNeighborList>();
|
||||||
for (int i = 0; i < numNeighbours; i++)
|
for (var i = 0; i < numNeighbours; i++)
|
||||||
{
|
{
|
||||||
m_ChildNeighborListArray[i] = new MotionNeighborList(reader);
|
childNeighborLists.Add(new MotionNeighborList(reader));
|
||||||
}
|
}
|
||||||
|
m_ChildNeighborListArray = childNeighborLists.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,11 +304,12 @@ namespace AssetStudio
|
|||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
int numNodes = reader.ReadInt32();
|
int numNodes = reader.ReadInt32();
|
||||||
m_NodeArray = new BlendTreeNodeConstant[numNodes];
|
var nodeList = new List<BlendTreeNodeConstant>();
|
||||||
for (int i = 0; i < numNodes; i++)
|
for (var i = 0; i < numNodes; i++)
|
||||||
{
|
{
|
||||||
m_NodeArray[i] = new BlendTreeNodeConstant(reader);
|
nodeList.Add(new BlendTreeNodeConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_NodeArray = nodeList.ToArray();
|
||||||
|
|
||||||
if (version < (4, 5)) //4.5 down
|
if (version < (4, 5)) //4.5 down
|
||||||
{
|
{
|
||||||
@@ -343,31 +343,34 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
int numTransistions = reader.ReadInt32();
|
int numTransitions = reader.ReadInt32();
|
||||||
m_TransitionConstantArray = new TransitionConstant[numTransistions];
|
var transitionConstantList = new List<TransitionConstant>();
|
||||||
for (int i = 0; i < numTransistions; i++)
|
for (var i = 0; i < numTransitions; i++)
|
||||||
{
|
{
|
||||||
m_TransitionConstantArray[i] = new TransitionConstant(reader);
|
transitionConstantList.Add(new TransitionConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_TransitionConstantArray = transitionConstantList.ToArray();
|
||||||
|
|
||||||
m_BlendTreeConstantIndexArray = reader.ReadInt32Array();
|
m_BlendTreeConstantIndexArray = reader.ReadInt32Array();
|
||||||
|
|
||||||
if (version < (5, 2)) //5.2 down
|
if (version < (5, 2)) //5.2 down
|
||||||
{
|
{
|
||||||
int numInfos = reader.ReadInt32();
|
int numInfos = reader.ReadInt32();
|
||||||
m_LeafInfoArray = new LeafInfoConstant[numInfos];
|
var leafInfoList = new List<LeafInfoConstant>();
|
||||||
for (int i = 0; i < numInfos; i++)
|
for (var i = 0; i < numInfos; i++)
|
||||||
{
|
{
|
||||||
m_LeafInfoArray[i] = new LeafInfoConstant(reader);
|
leafInfoList.Add(new LeafInfoConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_LeafInfoArray = leafInfoList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
int numBlends = reader.ReadInt32();
|
int numBlends = reader.ReadInt32();
|
||||||
m_BlendTreeConstantArray = new BlendTreeConstant[numBlends];
|
var blendTreeConstantList = new List<BlendTreeConstant>();
|
||||||
for (int i = 0; i < numBlends; i++)
|
for (var i = 0; i < numBlends; i++)
|
||||||
{
|
{
|
||||||
m_BlendTreeConstantArray[i] = new BlendTreeConstant(reader);
|
blendTreeConstantList.Add(new BlendTreeConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_BlendTreeConstantArray = blendTreeConstantList.ToArray();
|
||||||
|
|
||||||
m_NameID = reader.ReadUInt32();
|
m_NameID = reader.ReadUInt32();
|
||||||
if (version >= (4, 3)) //4.3 and up
|
if (version >= (4, 3)) //4.3 and up
|
||||||
@@ -423,11 +426,12 @@ namespace AssetStudio
|
|||||||
m_Destination = reader.ReadUInt32();
|
m_Destination = reader.ReadUInt32();
|
||||||
|
|
||||||
int numConditions = reader.ReadInt32();
|
int numConditions = reader.ReadInt32();
|
||||||
m_ConditionConstantArray = new ConditionConstant[numConditions];
|
var conditionConstantList = new List<ConditionConstant>();
|
||||||
for (int i = 0; i < numConditions; i++)
|
for (var i = 0; i < numConditions; i++)
|
||||||
{
|
{
|
||||||
m_ConditionConstantArray[i] = new ConditionConstant(reader);
|
conditionConstantList.Add(new ConditionConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_ConditionConstantArray = conditionConstantList.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,11 +444,12 @@ namespace AssetStudio
|
|||||||
public SelectorStateConstant(ObjectReader reader)
|
public SelectorStateConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numTransitions = reader.ReadInt32();
|
int numTransitions = reader.ReadInt32();
|
||||||
m_TransitionConstantArray = new SelectorTransitionConstant[numTransitions];
|
var transitionConstantList = new List<SelectorTransitionConstant>();
|
||||||
for (int i = 0; i < numTransitions; i++)
|
for (var i = 0; i < numTransitions; i++)
|
||||||
{
|
{
|
||||||
m_TransitionConstantArray[i] = new SelectorTransitionConstant(reader);
|
transitionConstantList.Add(new SelectorTransitionConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_TransitionConstantArray = transitionConstantList.ToArray();
|
||||||
|
|
||||||
m_FullPathID = reader.ReadUInt32();
|
m_FullPathID = reader.ReadUInt32();
|
||||||
m_isEntry = reader.ReadBoolean();
|
m_isEntry = reader.ReadBoolean();
|
||||||
@@ -465,27 +470,30 @@ namespace AssetStudio
|
|||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
int numStates = reader.ReadInt32();
|
int numStates = reader.ReadInt32();
|
||||||
m_StateConstantArray = new StateConstant[numStates];
|
var stateConstantList = new List<StateConstant>();
|
||||||
for (int i = 0; i < numStates; i++)
|
for (var i = 0; i < numStates; i++)
|
||||||
{
|
{
|
||||||
m_StateConstantArray[i] = new StateConstant(reader);
|
stateConstantList.Add(new StateConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_StateConstantArray = stateConstantList.ToArray();
|
||||||
|
|
||||||
int numAnyStates = reader.ReadInt32();
|
int numAnyStates = reader.ReadInt32();
|
||||||
m_AnyStateTransitionConstantArray = new TransitionConstant[numAnyStates];
|
var anyStateTransitionConstantList = new List<TransitionConstant>();
|
||||||
for (int i = 0; i < numAnyStates; i++)
|
for (var i = 0; i < numAnyStates; i++)
|
||||||
{
|
{
|
||||||
m_AnyStateTransitionConstantArray[i] = new TransitionConstant(reader);
|
anyStateTransitionConstantList.Add(new TransitionConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_AnyStateTransitionConstantArray = anyStateTransitionConstantList.ToArray();
|
||||||
|
|
||||||
if (version >= 5) //5.0 and up
|
if (version >= 5) //5.0 and up
|
||||||
{
|
{
|
||||||
int numSelectors = reader.ReadInt32();
|
int numSelectors = reader.ReadInt32();
|
||||||
m_SelectorStateConstantArray = new SelectorStateConstant[numSelectors];
|
var selectorStateConstantList = new List<SelectorStateConstant>();
|
||||||
for (int i = 0; i < numSelectors; i++)
|
for (var i = 0; i < numSelectors; i++)
|
||||||
{
|
{
|
||||||
m_SelectorStateConstantArray[i] = new SelectorStateConstant(reader);
|
selectorStateConstantList.Add(new SelectorStateConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_SelectorStateConstantArray = selectorStateConstantList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_DefaultState = reader.ReadUInt32();
|
m_DefaultState = reader.ReadUInt32();
|
||||||
@@ -522,20 +530,26 @@ namespace AssetStudio
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int numPosValues = reader.ReadInt32();
|
int numPosValues = reader.ReadInt32();
|
||||||
m_PositionValues = new Vector3[numPosValues];
|
var positionValuesList = new List<Vector3>();
|
||||||
for (int i = 0; i < numPosValues; i++)
|
for (var i = 0; i < numPosValues; i++)
|
||||||
{
|
{
|
||||||
m_PositionValues[i] = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4(); //5.4 and up
|
positionValuesList.Add(version >= (5, 4) //5.4 and up
|
||||||
|
? reader.ReadVector3()
|
||||||
|
: (Vector3)reader.ReadVector4());
|
||||||
}
|
}
|
||||||
|
m_PositionValues = positionValuesList.ToArray();
|
||||||
|
|
||||||
m_QuaternionValues = reader.ReadVector4Array();
|
m_QuaternionValues = reader.ReadVector4Array();
|
||||||
|
|
||||||
int numScaleValues = reader.ReadInt32();
|
int numScaleValues = reader.ReadInt32();
|
||||||
m_ScaleValues = new Vector3[numScaleValues];
|
var scaleValuesList = new List<Vector3>();
|
||||||
for (int i = 0; i < numScaleValues; i++)
|
for (var i = 0; i < numScaleValues; i++)
|
||||||
{
|
{
|
||||||
m_ScaleValues[i] = version >= (5, 4) ? reader.ReadVector3() : (Vector3)reader.ReadVector4(); //5.4 and up
|
scaleValuesList.Add(version >= (5, 4) //5.4 and up
|
||||||
|
? reader.ReadVector3()
|
||||||
|
: (Vector3)reader.ReadVector4());
|
||||||
}
|
}
|
||||||
|
m_ScaleValues = scaleValuesList.ToArray();
|
||||||
|
|
||||||
if (version >= (5, 5)) //5.5 and up
|
if (version >= (5, 5)) //5.5 and up
|
||||||
{
|
{
|
||||||
@@ -558,18 +572,20 @@ namespace AssetStudio
|
|||||||
public ControllerConstant(ObjectReader reader)
|
public ControllerConstant(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numLayers = reader.ReadInt32();
|
int numLayers = reader.ReadInt32();
|
||||||
m_LayerArray = new LayerConstant[numLayers];
|
var layerList = new List<LayerConstant>();
|
||||||
for (int i = 0; i < numLayers; i++)
|
for (var i = 0; i < numLayers; i++)
|
||||||
{
|
{
|
||||||
m_LayerArray[i] = new LayerConstant(reader);
|
layerList.Add(new LayerConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_LayerArray = layerList.ToArray();
|
||||||
|
|
||||||
int numStates = reader.ReadInt32();
|
int numStates = reader.ReadInt32();
|
||||||
m_StateMachineArray = new StateMachineConstant[numStates];
|
var stateMachineList = new List<StateMachineConstant>();
|
||||||
for (int i = 0; i < numStates; i++)
|
for (var i = 0; i < numStates; i++)
|
||||||
{
|
{
|
||||||
m_StateMachineArray[i] = new StateMachineConstant(reader);
|
stateMachineList.Add(new StateMachineConstant(reader));
|
||||||
}
|
}
|
||||||
|
m_StateMachineArray = stateMachineList.ToArray();
|
||||||
|
|
||||||
m_Values = new ValueArrayConstant(reader);
|
m_Values = new ValueArrayConstant(reader);
|
||||||
m_DefaultValues = new ValueArray(reader);
|
m_DefaultValues = new ValueArray(reader);
|
||||||
@@ -578,7 +594,8 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public sealed class AnimatorController : RuntimeAnimatorController
|
public sealed class AnimatorController : RuntimeAnimatorController
|
||||||
{
|
{
|
||||||
public PPtr<AnimationClip>[] m_AnimationClips;
|
public List<PPtr<AnimationClip>> m_AnimationClips;
|
||||||
|
public List<KeyValuePair<uint, string>> m_TOS;
|
||||||
|
|
||||||
public AnimatorController(ObjectReader reader) : base(reader)
|
public AnimatorController(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
@@ -586,17 +603,17 @@ namespace AssetStudio
|
|||||||
var m_Controller = new ControllerConstant(reader);
|
var m_Controller = new ControllerConstant(reader);
|
||||||
|
|
||||||
int tosSize = reader.ReadInt32();
|
int tosSize = reader.ReadInt32();
|
||||||
var m_TOS = new KeyValuePair<uint, string>[tosSize];
|
m_TOS = new List<KeyValuePair<uint, string>>();
|
||||||
for (int i = 0; i < tosSize; i++)
|
for (var i = 0; i < tosSize; i++)
|
||||||
{
|
{
|
||||||
m_TOS[i] = new KeyValuePair<uint, string>(reader.ReadUInt32(), reader.ReadAlignedString());
|
m_TOS.Add(new KeyValuePair<uint, string>(reader.ReadUInt32(), reader.ReadAlignedString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numClips = reader.ReadInt32();
|
int numClips = reader.ReadInt32();
|
||||||
m_AnimationClips = new PPtr<AnimationClip>[numClips];
|
m_AnimationClips = new List<PPtr<AnimationClip>>();
|
||||||
for (int i = 0; i < numClips; i++)
|
for (var i = 0; i < numClips; i++)
|
||||||
{
|
{
|
||||||
m_AnimationClips[i] = new PPtr<AnimationClip>(reader);
|
m_AnimationClips.Add(new PPtr<AnimationClip>(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
@@ -20,17 +17,17 @@ namespace AssetStudio
|
|||||||
public sealed class AnimatorOverrideController : RuntimeAnimatorController
|
public sealed class AnimatorOverrideController : RuntimeAnimatorController
|
||||||
{
|
{
|
||||||
public PPtr<RuntimeAnimatorController> m_Controller;
|
public PPtr<RuntimeAnimatorController> m_Controller;
|
||||||
public AnimationClipOverride[] m_Clips;
|
public List<AnimationClipOverride> m_Clips;
|
||||||
|
|
||||||
public AnimatorOverrideController(ObjectReader reader) : base(reader)
|
public AnimatorOverrideController(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
m_Controller = new PPtr<RuntimeAnimatorController>(reader);
|
m_Controller = new PPtr<RuntimeAnimatorController>(reader);
|
||||||
|
|
||||||
int numOverrides = reader.ReadInt32();
|
int numOverrides = reader.ReadInt32();
|
||||||
m_Clips = new AnimationClipOverride[numOverrides];
|
m_Clips = new List<AnimationClipOverride>();
|
||||||
for (int i = 0; i < numOverrides; i++)
|
for (var i = 0; i < numOverrides; i++)
|
||||||
{
|
{
|
||||||
m_Clips[i] = new AnimationClipOverride(reader);
|
m_Clips.Add(new AnimationClipOverride(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public sealed class AssetBundle : NamedObject
|
public sealed class AssetBundle : NamedObject
|
||||||
{
|
{
|
||||||
public PPtr<Object>[] m_PreloadTable;
|
public List<PPtr<Object>> m_PreloadTable;
|
||||||
public KeyValuePair<string, AssetInfo>[] m_Container;
|
public List<KeyValuePair<string, AssetInfo>> m_Container;
|
||||||
public string m_AssetBundleName;
|
public string m_AssetBundleName;
|
||||||
public string[] m_Dependencies;
|
public string[] m_Dependencies;
|
||||||
public bool m_IsStreamedSceneAssetBundle;
|
public bool m_IsStreamedSceneAssetBundle;
|
||||||
@@ -27,17 +27,17 @@ namespace AssetStudio
|
|||||||
public AssetBundle(ObjectReader reader) : base(reader)
|
public AssetBundle(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_PreloadTableSize = reader.ReadInt32();
|
var m_PreloadTableSize = reader.ReadInt32();
|
||||||
m_PreloadTable = new PPtr<Object>[m_PreloadTableSize];
|
m_PreloadTable = new List<PPtr<Object>>();
|
||||||
for (var i = 0; i < m_PreloadTableSize; i++)
|
for (var i = 0; i < m_PreloadTableSize; i++)
|
||||||
{
|
{
|
||||||
m_PreloadTable[i] = new PPtr<Object>(reader);
|
m_PreloadTable.Add(new PPtr<Object>(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_ContainerSize = reader.ReadInt32();
|
var m_ContainerSize = reader.ReadInt32();
|
||||||
m_Container = new KeyValuePair<string, AssetInfo>[m_ContainerSize];
|
m_Container = new List<KeyValuePair<string, AssetInfo>>();
|
||||||
for (var i = 0; i < m_ContainerSize; i++)
|
for (var i = 0; i < m_ContainerSize; i++)
|
||||||
{
|
{
|
||||||
m_Container[i] = new KeyValuePair<string, AssetInfo>(reader.ReadAlignedString(), new AssetInfo(reader));
|
m_Container.Add(new KeyValuePair<string, AssetInfo>(reader.ReadAlignedString(), new AssetInfo(reader)));
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_MainAsset = new AssetInfo(reader);
|
var m_MainAsset = new AssetInfo(reader);
|
||||||
@@ -61,13 +61,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
m_AssetBundleName = reader.ReadAlignedString();
|
m_AssetBundleName = reader.ReadAlignedString();
|
||||||
|
|
||||||
var m_DependenciesSize = reader.ReadInt32();
|
m_Dependencies = reader.ReadStringArray();
|
||||||
m_Dependencies = new string[m_DependenciesSize];
|
|
||||||
|
|
||||||
for (var i = 0; i < m_DependenciesSize; i++)
|
|
||||||
{
|
|
||||||
m_Dependencies[i] = reader.ReadAlignedString();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_IsStreamedSceneAssetBundle = reader.ReadBoolean();
|
m_IsStreamedSceneAssetBundle = reader.ReadBoolean();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class Skeleton
|
public class Skeleton
|
||||||
{
|
{
|
||||||
public Node[] m_Node;
|
public List<Node> m_Node;
|
||||||
public uint[] m_ID;
|
public uint[] m_ID;
|
||||||
public Axes[] m_AxesArray;
|
public Axes[] m_AxesArray;
|
||||||
|
|
||||||
@@ -74,34 +74,35 @@ namespace AssetStudio
|
|||||||
public Skeleton(ObjectReader reader)
|
public Skeleton(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numNodes = reader.ReadInt32();
|
int numNodes = reader.ReadInt32();
|
||||||
m_Node = new Node[numNodes];
|
m_Node = new List<Node>();
|
||||||
for (int i = 0; i < numNodes; i++)
|
for (var i = 0; i < numNodes; i++)
|
||||||
{
|
{
|
||||||
m_Node[i] = new Node(reader);
|
m_Node.Add(new Node(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ID = reader.ReadUInt32Array();
|
m_ID = reader.ReadUInt32Array();
|
||||||
|
|
||||||
int numAxes = reader.ReadInt32();
|
int numAxes = reader.ReadInt32();
|
||||||
m_AxesArray = new Axes[numAxes];
|
var axesList = new List<Axes>();
|
||||||
for (int i = 0; i < numAxes; i++)
|
for (var i = 0; i < numAxes; i++)
|
||||||
{
|
{
|
||||||
m_AxesArray[i] = new Axes(reader);
|
axesList.Add(new Axes(reader));
|
||||||
}
|
}
|
||||||
|
m_AxesArray = axesList.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkeletonPose
|
public class SkeletonPose
|
||||||
{
|
{
|
||||||
public xform[] m_X;
|
public List<xform> m_X;
|
||||||
|
|
||||||
public SkeletonPose(ObjectReader reader)
|
public SkeletonPose(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numXforms = reader.ReadInt32();
|
int numXforms = reader.ReadInt32();
|
||||||
m_X = new xform[numXforms];
|
m_X = new List<xform>();
|
||||||
for (int i = 0; i < numXforms; i++)
|
for (var i = 0; i < numXforms; i++)
|
||||||
{
|
{
|
||||||
m_X[i] = new xform(reader);
|
m_X.Add(new xform(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,7 +164,7 @@ namespace AssetStudio
|
|||||||
public SkeletonPose m_SkeletonPose;
|
public SkeletonPose m_SkeletonPose;
|
||||||
public Hand m_LeftHand;
|
public Hand m_LeftHand;
|
||||||
public Hand m_RightHand;
|
public Hand m_RightHand;
|
||||||
public Handle[] m_Handles;
|
public List<Handle> m_Handles;
|
||||||
public Collider[] m_ColliderArray;
|
public Collider[] m_ColliderArray;
|
||||||
public int[] m_HumanBoneIndex;
|
public int[] m_HumanBoneIndex;
|
||||||
public float[] m_HumanBoneMass;
|
public float[] m_HumanBoneMass;
|
||||||
@@ -192,18 +193,19 @@ namespace AssetStudio
|
|||||||
if (version < (2018, 2)) //2018.2 down
|
if (version < (2018, 2)) //2018.2 down
|
||||||
{
|
{
|
||||||
int numHandles = reader.ReadInt32();
|
int numHandles = reader.ReadInt32();
|
||||||
m_Handles = new Handle[numHandles];
|
m_Handles = new List<Handle>();
|
||||||
for (int i = 0; i < numHandles; i++)
|
for (var i = 0; i < numHandles; i++)
|
||||||
{
|
{
|
||||||
m_Handles[i] = new Handle(reader);
|
m_Handles.Add(new Handle(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numColliders = reader.ReadInt32();
|
int numColliders = reader.ReadInt32();
|
||||||
m_ColliderArray = new Collider[numColliders];
|
var colliderList = new List<Collider>();
|
||||||
for (int i = 0; i < numColliders; i++)
|
for (var i = 0; i < numColliders; i++)
|
||||||
{
|
{
|
||||||
m_ColliderArray[i] = new Collider(reader);
|
colliderList.Add(new Collider(reader));
|
||||||
}
|
}
|
||||||
|
m_ColliderArray = colliderList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_HumanBoneIndex = reader.ReadInt32Array();
|
m_HumanBoneIndex = reader.ReadInt32Array();
|
||||||
@@ -287,7 +289,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
public uint m_AvatarSize;
|
public uint m_AvatarSize;
|
||||||
public AvatarConstant m_Avatar;
|
public AvatarConstant m_Avatar;
|
||||||
public KeyValuePair<uint, string>[] m_TOS;
|
public List<KeyValuePair<uint, string>> m_TOS;
|
||||||
|
|
||||||
public Avatar(ObjectReader reader) : base(reader)
|
public Avatar(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
@@ -295,10 +297,10 @@ namespace AssetStudio
|
|||||||
m_Avatar = new AvatarConstant(reader);
|
m_Avatar = new AvatarConstant(reader);
|
||||||
|
|
||||||
int numTOS = reader.ReadInt32();
|
int numTOS = reader.ReadInt32();
|
||||||
m_TOS = new KeyValuePair<uint, string>[numTOS];
|
m_TOS = new List<KeyValuePair<uint, string>>();
|
||||||
for (int i = 0; i < numTOS; i++)
|
for (var i = 0; i < numTOS; i++)
|
||||||
{
|
{
|
||||||
m_TOS[i] = new KeyValuePair<uint, string>(reader.ReadUInt32(), reader.ReadAlignedString());
|
m_TOS.Add(new KeyValuePair<uint, string>(reader.ReadUInt32(), reader.ReadAlignedString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
//HumanDescription m_HumanDescription 2019 and up
|
//HumanDescription m_HumanDescription 2019 and up
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public abstract class EditorExtension : Object
|
public abstract class EditorExtension : Object
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class Font : NamedObject
|
public sealed class Font : NamedObject
|
||||||
{
|
{
|
||||||
@@ -23,12 +18,12 @@ namespace AssetStudio
|
|||||||
var m_CharacterPadding = reader.ReadInt32();
|
var m_CharacterPadding = reader.ReadInt32();
|
||||||
var m_ConvertCase = reader.ReadInt32();
|
var m_ConvertCase = reader.ReadInt32();
|
||||||
int m_CharacterRects_size = reader.ReadInt32();
|
int m_CharacterRects_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
for (var i = 0; i < m_CharacterRects_size; i++)
|
||||||
{
|
{
|
||||||
reader.Position += 44;//CharacterInfo data 41
|
reader.Position += 44;//CharacterInfo data 41
|
||||||
}
|
}
|
||||||
int m_KerningValues_size = reader.ReadInt32();
|
int m_KerningValues_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_KerningValues_size; i++)
|
for (var i = 0; i < m_KerningValues_size; i++)
|
||||||
{
|
{
|
||||||
reader.Position += 8;
|
reader.Position += 8;
|
||||||
}
|
}
|
||||||
@@ -55,7 +50,7 @@ namespace AssetStudio
|
|||||||
if (version <= 3)
|
if (version <= 3)
|
||||||
{
|
{
|
||||||
int m_PerCharacterKerning_size = reader.ReadInt32();
|
int m_PerCharacterKerning_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_PerCharacterKerning_size; i++)
|
for (var i = 0; i < m_PerCharacterKerning_size; i++)
|
||||||
{
|
{
|
||||||
int first = reader.ReadInt32();
|
int first = reader.ReadInt32();
|
||||||
float second = reader.ReadSingle();
|
float second = reader.ReadSingle();
|
||||||
@@ -71,7 +66,7 @@ namespace AssetStudio
|
|||||||
var m_DefaultMaterial = new PPtr<Material>(reader);
|
var m_DefaultMaterial = new PPtr<Material>(reader);
|
||||||
|
|
||||||
int m_CharacterRects_size = reader.ReadInt32();
|
int m_CharacterRects_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
for (var i = 0; i < m_CharacterRects_size; i++)
|
||||||
{
|
{
|
||||||
int index = reader.ReadInt32();
|
int index = reader.ReadInt32();
|
||||||
//Rectf uv
|
//Rectf uv
|
||||||
@@ -96,7 +91,7 @@ namespace AssetStudio
|
|||||||
var m_Texture = new PPtr<Texture>(reader);
|
var m_Texture = new PPtr<Texture>(reader);
|
||||||
|
|
||||||
int m_KerningValues_size = reader.ReadInt32();
|
int m_KerningValues_size = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_KerningValues_size; i++)
|
for (var i = 0; i < m_KerningValues_size; i++)
|
||||||
{
|
{
|
||||||
int pairfirst = reader.ReadInt16();
|
int pairfirst = reader.ReadInt16();
|
||||||
int pairsecond = reader.ReadInt16();
|
int pairsecond = reader.ReadInt16();
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Collections.Generic;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public sealed class GameObject : EditorExtension
|
public sealed class GameObject : EditorExtension
|
||||||
{
|
{
|
||||||
public PPtr<Component>[] m_Components;
|
public List<PPtr<Component>> m_Components;
|
||||||
public string m_Name;
|
public string m_Name;
|
||||||
|
|
||||||
public Transform m_Transform;
|
public Transform m_Transform;
|
||||||
@@ -18,15 +19,15 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public GameObject(ObjectReader reader) : base(reader)
|
public GameObject(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_Component_size = reader.ReadInt32();
|
var m_ComponentSize = reader.ReadInt32();
|
||||||
m_Components = new PPtr<Component>[m_Component_size];
|
m_Components = new List<PPtr<Component>>();
|
||||||
for (var i = 0; i < m_Component_size; i++)
|
for (var i = 0; i < m_ComponentSize; i++)
|
||||||
{
|
{
|
||||||
if (version < (5, 5)) //5.5 down
|
if (version < (5, 5)) //5.5 down
|
||||||
{
|
{
|
||||||
var first = reader.ReadInt32();
|
var first = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
m_Components[i] = new PPtr<Component>(reader);
|
m_Components.Add(new PPtr<Component>(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_Layer = reader.ReadInt32();
|
var m_Layer = reader.ReadInt32();
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class UnityPropertySheet
|
public class UnityPropertySheet
|
||||||
{
|
{
|
||||||
public KeyValuePair<string, UnityTexEnv>[] m_TexEnvs;
|
public List<KeyValuePair<string, UnityTexEnv>> m_TexEnvs;
|
||||||
public KeyValuePair<string, int>[] m_Ints;
|
public List<KeyValuePair<string, int>> m_Ints;
|
||||||
public KeyValuePair<string, float>[] m_Floats;
|
public List<KeyValuePair<string, float>> m_Floats;
|
||||||
public KeyValuePair<string, Color>[] m_Colors;
|
public List<KeyValuePair<string, Color>> m_Colors;
|
||||||
|
|
||||||
public UnityPropertySheet() { }
|
public UnityPropertySheet() { }
|
||||||
|
|
||||||
@@ -33,34 +33,34 @@ namespace AssetStudio
|
|||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
int m_TexEnvsSize = reader.ReadInt32();
|
int m_TexEnvsSize = reader.ReadInt32();
|
||||||
m_TexEnvs = new KeyValuePair<string, UnityTexEnv>[m_TexEnvsSize];
|
m_TexEnvs = new List<KeyValuePair<string, UnityTexEnv>>();
|
||||||
for (int i = 0; i < m_TexEnvsSize; i++)
|
for (var i = 0; i < m_TexEnvsSize; i++)
|
||||||
{
|
{
|
||||||
m_TexEnvs[i] = new KeyValuePair<string, UnityTexEnv>(reader.ReadAlignedString(), new UnityTexEnv(reader));
|
m_TexEnvs.Add(new KeyValuePair<string, UnityTexEnv>(reader.ReadAlignedString(), new UnityTexEnv(reader)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= 2021) //2021.1 and up
|
if (version >= 2021) //2021.1 and up
|
||||||
{
|
{
|
||||||
int m_IntsSize = reader.ReadInt32();
|
int m_IntsSize = reader.ReadInt32();
|
||||||
m_Ints = new KeyValuePair<string, int>[m_IntsSize];
|
m_Ints = new List<KeyValuePair<string, int>>();
|
||||||
for (int i = 0; i < m_IntsSize; i++)
|
for (var i = 0; i < m_IntsSize; i++)
|
||||||
{
|
{
|
||||||
m_Ints[i] = new KeyValuePair<string, int>(reader.ReadAlignedString(), reader.ReadInt32());
|
m_Ints.Add(new KeyValuePair<string, int>(reader.ReadAlignedString(), reader.ReadInt32()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_FloatsSize = reader.ReadInt32();
|
int m_FloatsSize = reader.ReadInt32();
|
||||||
m_Floats = new KeyValuePair<string, float>[m_FloatsSize];
|
m_Floats = new List<KeyValuePair<string, float>>();
|
||||||
for (int i = 0; i < m_FloatsSize; i++)
|
for (var i = 0; i < m_FloatsSize; i++)
|
||||||
{
|
{
|
||||||
m_Floats[i] = new KeyValuePair<string, float>(reader.ReadAlignedString(), reader.ReadSingle());
|
m_Floats.Add(new KeyValuePair<string, float>(reader.ReadAlignedString(), reader.ReadSingle()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_ColorsSize = reader.ReadInt32();
|
int m_ColorsSize = reader.ReadInt32();
|
||||||
m_Colors = new KeyValuePair<string, Color>[m_ColorsSize];
|
m_Colors = new List<KeyValuePair<string, Color>>();
|
||||||
for (int i = 0; i < m_ColorsSize; i++)
|
for (var i = 0; i < m_ColorsSize; i++)
|
||||||
{
|
{
|
||||||
m_Colors[i] = new KeyValuePair<string, Color>(reader.ReadAlignedString(), reader.ReadColor4());
|
m_Colors.Add(new KeyValuePair<string, Color>(reader.ReadAlignedString(), reader.ReadColor4()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,7 +118,7 @@ namespace AssetStudio
|
|||||||
if (version >= (5, 1)) //5.1 and up
|
if (version >= (5, 1)) //5.1 and up
|
||||||
{
|
{
|
||||||
var stringTagMapSize = reader.ReadInt32();
|
var stringTagMapSize = reader.ReadInt32();
|
||||||
for (int i = 0; i < stringTagMapSize; i++)
|
for (var i = 0; i < stringTagMapSize; i++)
|
||||||
{
|
{
|
||||||
var first = reader.ReadAlignedString();
|
var first = reader.ReadAlignedString();
|
||||||
var second = reader.ReadAlignedString();
|
var second = reader.ReadAlignedString();
|
||||||
|
|||||||
@@ -123,8 +123,8 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
public uint m_CurrentChannels;
|
public uint m_CurrentChannels;
|
||||||
public uint m_VertexCount;
|
public uint m_VertexCount;
|
||||||
public ChannelInfo[] m_Channels;
|
public List<ChannelInfo> m_Channels;
|
||||||
public StreamInfo[] m_Streams;
|
public List<StreamInfo> m_Streams;
|
||||||
public byte[] m_DataSize;
|
public byte[] m_DataSize;
|
||||||
|
|
||||||
public VertexData(ObjectReader reader)
|
public VertexData(ObjectReader reader)
|
||||||
@@ -141,27 +141,23 @@ namespace AssetStudio
|
|||||||
if (version >= 4) //4.0 and up
|
if (version >= 4) //4.0 and up
|
||||||
{
|
{
|
||||||
var m_ChannelsSize = reader.ReadInt32();
|
var m_ChannelsSize = reader.ReadInt32();
|
||||||
m_Channels = new ChannelInfo[m_ChannelsSize];
|
m_Channels = new List<ChannelInfo>();
|
||||||
for (int i = 0; i < m_ChannelsSize; i++)
|
for (var i = 0; i < m_ChannelsSize; i++)
|
||||||
{
|
{
|
||||||
m_Channels[i] = new ChannelInfo(reader);
|
m_Channels.Add(new ChannelInfo(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version < 5) //5.0 down
|
if (version < 5) //5.0 down
|
||||||
{
|
{
|
||||||
if (version < 4)
|
var streamCount = version < 4 //4.0 down
|
||||||
{
|
? 4
|
||||||
m_Streams = new StreamInfo[4];
|
: reader.ReadInt32();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_Streams = new StreamInfo[reader.ReadInt32()];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < m_Streams.Length; i++)
|
m_Streams = new List<StreamInfo>();
|
||||||
|
for (var i = 0; i < streamCount; i++)
|
||||||
{
|
{
|
||||||
m_Streams[i] = new StreamInfo(reader);
|
m_Streams.Add(new StreamInfo(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version < 4) //4.0 down
|
if (version < 4) //4.0 down
|
||||||
@@ -181,13 +177,13 @@ namespace AssetStudio
|
|||||||
private void GetStreams(UnityVersion version)
|
private void GetStreams(UnityVersion version)
|
||||||
{
|
{
|
||||||
var streamCount = m_Channels.Max(x => x.stream) + 1;
|
var streamCount = m_Channels.Max(x => x.stream) + 1;
|
||||||
m_Streams = new StreamInfo[streamCount];
|
m_Streams = new List<StreamInfo>();
|
||||||
uint offset = 0;
|
uint offset = 0;
|
||||||
for (int s = 0; s < streamCount; s++)
|
for (var s = 0; s < streamCount; s++)
|
||||||
{
|
{
|
||||||
uint chnMask = 0;
|
uint chnMask = 0;
|
||||||
uint stride = 0;
|
uint stride = 0;
|
||||||
for (int chn = 0; chn < m_Channels.Length; chn++)
|
for (var chn = 0; chn < m_Channels.Count; chn++)
|
||||||
{
|
{
|
||||||
var m_Channel = m_Channels[chn];
|
var m_Channel = m_Channels[chn];
|
||||||
if (m_Channel.stream == s)
|
if (m_Channel.stream == s)
|
||||||
@@ -199,14 +195,14 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_Streams[s] = new StreamInfo
|
m_Streams.Add(new StreamInfo
|
||||||
{
|
{
|
||||||
channelMask = chnMask,
|
channelMask = chnMask,
|
||||||
offset = offset,
|
offset = offset,
|
||||||
stride = stride,
|
stride = stride,
|
||||||
dividerOp = 0,
|
dividerOp = 0,
|
||||||
frequency = 0
|
frequency = 0
|
||||||
};
|
});
|
||||||
offset += m_VertexCount * stride;
|
offset += m_VertexCount * stride;
|
||||||
//static size_t AlignStreamSize (size_t size) { return (size + (kVertexStreamAlign-1)) & ~(kVertexStreamAlign-1); }
|
//static size_t AlignStreamSize (size_t size) { return (size + (kVertexStreamAlign-1)) & ~(kVertexStreamAlign-1); }
|
||||||
offset = (offset + (16u - 1u)) & ~(16u - 1u);
|
offset = (offset + (16u - 1u)) & ~(16u - 1u);
|
||||||
@@ -215,17 +211,17 @@ namespace AssetStudio
|
|||||||
|
|
||||||
private void GetChannels(UnityVersion version)
|
private void GetChannels(UnityVersion version)
|
||||||
{
|
{
|
||||||
m_Channels = new ChannelInfo[6];
|
m_Channels = new List<ChannelInfo>(6);
|
||||||
for (int i = 0; i < 6; i++)
|
for (var i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
m_Channels[i] = new ChannelInfo();
|
m_Channels.Add(new ChannelInfo());
|
||||||
}
|
}
|
||||||
for (var s = 0; s < m_Streams.Length; s++)
|
for (var s = 0; s < m_Streams.Count; s++)
|
||||||
{
|
{
|
||||||
var m_Stream = m_Streams[s];
|
var m_Stream = m_Streams[s];
|
||||||
var channelMask = new BitArray(new[] { (int)m_Stream.channelMask });
|
var channelMask = new BitArray(new[] { (int)m_Stream.channelMask });
|
||||||
byte offset = 0;
|
byte offset = 0;
|
||||||
for (int i = 0; i < 6; i++)
|
for (var i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
if (channelMask.Get(i))
|
if (channelMask.Get(i))
|
||||||
{
|
{
|
||||||
@@ -344,8 +340,8 @@ namespace AssetStudio
|
|||||||
public class BlendShapeData
|
public class BlendShapeData
|
||||||
{
|
{
|
||||||
public BlendShapeVertex[] vertices;
|
public BlendShapeVertex[] vertices;
|
||||||
public MeshBlendShape[] shapes;
|
public List<MeshBlendShape> shapes;
|
||||||
public MeshBlendShapeChannel[] channels;
|
public List<MeshBlendShapeChannel> channels;
|
||||||
public float[] fullWeights;
|
public float[] fullWeights;
|
||||||
|
|
||||||
public BlendShapeData(ObjectReader reader)
|
public BlendShapeData(ObjectReader reader)
|
||||||
@@ -355,24 +351,25 @@ namespace AssetStudio
|
|||||||
if (version >= (4, 3)) //4.3 and up
|
if (version >= (4, 3)) //4.3 and up
|
||||||
{
|
{
|
||||||
int numVerts = reader.ReadInt32();
|
int numVerts = reader.ReadInt32();
|
||||||
|
reader.ThrowIfTooLarge(numVerts * 40f);
|
||||||
vertices = new BlendShapeVertex[numVerts];
|
vertices = new BlendShapeVertex[numVerts];
|
||||||
for (int i = 0; i < numVerts; i++)
|
for (var i = 0; i < numVerts; i++)
|
||||||
{
|
{
|
||||||
vertices[i] = new BlendShapeVertex(reader);
|
vertices[i] = new BlendShapeVertex(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numShapes = reader.ReadInt32();
|
int numShapes = reader.ReadInt32();
|
||||||
shapes = new MeshBlendShape[numShapes];
|
shapes = new List<MeshBlendShape>();
|
||||||
for (int i = 0; i < numShapes; i++)
|
for (var i = 0; i < numShapes; i++)
|
||||||
{
|
{
|
||||||
shapes[i] = new MeshBlendShape(reader);
|
shapes.Add(new MeshBlendShape(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numChannels = reader.ReadInt32();
|
int numChannels = reader.ReadInt32();
|
||||||
channels = new MeshBlendShapeChannel[numChannels];
|
channels = new List<MeshBlendShapeChannel>();
|
||||||
for (int i = 0; i < numChannels; i++)
|
for (var i = 0; i < numChannels; i++)
|
||||||
{
|
{
|
||||||
channels[i] = new MeshBlendShapeChannel(reader);
|
channels.Add(new MeshBlendShapeChannel(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
fullWeights = reader.ReadSingleArray();
|
fullWeights = reader.ReadSingleArray();
|
||||||
@@ -380,17 +377,17 @@ namespace AssetStudio
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var m_ShapesSize = reader.ReadInt32();
|
var m_ShapesSize = reader.ReadInt32();
|
||||||
var m_Shapes = new MeshBlendShape[m_ShapesSize];
|
var m_Shapes = new List<MeshBlendShape>();
|
||||||
for (int i = 0; i < m_ShapesSize; i++)
|
for (var i = 0; i < m_ShapesSize; i++)
|
||||||
{
|
{
|
||||||
m_Shapes[i] = new MeshBlendShape(reader);
|
m_Shapes.Add(new MeshBlendShape(reader));
|
||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
var m_ShapeVerticesSize = reader.ReadInt32();
|
var m_ShapeVerticesSize = reader.ReadInt32();
|
||||||
var m_ShapeVertices = new BlendShapeVertex[m_ShapeVerticesSize]; //MeshBlendShapeVertex
|
reader.ThrowIfTooLarge(m_ShapeVerticesSize * 40f);
|
||||||
for (int i = 0; i < m_ShapeVerticesSize; i++)
|
for (var i = 0; i < m_ShapeVerticesSize; i++)
|
||||||
{
|
{
|
||||||
m_ShapeVertices[i] = new BlendShapeVertex(reader);
|
var m_ShapeVertices = new BlendShapeVertex(reader); //MeshBlendShapeVertex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -490,7 +487,7 @@ namespace AssetStudio
|
|||||||
public sealed class Mesh : NamedObject
|
public sealed class Mesh : NamedObject
|
||||||
{
|
{
|
||||||
private bool m_Use16BitIndices = true;
|
private bool m_Use16BitIndices = true;
|
||||||
public SubMesh[] m_SubMeshes;
|
public List<SubMesh> m_SubMeshes;
|
||||||
private uint[] m_IndexBuffer;
|
private uint[] m_IndexBuffer;
|
||||||
public BlendShapeData m_Shapes;
|
public BlendShapeData m_Shapes;
|
||||||
public Matrix4x4[] m_BindPose;
|
public Matrix4x4[] m_BindPose;
|
||||||
@@ -524,28 +521,29 @@ namespace AssetStudio
|
|||||||
|
|
||||||
if (version <= (2, 5)) //2.5 and down
|
if (version <= (2, 5)) //2.5 and down
|
||||||
{
|
{
|
||||||
int m_IndexBuffer_size = reader.ReadInt32();
|
int m_IndexBufferSize = reader.ReadInt32();
|
||||||
|
|
||||||
if (m_Use16BitIndices)
|
if (m_Use16BitIndices)
|
||||||
{
|
{
|
||||||
m_IndexBuffer = new uint[m_IndexBuffer_size / 2];
|
var indexBufferList = new List<uint>();
|
||||||
for (int i = 0; i < m_IndexBuffer_size / 2; i++)
|
for (var i = 0; i < m_IndexBufferSize / 2; i++)
|
||||||
{
|
{
|
||||||
m_IndexBuffer[i] = reader.ReadUInt16();
|
indexBufferList.Add(reader.ReadUInt16());
|
||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
|
m_IndexBuffer = indexBufferList.ToArray();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_IndexBuffer = reader.ReadUInt32Array(m_IndexBuffer_size / 4);
|
m_IndexBuffer = reader.ReadUInt32Array(m_IndexBufferSize / 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_SubMeshesSize = reader.ReadInt32();
|
int m_SubMeshesSize = reader.ReadInt32();
|
||||||
m_SubMeshes = new SubMesh[m_SubMeshesSize];
|
m_SubMeshes = new List<SubMesh>();
|
||||||
for (int i = 0; i < m_SubMeshesSize; i++)
|
for (var i = 0; i < m_SubMeshesSize; i++)
|
||||||
{
|
{
|
||||||
m_SubMeshes[i] = new SubMesh(reader);
|
m_SubMeshes.Add(new SubMesh(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= (4, 1)) //4.1 and up
|
if (version >= (4, 1)) //4.1 and up
|
||||||
@@ -565,13 +563,13 @@ namespace AssetStudio
|
|||||||
if (version >= 2019) //2019 and up
|
if (version >= 2019) //2019 and up
|
||||||
{
|
{
|
||||||
var m_BonesAABBSize = reader.ReadInt32();
|
var m_BonesAABBSize = reader.ReadInt32();
|
||||||
var m_BonesAABB = new MinMaxAABB[m_BonesAABBSize];
|
for (var i = 0; i < m_BonesAABBSize; i++)
|
||||||
for (int i = 0; i < m_BonesAABBSize; i++)
|
|
||||||
{
|
{
|
||||||
m_BonesAABB[i] = new MinMaxAABB(reader);
|
var m_BonesAABB = new MinMaxAABB(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_VariableBoneCountWeights = reader.ReadUInt32Array();
|
var m_VariableBoneCountWeightsSize = reader.ReadInt32();
|
||||||
|
reader.Position += m_VariableBoneCountWeightsSize * 4; //skip uint[] m_VariableBoneCountWeights
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_MeshCompression = reader.ReadByte();
|
var m_MeshCompression = reader.ReadByte();
|
||||||
@@ -626,19 +624,20 @@ namespace AssetStudio
|
|||||||
m_Use16BitIndices = m_IndexFormat == 0;
|
m_Use16BitIndices = m_IndexFormat == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_IndexBuffer_size = reader.ReadInt32();
|
int m_IndexBufferSize = reader.ReadInt32();
|
||||||
if (m_Use16BitIndices)
|
if (m_Use16BitIndices)
|
||||||
{
|
{
|
||||||
m_IndexBuffer = new uint[m_IndexBuffer_size / 2];
|
var indexBufferList = new List<uint>();
|
||||||
for (int i = 0; i < m_IndexBuffer_size / 2; i++)
|
for (var i = 0; i < m_IndexBufferSize / 2; i++)
|
||||||
{
|
{
|
||||||
m_IndexBuffer[i] = reader.ReadUInt16();
|
indexBufferList.Add(reader.ReadUInt16());
|
||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
|
m_IndexBuffer = indexBufferList.ToArray();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_IndexBuffer = reader.ReadUInt32Array(m_IndexBuffer_size / 4);
|
m_IndexBuffer = reader.ReadUInt32Array(m_IndexBufferSize / 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -647,8 +646,10 @@ namespace AssetStudio
|
|||||||
m_VertexCount = reader.ReadInt32();
|
m_VertexCount = reader.ReadInt32();
|
||||||
m_Vertices = reader.ReadSingleArray(m_VertexCount * 3); //Vector3
|
m_Vertices = reader.ReadSingleArray(m_VertexCount * 3); //Vector3
|
||||||
|
|
||||||
m_Skin = new BoneWeights4[reader.ReadInt32()];
|
var numSkin = reader.ReadInt32();
|
||||||
for (int s = 0; s < m_Skin.Length; s++)
|
reader.ThrowIfTooLarge(numSkin * 32f);
|
||||||
|
m_Skin = new BoneWeights4[numSkin];
|
||||||
|
for (var s = 0; s < numSkin; s++)
|
||||||
{
|
{
|
||||||
m_Skin[s] = new BoneWeights4(reader);
|
m_Skin[s] = new BoneWeights4(reader);
|
||||||
}
|
}
|
||||||
@@ -661,10 +662,11 @@ namespace AssetStudio
|
|||||||
|
|
||||||
if (version <= (2, 5)) //2.5 and down
|
if (version <= (2, 5)) //2.5 and down
|
||||||
{
|
{
|
||||||
int m_TangentSpace_size = reader.ReadInt32();
|
int m_TangentSpaceSize = reader.ReadInt32();
|
||||||
m_Normals = new float[m_TangentSpace_size * 3];
|
reader.ThrowIfTooLarge(m_TangentSpaceSize * 28f);
|
||||||
m_Tangents = new float[m_TangentSpace_size * 4];
|
m_Normals = new float[m_TangentSpaceSize * 3];
|
||||||
for (int v = 0; v < m_TangentSpace_size; v++)
|
m_Tangents = new float[m_TangentSpaceSize * 4];
|
||||||
|
for (var v = 0; v < m_TangentSpaceSize; v++)
|
||||||
{
|
{
|
||||||
m_Normals[v * 3] = reader.ReadSingle();
|
m_Normals[v * 3] = reader.ReadSingle();
|
||||||
m_Normals[v * 3 + 1] = reader.ReadSingle();
|
m_Normals[v * 3 + 1] = reader.ReadSingle();
|
||||||
@@ -686,8 +688,10 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
if (version < (2018, 2)) //2018.2 down
|
if (version < (2018, 2)) //2018.2 down
|
||||||
{
|
{
|
||||||
m_Skin = new BoneWeights4[reader.ReadInt32()];
|
var numSkin = reader.ReadInt32();
|
||||||
for (int s = 0; s < m_Skin.Length; s++)
|
reader.ThrowIfTooLarge(numSkin * 32f);
|
||||||
|
m_Skin = new BoneWeights4[numSkin];
|
||||||
|
for (var s = 0; s < numSkin; s++)
|
||||||
{
|
{
|
||||||
m_Skin[s] = new BoneWeights4(reader);
|
m_Skin[s] = new BoneWeights4(reader);
|
||||||
}
|
}
|
||||||
@@ -710,15 +714,16 @@ namespace AssetStudio
|
|||||||
|
|
||||||
if (version <= (3, 4)) //3.4.2 and earlier
|
if (version <= (3, 4)) //3.4.2 and earlier
|
||||||
{
|
{
|
||||||
int m_Colors_size = reader.ReadInt32();
|
int m_ColorsSize = reader.ReadInt32();
|
||||||
m_Colors = new float[m_Colors_size * 4];
|
var m_ColorsList = new List<float>();
|
||||||
for (int v = 0; v < m_Colors_size * 4; v++)
|
for (var v = 0; v < m_ColorsSize * 4; v++)
|
||||||
{
|
{
|
||||||
m_Colors[v] = (float)reader.ReadByte() / 0xFF;
|
m_ColorsList.Add((float)reader.ReadByte() / 0xFF);
|
||||||
}
|
}
|
||||||
|
m_Colors = m_ColorsList.ToArray();
|
||||||
|
|
||||||
int m_CollisionTriangles_size = reader.ReadInt32();
|
int m_CollisionTrianglesSize = reader.ReadInt32();
|
||||||
reader.Position += m_CollisionTriangles_size * 4; //UInt32 indices
|
reader.Position += m_CollisionTrianglesSize * 4; //UInt32 indices
|
||||||
int m_CollisionVertexCount = reader.ReadInt32();
|
int m_CollisionVertexCount = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -780,7 +785,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
m_VertexCount = (int)m_VertexData.m_VertexCount;
|
m_VertexCount = (int)m_VertexData.m_VertexCount;
|
||||||
|
|
||||||
for (var chn = 0; chn < m_VertexData.m_Channels.Length; chn++)
|
for (var chn = 0; chn < m_VertexData.m_Channels.Count; chn++)
|
||||||
{
|
{
|
||||||
var m_Channel = m_VertexData.m_Channels[chn];
|
var m_Channel = m_VertexData.m_Channels[chn];
|
||||||
if (m_Channel.dimension > 0)
|
if (m_Channel.dimension > 0)
|
||||||
@@ -797,10 +802,10 @@ namespace AssetStudio
|
|||||||
var vertexFormat = MeshHelper.ToVertexFormat(m_Channel.format, version);
|
var vertexFormat = MeshHelper.ToVertexFormat(m_Channel.format, version);
|
||||||
var componentByteSize = (int)MeshHelper.GetFormatSize(vertexFormat);
|
var componentByteSize = (int)MeshHelper.GetFormatSize(vertexFormat);
|
||||||
var componentBytes = new byte[m_VertexCount * m_Channel.dimension * componentByteSize];
|
var componentBytes = new byte[m_VertexCount * m_Channel.dimension * componentByteSize];
|
||||||
for (int v = 0; v < m_VertexCount; v++)
|
for (var v = 0; v < m_VertexCount; v++)
|
||||||
{
|
{
|
||||||
var vertexOffset = (int)m_Stream.offset + m_Channel.offset + (int)m_Stream.stride * v;
|
var vertexOffset = (int)m_Stream.offset + m_Channel.offset + (int)m_Stream.stride * v;
|
||||||
for (int d = 0; d < m_Channel.dimension; d++)
|
for (var d = 0; d < m_Channel.dimension; d++)
|
||||||
{
|
{
|
||||||
var componentOffset = vertexOffset + componentByteSize * d;
|
var componentOffset = vertexOffset + componentByteSize * d;
|
||||||
Buffer.BlockCopy(m_VertexData.m_DataSize, componentOffset, componentBytes, componentByteSize * (v * m_Channel.dimension + d), componentByteSize);
|
Buffer.BlockCopy(m_VertexData.m_DataSize, componentOffset, componentBytes, componentByteSize * (v * m_Channel.dimension + d), componentByteSize);
|
||||||
@@ -871,9 +876,9 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
InitMSkin();
|
InitMSkin();
|
||||||
}
|
}
|
||||||
for (int i = 0; i < m_VertexCount; i++)
|
for (var i = 0; i < m_VertexCount; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < m_Channel.dimension; j++)
|
for (var j = 0; j < m_Channel.dimension; j++)
|
||||||
{
|
{
|
||||||
m_Skin[i].weight[j] = componentsFloatArray[i * m_Channel.dimension + j];
|
m_Skin[i].weight[j] = componentsFloatArray[i * m_Channel.dimension + j];
|
||||||
}
|
}
|
||||||
@@ -884,9 +889,9 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
InitMSkin();
|
InitMSkin();
|
||||||
}
|
}
|
||||||
for (int i = 0; i < m_VertexCount; i++)
|
for (var i = 0; i < m_VertexCount; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < m_Channel.dimension; j++)
|
for (var j = 0; j < m_Channel.dimension; j++)
|
||||||
{
|
{
|
||||||
m_Skin[i].boneIndex[j] = componentsIntArray[i * m_Channel.dimension + j];
|
m_Skin[i].boneIndex[j] = componentsIntArray[i * m_Channel.dimension + j];
|
||||||
}
|
}
|
||||||
@@ -956,7 +961,7 @@ namespace AssetStudio
|
|||||||
const int kMaxTexCoordShaderChannels = 8;
|
const int kMaxTexCoordShaderChannels = 8;
|
||||||
|
|
||||||
int uvSrcOffset = 0;
|
int uvSrcOffset = 0;
|
||||||
for (int uv = 0; uv < kMaxTexCoordShaderChannels; uv++)
|
for (var uv = 0; uv < kMaxTexCoordShaderChannels; uv++)
|
||||||
{
|
{
|
||||||
var texCoordBits = m_UVInfo >> (uv * kInfoBitsPerUV);
|
var texCoordBits = m_UVInfo >> (uv * kInfoBitsPerUV);
|
||||||
texCoordBits &= (1u << kInfoBitsPerUV) - 1u;
|
texCoordBits &= (1u << kInfoBitsPerUV) - 1u;
|
||||||
@@ -986,7 +991,7 @@ namespace AssetStudio
|
|||||||
m_BindPose = new Matrix4x4[m_CompressedMesh.m_BindPoses.m_NumItems / 16];
|
m_BindPose = new Matrix4x4[m_CompressedMesh.m_BindPoses.m_NumItems / 16];
|
||||||
var m_BindPoses_Unpacked = m_CompressedMesh.m_BindPoses.UnpackFloats(16, 4 * 16);
|
var m_BindPoses_Unpacked = m_CompressedMesh.m_BindPoses.UnpackFloats(16, 4 * 16);
|
||||||
var buffer = new float[16];
|
var buffer = new float[16];
|
||||||
for (int i = 0; i < m_BindPose.Length; i++)
|
for (var i = 0; i < m_BindPose.Length; i++)
|
||||||
{
|
{
|
||||||
Array.Copy(m_BindPoses_Unpacked, i * 16, buffer, 0, 16);
|
Array.Copy(m_BindPoses_Unpacked, i * 16, buffer, 0, 16);
|
||||||
m_BindPose[i] = new Matrix4x4(buffer);
|
m_BindPose[i] = new Matrix4x4(buffer);
|
||||||
@@ -999,7 +1004,7 @@ namespace AssetStudio
|
|||||||
var normalData = m_CompressedMesh.m_Normals.UnpackFloats(2, 4 * 2);
|
var normalData = m_CompressedMesh.m_Normals.UnpackFloats(2, 4 * 2);
|
||||||
var signs = m_CompressedMesh.m_NormalSigns.UnpackInts();
|
var signs = m_CompressedMesh.m_NormalSigns.UnpackInts();
|
||||||
m_Normals = new float[m_CompressedMesh.m_Normals.m_NumItems / 2 * 3];
|
m_Normals = new float[m_CompressedMesh.m_Normals.m_NumItems / 2 * 3];
|
||||||
for (int i = 0; i < m_CompressedMesh.m_Normals.m_NumItems / 2; ++i)
|
for (var i = 0; i < m_CompressedMesh.m_Normals.m_NumItems / 2; ++i)
|
||||||
{
|
{
|
||||||
var x = normalData[i * 2 + 0];
|
var x = normalData[i * 2 + 0];
|
||||||
var y = normalData[i * 2 + 1];
|
var y = normalData[i * 2 + 1];
|
||||||
@@ -1029,7 +1034,7 @@ namespace AssetStudio
|
|||||||
var tangentData = m_CompressedMesh.m_Tangents.UnpackFloats(2, 4 * 2);
|
var tangentData = m_CompressedMesh.m_Tangents.UnpackFloats(2, 4 * 2);
|
||||||
var signs = m_CompressedMesh.m_TangentSigns.UnpackInts();
|
var signs = m_CompressedMesh.m_TangentSigns.UnpackInts();
|
||||||
m_Tangents = new float[m_CompressedMesh.m_Tangents.m_NumItems / 2 * 4];
|
m_Tangents = new float[m_CompressedMesh.m_Tangents.m_NumItems / 2 * 4];
|
||||||
for (int i = 0; i < m_CompressedMesh.m_Tangents.m_NumItems / 2; ++i)
|
for (var i = 0; i < m_CompressedMesh.m_Tangents.m_NumItems / 2; ++i)
|
||||||
{
|
{
|
||||||
var x = tangentData[i * 2 + 0];
|
var x = tangentData[i * 2 + 0];
|
||||||
var y = tangentData[i * 2 + 1];
|
var y = tangentData[i * 2 + 1];
|
||||||
@@ -1076,7 +1081,7 @@ namespace AssetStudio
|
|||||||
int j = 0;
|
int j = 0;
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
|
|
||||||
for (int i = 0; i < m_CompressedMesh.m_Weights.m_NumItems; i++)
|
for (var i = 0; i < m_CompressedMesh.m_Weights.m_NumItems; i++)
|
||||||
{
|
{
|
||||||
//read bone index and weight.
|
//read bone index and weight.
|
||||||
m_Skin[bonePos].weight[j] = weights[i] / 31.0f;
|
m_Skin[bonePos].weight[j] = weights[i] / 31.0f;
|
||||||
@@ -1120,7 +1125,7 @@ namespace AssetStudio
|
|||||||
m_CompressedMesh.m_Colors.m_BitSize /= 4;
|
m_CompressedMesh.m_Colors.m_BitSize /= 4;
|
||||||
var tempColors = m_CompressedMesh.m_Colors.UnpackInts();
|
var tempColors = m_CompressedMesh.m_Colors.UnpackInts();
|
||||||
m_Colors = new float[m_CompressedMesh.m_Colors.m_NumItems];
|
m_Colors = new float[m_CompressedMesh.m_Colors.m_NumItems];
|
||||||
for (int v = 0; v < m_CompressedMesh.m_Colors.m_NumItems; v++)
|
for (var v = 0; v < m_CompressedMesh.m_Colors.m_NumItems; v++)
|
||||||
{
|
{
|
||||||
m_Colors[v] = tempColors[v] / 255f;
|
m_Colors[v] = tempColors[v] / 255f;
|
||||||
}
|
}
|
||||||
@@ -1140,7 +1145,7 @@ namespace AssetStudio
|
|||||||
var topology = m_SubMesh.topology;
|
var topology = m_SubMesh.topology;
|
||||||
if (topology == GfxPrimitiveType.Triangles)
|
if (topology == GfxPrimitiveType.Triangles)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < indexCount; i += 3)
|
for (var i = 0; i < indexCount; i += 3)
|
||||||
{
|
{
|
||||||
m_Indices.Add(m_IndexBuffer[firstIndex + i]);
|
m_Indices.Add(m_IndexBuffer[firstIndex + i]);
|
||||||
m_Indices.Add(m_IndexBuffer[firstIndex + i + 1]);
|
m_Indices.Add(m_IndexBuffer[firstIndex + i + 1]);
|
||||||
@@ -1151,7 +1156,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
// de-stripify :
|
// de-stripify :
|
||||||
uint triIndex = 0;
|
uint triIndex = 0;
|
||||||
for (int i = 0; i < indexCount - 2; i++)
|
for (var i = 0; i < indexCount - 2; i++)
|
||||||
{
|
{
|
||||||
var a = m_IndexBuffer[firstIndex + i];
|
var a = m_IndexBuffer[firstIndex + i];
|
||||||
var b = m_IndexBuffer[firstIndex + i + 1];
|
var b = m_IndexBuffer[firstIndex + i + 1];
|
||||||
@@ -1180,7 +1185,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
else if (topology == GfxPrimitiveType.Quads)
|
else if (topology == GfxPrimitiveType.Quads)
|
||||||
{
|
{
|
||||||
for (int q = 0; q < indexCount; q += 4)
|
for (var q = 0; q < indexCount; q += 4)
|
||||||
{
|
{
|
||||||
m_Indices.Add(m_IndexBuffer[firstIndex + q]);
|
m_Indices.Add(m_IndexBuffer[firstIndex + q]);
|
||||||
m_Indices.Add(m_IndexBuffer[firstIndex + q + 1]);
|
m_Indices.Add(m_IndexBuffer[firstIndex + q + 1]);
|
||||||
@@ -1202,7 +1207,7 @@ namespace AssetStudio
|
|||||||
private void InitMSkin()
|
private void InitMSkin()
|
||||||
{
|
{
|
||||||
m_Skin = new BoneWeights4[m_VertexCount];
|
m_Skin = new BoneWeights4[m_VertexCount];
|
||||||
for (int i = 0; i < m_VertexCount; i++)
|
for (var i = 0; i < m_VertexCount; i++)
|
||||||
{
|
{
|
||||||
m_Skin[i] = new BoneWeights4();
|
m_Skin[i] = new BoneWeights4();
|
||||||
}
|
}
|
||||||
@@ -1405,7 +1410,7 @@ namespace AssetStudio
|
|||||||
var size = GetFormatSize(format);
|
var size = GetFormatSize(format);
|
||||||
var len = inputBytes.Length / size;
|
var len = inputBytes.Length / size;
|
||||||
var result = new float[len];
|
var result = new float[len];
|
||||||
for (int i = 0; i < len; i++)
|
for (var i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
switch (format)
|
switch (format)
|
||||||
{
|
{
|
||||||
@@ -1437,7 +1442,7 @@ namespace AssetStudio
|
|||||||
var size = GetFormatSize(format);
|
var size = GetFormatSize(format);
|
||||||
var len = inputBytes.Length / size;
|
var len = inputBytes.Length / size;
|
||||||
var result = new int[len];
|
var result = new int[len];
|
||||||
for (int i = 0; i < len; i++)
|
for (var i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
switch (format)
|
switch (format)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class MeshFilter : Component
|
public sealed class MeshFilter : Component
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class MeshRenderer : Renderer
|
public sealed class MeshRenderer : Renderer
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class MonoScript : NamedObject
|
public sealed class MonoScript : NamedObject
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class MovieTexture : Texture
|
public sealed class MovieTexture : Texture
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public class NamedObject : EditorExtension
|
public class NamedObject : EditorExtension
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
namespace AssetStudio
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public sealed class PreloadData : NamedObject
|
public sealed class PreloadData : NamedObject
|
||||||
{
|
{
|
||||||
public PPtr<Object>[] m_Assets;
|
public List<PPtr<Object>> m_Assets;
|
||||||
|
|
||||||
public PreloadData(ObjectReader reader) : base(reader)
|
public PreloadData(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_PreloadTableSize = reader.ReadInt32();
|
var m_PreloadTableSize = reader.ReadInt32();
|
||||||
m_Assets = new PPtr<Object>[m_PreloadTableSize];
|
m_Assets = new List<PPtr<Object>>();
|
||||||
for (var i = 0; i < m_PreloadTableSize; i++)
|
for (var i = 0; i < m_PreloadTableSize; i++)
|
||||||
{
|
{
|
||||||
m_Assets[i] = new PPtr<Object>(reader);
|
m_Assets.Add(new PPtr<Object>(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class RectTransform : Transform
|
public sealed class RectTransform : Transform
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace AssetStudio
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public class StaticBatchInfo
|
public class StaticBatchInfo
|
||||||
{
|
{
|
||||||
@@ -14,7 +16,7 @@
|
|||||||
|
|
||||||
public abstract class Renderer : Component
|
public abstract class Renderer : Component
|
||||||
{
|
{
|
||||||
public PPtr<Material>[] m_Materials;
|
public List<PPtr<Material>> m_Materials;
|
||||||
public StaticBatchInfo m_StaticBatchInfo;
|
public StaticBatchInfo m_StaticBatchInfo;
|
||||||
public uint[] m_SubsetIndices;
|
public uint[] m_SubsetIndices;
|
||||||
|
|
||||||
@@ -108,10 +110,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
var m_MaterialsSize = reader.ReadInt32();
|
var m_MaterialsSize = reader.ReadInt32();
|
||||||
m_Materials = new PPtr<Material>[m_MaterialsSize];
|
m_Materials = new List<PPtr<Material>>();
|
||||||
for (int i = 0; i < m_MaterialsSize; i++)
|
for (var i = 0; i < m_MaterialsSize; i++)
|
||||||
{
|
{
|
||||||
m_Materials[i] = new PPtr<Material>(reader);
|
m_Materials.Add(new PPtr<Material>(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version < 3) //3.0 down
|
if (version < 3) //3.0 down
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
public class ResourceManager : Object
|
public class ResourceManager : Object
|
||||||
{
|
{
|
||||||
public KeyValuePair<string, PPtr<Object>>[] m_Container;
|
public List<KeyValuePair<string, PPtr<Object>>> m_Container;
|
||||||
|
|
||||||
public ResourceManager(ObjectReader reader) : base(reader)
|
public ResourceManager(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_ContainerSize = reader.ReadInt32();
|
var m_ContainerSize = reader.ReadInt32();
|
||||||
m_Container = new KeyValuePair<string, PPtr<Object>>[m_ContainerSize];
|
m_Container = new List<KeyValuePair<string, PPtr<Object>>>();
|
||||||
for (int i = 0; i < m_ContainerSize; i++)
|
for (var i = 0; i < m_ContainerSize; i++)
|
||||||
{
|
{
|
||||||
m_Container[i] = new KeyValuePair<string, PPtr<Object>>(reader.ReadAlignedString(), new PPtr<Object>(reader));
|
m_Container.Add(new KeyValuePair<string, PPtr<Object>>(reader.ReadAlignedString(), new PPtr<Object>(reader)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public abstract class RuntimeAnimatorController : NamedObject
|
public abstract class RuntimeAnimatorController : NamedObject
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class StructParameter
|
public class StructParameter
|
||||||
{
|
{
|
||||||
public MatrixParameter[] m_MatrixParams;
|
public List<MatrixParameter> m_MatrixParams;
|
||||||
public VectorParameter[] m_VectorParams;
|
public List<VectorParameter> m_VectorParams;
|
||||||
|
|
||||||
public StructParameter(BinaryReader reader)
|
public StructParameter(BinaryReader reader)
|
||||||
{
|
{
|
||||||
@@ -28,17 +28,17 @@ namespace AssetStudio
|
|||||||
var m_StructSize = reader.ReadInt32();
|
var m_StructSize = reader.ReadInt32();
|
||||||
|
|
||||||
int numVectorParams = reader.ReadInt32();
|
int numVectorParams = reader.ReadInt32();
|
||||||
m_VectorParams = new VectorParameter[numVectorParams];
|
m_VectorParams = new List<VectorParameter>();
|
||||||
for (int i = 0; i < numVectorParams; i++)
|
for (var i = 0; i < numVectorParams; i++)
|
||||||
{
|
{
|
||||||
m_VectorParams[i] = new VectorParameter(reader);
|
m_VectorParams.Add(new VectorParameter(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numMatrixParams = reader.ReadInt32();
|
int numMatrixParams = reader.ReadInt32();
|
||||||
m_MatrixParams = new MatrixParameter[numMatrixParams];
|
m_MatrixParams = new List<MatrixParameter>();
|
||||||
for (int i = 0; i < numMatrixParams; i++)
|
for (var i = 0; i < numMatrixParams; i++)
|
||||||
{
|
{
|
||||||
m_MatrixParams[i] = new MatrixParameter(reader);
|
m_MatrixParams.Add(new MatrixParameter(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,15 +112,15 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class SerializedProperties
|
public class SerializedProperties
|
||||||
{
|
{
|
||||||
public SerializedProperty[] m_Props;
|
public List<SerializedProperty> m_Props;
|
||||||
|
|
||||||
public SerializedProperties(BinaryReader reader)
|
public SerializedProperties(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int numProps = reader.ReadInt32();
|
int numProps = reader.ReadInt32();
|
||||||
m_Props = new SerializedProperty[numProps];
|
m_Props = new List<SerializedProperty>();
|
||||||
for (int i = 0; i < numProps; i++)
|
for (var i = 0; i < numProps; i++)
|
||||||
{
|
{
|
||||||
m_Props[i] = new SerializedProperty(reader);
|
m_Props.Add(new SerializedProperty(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -237,7 +237,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
m_Name = reader.ReadAlignedString();
|
m_Name = reader.ReadAlignedString();
|
||||||
rtBlend = new SerializedShaderRTBlendState[8];
|
rtBlend = new SerializedShaderRTBlendState[8];
|
||||||
for (int i = 0; i < 8; i++)
|
for (var i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
rtBlend[i] = new SerializedShaderRTBlendState(reader);
|
rtBlend[i] = new SerializedShaderRTBlendState(reader);
|
||||||
}
|
}
|
||||||
@@ -290,16 +290,16 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class ParserBindChannels
|
public class ParserBindChannels
|
||||||
{
|
{
|
||||||
public ShaderBindChannel[] m_Channels;
|
public List<ShaderBindChannel> m_Channels;
|
||||||
public uint m_SourceMap;
|
public uint m_SourceMap;
|
||||||
|
|
||||||
public ParserBindChannels(BinaryReader reader)
|
public ParserBindChannels(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int numChannels = reader.ReadInt32();
|
int numChannels = reader.ReadInt32();
|
||||||
m_Channels = new ShaderBindChannel[numChannels];
|
m_Channels = new List<ShaderBindChannel>();
|
||||||
for (int i = 0; i < numChannels; i++)
|
for (var i = 0; i < numChannels; i++)
|
||||||
{
|
{
|
||||||
m_Channels[i] = new ShaderBindChannel(reader);
|
m_Channels.Add(new ShaderBindChannel(reader));
|
||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
|
|
||||||
@@ -390,9 +390,9 @@ namespace AssetStudio
|
|||||||
public class ConstantBuffer
|
public class ConstantBuffer
|
||||||
{
|
{
|
||||||
public int m_NameIndex;
|
public int m_NameIndex;
|
||||||
public MatrixParameter[] m_MatrixParams;
|
public List<MatrixParameter> m_MatrixParams;
|
||||||
public VectorParameter[] m_VectorParams;
|
public List<VectorParameter> m_VectorParams;
|
||||||
public StructParameter[] m_StructParams;
|
public List<StructParameter> m_StructParams;
|
||||||
public int m_Size;
|
public int m_Size;
|
||||||
public bool m_IsPartialCB;
|
public bool m_IsPartialCB;
|
||||||
|
|
||||||
@@ -403,25 +403,25 @@ namespace AssetStudio
|
|||||||
m_NameIndex = reader.ReadInt32();
|
m_NameIndex = reader.ReadInt32();
|
||||||
|
|
||||||
int numMatrixParams = reader.ReadInt32();
|
int numMatrixParams = reader.ReadInt32();
|
||||||
m_MatrixParams = new MatrixParameter[numMatrixParams];
|
m_MatrixParams = new List<MatrixParameter>();
|
||||||
for (int i = 0; i < numMatrixParams; i++)
|
for (var i = 0; i < numMatrixParams; i++)
|
||||||
{
|
{
|
||||||
m_MatrixParams[i] = new MatrixParameter(reader);
|
m_MatrixParams.Add(new MatrixParameter(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numVectorParams = reader.ReadInt32();
|
int numVectorParams = reader.ReadInt32();
|
||||||
m_VectorParams = new VectorParameter[numVectorParams];
|
m_VectorParams = new List<VectorParameter>();
|
||||||
for (int i = 0; i < numVectorParams; i++)
|
for (var i = 0; i < numVectorParams; i++)
|
||||||
{
|
{
|
||||||
m_VectorParams[i] = new VectorParameter(reader);
|
m_VectorParams.Add(new VectorParameter(reader));
|
||||||
}
|
}
|
||||||
if (version >= (2017, 3)) //2017.3 and up
|
if (version >= (2017, 3)) //2017.3 and up
|
||||||
{
|
{
|
||||||
int numStructParams = reader.ReadInt32();
|
int numStructParams = reader.ReadInt32();
|
||||||
m_StructParams = new StructParameter[numStructParams];
|
m_StructParams = new List<StructParameter>();
|
||||||
for (int i = 0; i < numStructParams; i++)
|
for (var i = 0; i < numStructParams; i++)
|
||||||
{
|
{
|
||||||
m_StructParams[i] = new StructParameter(reader);
|
m_StructParams.Add(new StructParameter(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_Size = reader.ReadInt32();
|
m_Size = reader.ReadInt32();
|
||||||
@@ -488,71 +488,74 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class SerializedProgramParameters
|
public class SerializedProgramParameters
|
||||||
{
|
{
|
||||||
public VectorParameter[] m_VectorParams;
|
public List<VectorParameter> m_VectorParams;
|
||||||
public MatrixParameter[] m_MatrixParams;
|
public List<MatrixParameter> m_MatrixParams;
|
||||||
public TextureParameter[] m_TextureParams;
|
public List<TextureParameter> m_TextureParams;
|
||||||
public BufferBinding[] m_BufferParams;
|
public List<BufferBinding> m_BufferParams;
|
||||||
public ConstantBuffer[] m_ConstantBuffers;
|
public List<ConstantBuffer> m_ConstantBuffers;
|
||||||
public BufferBinding[] m_ConstantBufferBindings;
|
public List<BufferBinding> m_ConstantBufferBindings;
|
||||||
public UAVParameter[] m_UAVParams;
|
public List<UAVParameter> m_UAVParams;
|
||||||
public SamplerParameter[] m_Samplers;
|
public List<SamplerParameter> m_Samplers;
|
||||||
|
|
||||||
public SerializedProgramParameters(ObjectReader reader)
|
public SerializedProgramParameters(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numVectorParams = reader.ReadInt32();
|
int numVectorParams = reader.ReadInt32();
|
||||||
m_VectorParams = new VectorParameter[numVectorParams];
|
m_VectorParams = new List<VectorParameter>();
|
||||||
for (int i = 0; i < numVectorParams; i++)
|
for (var i = 0; i < numVectorParams; i++)
|
||||||
{
|
{
|
||||||
m_VectorParams[i] = new VectorParameter(reader);
|
m_VectorParams.Add(new VectorParameter(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numMatrixParams = reader.ReadInt32();
|
int numMatrixParams = reader.ReadInt32();
|
||||||
m_MatrixParams = new MatrixParameter[numMatrixParams];
|
m_MatrixParams = new List<MatrixParameter>();
|
||||||
for (int i = 0; i < numMatrixParams; i++)
|
for (var i = 0; i < numMatrixParams; i++)
|
||||||
{
|
{
|
||||||
m_MatrixParams[i] = new MatrixParameter(reader);
|
m_MatrixParams.Add(new MatrixParameter(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numTextureParams = reader.ReadInt32();
|
int numTextureParams = reader.ReadInt32();
|
||||||
m_TextureParams = new TextureParameter[numTextureParams];
|
m_TextureParams = new List<TextureParameter>();
|
||||||
for (int i = 0; i < numTextureParams; i++)
|
for (var i = 0; i < numTextureParams; i++)
|
||||||
{
|
{
|
||||||
m_TextureParams[i] = new TextureParameter(reader);
|
m_TextureParams.Add(new TextureParameter(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numBufferParams = reader.ReadInt32();
|
int numBufferParams = reader.ReadInt32();
|
||||||
m_BufferParams = new BufferBinding[numBufferParams];
|
m_BufferParams = new List<BufferBinding>();
|
||||||
for (int i = 0; i < numBufferParams; i++)
|
for (var i = 0; i < numBufferParams; i++)
|
||||||
{
|
{
|
||||||
m_BufferParams[i] = new BufferBinding(reader);
|
m_BufferParams.Add(new BufferBinding(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numConstantBuffers = reader.ReadInt32();
|
int numConstantBuffers = reader.ReadInt32();
|
||||||
m_ConstantBuffers = new ConstantBuffer[numConstantBuffers];
|
m_ConstantBuffers = new List<ConstantBuffer>();
|
||||||
for (int i = 0; i < numConstantBuffers; i++)
|
for (var i = 0; i < numConstantBuffers; i++)
|
||||||
{
|
{
|
||||||
m_ConstantBuffers[i] = new ConstantBuffer(reader);
|
m_ConstantBuffers.Add(new ConstantBuffer(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numConstantBufferBindings = reader.ReadInt32();
|
int numConstantBufferBindings = reader.ReadInt32();
|
||||||
m_ConstantBufferBindings = new BufferBinding[numConstantBufferBindings];
|
m_ConstantBufferBindings = new List<BufferBinding>();
|
||||||
for (int i = 0; i < numConstantBufferBindings; i++)
|
for (var i = 0; i < numConstantBufferBindings; i++)
|
||||||
{
|
{
|
||||||
m_ConstantBufferBindings[i] = new BufferBinding(reader);
|
m_ConstantBufferBindings.Add(new BufferBinding(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numUAVParams = reader.ReadInt32();
|
int numUAVParams = reader.ReadInt32();
|
||||||
m_UAVParams = new UAVParameter[numUAVParams];
|
m_UAVParams = new List<UAVParameter>();
|
||||||
for (int i = 0; i < numUAVParams; i++)
|
for (var i = 0; i < numUAVParams; i++)
|
||||||
{
|
{
|
||||||
m_UAVParams[i] = new UAVParameter(reader);
|
m_UAVParams.Add(new UAVParameter(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
int numSamplers = reader.ReadInt32();
|
if (reader.version >= 2017) //2017 and up
|
||||||
m_Samplers = new SamplerParameter[numSamplers];
|
|
||||||
for (int i = 0; i < numSamplers; i++)
|
|
||||||
{
|
{
|
||||||
m_Samplers[i] = new SamplerParameter(reader);
|
int numSamplers = reader.ReadInt32();
|
||||||
|
m_Samplers = new List<SamplerParameter>();
|
||||||
|
for (var i = 0; i < numSamplers; i++)
|
||||||
|
{
|
||||||
|
m_Samplers.Add(new SamplerParameter(reader));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -564,15 +567,7 @@ namespace AssetStudio
|
|||||||
public ushort[] m_KeywordIndices;
|
public ushort[] m_KeywordIndices;
|
||||||
public sbyte m_ShaderHardwareTier;
|
public sbyte m_ShaderHardwareTier;
|
||||||
public ShaderGpuProgramType m_GpuProgramType;
|
public ShaderGpuProgramType m_GpuProgramType;
|
||||||
public SerializedProgramParameters m_Parameters;
|
public SerializedProgramParameters m_Parameters; // nested since 2020.3.2f1 and up; 2021.1.1f1 and up
|
||||||
public VectorParameter[] m_VectorParams;
|
|
||||||
public MatrixParameter[] m_MatrixParams;
|
|
||||||
public TextureParameter[] m_TextureParams;
|
|
||||||
public BufferBinding[] m_BufferParams;
|
|
||||||
public ConstantBuffer[] m_ConstantBuffers;
|
|
||||||
public BufferBinding[] m_ConstantBufferBindings;
|
|
||||||
public UAVParameter[] m_UAVParams;
|
|
||||||
public SamplerParameter[] m_Samplers;
|
|
||||||
|
|
||||||
public SerializedSubProgram(ObjectReader reader)
|
public SerializedSubProgram(ObjectReader reader)
|
||||||
{
|
{
|
||||||
@@ -601,72 +596,7 @@ namespace AssetStudio
|
|||||||
m_GpuProgramType = (ShaderGpuProgramType)reader.ReadSByte();
|
m_GpuProgramType = (ShaderGpuProgramType)reader.ReadSByte();
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
|
|
||||||
if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
|
m_Parameters = new SerializedProgramParameters(reader);
|
||||||
|| version >= (2021, 1, 1)) //2021.1.1f1 and up
|
|
||||||
{
|
|
||||||
m_Parameters = new SerializedProgramParameters(reader);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int numVectorParams = reader.ReadInt32();
|
|
||||||
m_VectorParams = new VectorParameter[numVectorParams];
|
|
||||||
for (int i = 0; i < numVectorParams; i++)
|
|
||||||
{
|
|
||||||
m_VectorParams[i] = new VectorParameter(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
int numMatrixParams = reader.ReadInt32();
|
|
||||||
m_MatrixParams = new MatrixParameter[numMatrixParams];
|
|
||||||
for (int i = 0; i < numMatrixParams; i++)
|
|
||||||
{
|
|
||||||
m_MatrixParams[i] = new MatrixParameter(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
int numTextureParams = reader.ReadInt32();
|
|
||||||
m_TextureParams = new TextureParameter[numTextureParams];
|
|
||||||
for (int i = 0; i < numTextureParams; i++)
|
|
||||||
{
|
|
||||||
m_TextureParams[i] = new TextureParameter(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
int numBufferParams = reader.ReadInt32();
|
|
||||||
m_BufferParams = new BufferBinding[numBufferParams];
|
|
||||||
for (int i = 0; i < numBufferParams; i++)
|
|
||||||
{
|
|
||||||
m_BufferParams[i] = new BufferBinding(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
int numConstantBuffers = reader.ReadInt32();
|
|
||||||
m_ConstantBuffers = new ConstantBuffer[numConstantBuffers];
|
|
||||||
for (int i = 0; i < numConstantBuffers; i++)
|
|
||||||
{
|
|
||||||
m_ConstantBuffers[i] = new ConstantBuffer(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
int numConstantBufferBindings = reader.ReadInt32();
|
|
||||||
m_ConstantBufferBindings = new BufferBinding[numConstantBufferBindings];
|
|
||||||
for (int i = 0; i < numConstantBufferBindings; i++)
|
|
||||||
{
|
|
||||||
m_ConstantBufferBindings[i] = new BufferBinding(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
int numUAVParams = reader.ReadInt32();
|
|
||||||
m_UAVParams = new UAVParameter[numUAVParams];
|
|
||||||
for (int i = 0; i < numUAVParams; i++)
|
|
||||||
{
|
|
||||||
m_UAVParams[i] = new UAVParameter(reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version >= 2017) //2017 and up
|
|
||||||
{
|
|
||||||
int numSamplers = reader.ReadInt32();
|
|
||||||
m_Samplers = new SamplerParameter[numSamplers];
|
|
||||||
for (int i = 0; i < numSamplers; i++)
|
|
||||||
{
|
|
||||||
m_Samplers[i] = new SamplerParameter(reader);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version >= (2017, 2)) //2017.2 and up
|
if (version >= (2017, 2)) //2017.2 and up
|
||||||
{
|
{
|
||||||
@@ -684,7 +614,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class SerializedProgram
|
public class SerializedProgram
|
||||||
{
|
{
|
||||||
public SerializedSubProgram[] m_SubPrograms;
|
public List<SerializedSubProgram> m_SubPrograms;
|
||||||
public SerializedProgramParameters m_CommonParameters;
|
public SerializedProgramParameters m_CommonParameters;
|
||||||
public ushort[] m_SerializedKeywordStateMask;
|
public ushort[] m_SerializedKeywordStateMask;
|
||||||
|
|
||||||
@@ -693,10 +623,10 @@ namespace AssetStudio
|
|||||||
var version = reader.version;
|
var version = reader.version;
|
||||||
|
|
||||||
int numSubPrograms = reader.ReadInt32();
|
int numSubPrograms = reader.ReadInt32();
|
||||||
m_SubPrograms = new SerializedSubProgram[numSubPrograms];
|
m_SubPrograms = new List<SerializedSubProgram>();
|
||||||
for (int i = 0; i < numSubPrograms; i++)
|
for (var i = 0; i < numSubPrograms; i++)
|
||||||
{
|
{
|
||||||
m_SubPrograms[i] = new SerializedSubProgram(reader);
|
m_SubPrograms.Add(new SerializedSubProgram(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
|
if (version.IsInRange((2020, 3, 2), 2021) //2020.3.2f1 and up
|
||||||
@@ -722,11 +652,11 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class SerializedPass
|
public class SerializedPass
|
||||||
{
|
{
|
||||||
public Hash128[] m_EditorDataHash;
|
public List<Hash128> m_EditorDataHash;
|
||||||
public byte[] m_Platforms;
|
public byte[] m_Platforms;
|
||||||
public ushort[] m_LocalKeywordMask;
|
public ushort[] m_LocalKeywordMask;
|
||||||
public ushort[] m_GlobalKeywordMask;
|
public ushort[] m_GlobalKeywordMask;
|
||||||
public KeyValuePair<string, int>[] m_NameIndices;
|
public List<KeyValuePair<string, int>> m_NameIndices;
|
||||||
public PassType m_Type;
|
public PassType m_Type;
|
||||||
public SerializedShaderState m_State;
|
public SerializedShaderState m_State;
|
||||||
public uint m_ProgramMask;
|
public uint m_ProgramMask;
|
||||||
@@ -750,10 +680,10 @@ namespace AssetStudio
|
|||||||
if (version >= (2020, 2)) //2020.2 and up
|
if (version >= (2020, 2)) //2020.2 and up
|
||||||
{
|
{
|
||||||
int numEditorDataHash = reader.ReadInt32();
|
int numEditorDataHash = reader.ReadInt32();
|
||||||
m_EditorDataHash = new Hash128[numEditorDataHash];
|
m_EditorDataHash = new List<Hash128>();
|
||||||
for (int i = 0; i < numEditorDataHash; i++)
|
for (var i = 0; i < numEditorDataHash; i++)
|
||||||
{
|
{
|
||||||
m_EditorDataHash[i] = new Hash128(reader);
|
m_EditorDataHash.Add(new Hash128(reader));
|
||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
m_Platforms = reader.ReadUInt8Array();
|
m_Platforms = reader.ReadUInt8Array();
|
||||||
@@ -768,10 +698,10 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
int numIndices = reader.ReadInt32();
|
int numIndices = reader.ReadInt32();
|
||||||
m_NameIndices = new KeyValuePair<string, int>[numIndices];
|
m_NameIndices = new List<KeyValuePair<string, int>>();
|
||||||
for (int i = 0; i < numIndices; i++)
|
for (var i = 0; i < numIndices; i++)
|
||||||
{
|
{
|
||||||
m_NameIndices[i] = new KeyValuePair<string, int>(reader.ReadAlignedString(), reader.ReadInt32());
|
m_NameIndices.Add(new KeyValuePair<string, int>(reader.ReadAlignedString(), reader.ReadInt32()));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Type = (PassType)reader.ReadInt32();
|
m_Type = (PassType)reader.ReadInt32();
|
||||||
@@ -806,32 +736,32 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public class SerializedTagMap
|
public class SerializedTagMap
|
||||||
{
|
{
|
||||||
public KeyValuePair<string, string>[] tags;
|
public List<KeyValuePair<string, string>> tags;
|
||||||
|
|
||||||
public SerializedTagMap(BinaryReader reader)
|
public SerializedTagMap(BinaryReader reader)
|
||||||
{
|
{
|
||||||
int numTags = reader.ReadInt32();
|
int numTags = reader.ReadInt32();
|
||||||
tags = new KeyValuePair<string, string>[numTags];
|
tags = new List<KeyValuePair<string, string>>();
|
||||||
for (int i = 0; i < numTags; i++)
|
for (var i = 0; i < numTags; i++)
|
||||||
{
|
{
|
||||||
tags[i] = new KeyValuePair<string, string>(reader.ReadAlignedString(), reader.ReadAlignedString());
|
tags.Add(new KeyValuePair<string, string>(reader.ReadAlignedString(), reader.ReadAlignedString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SerializedSubShader
|
public class SerializedSubShader
|
||||||
{
|
{
|
||||||
public SerializedPass[] m_Passes;
|
public List<SerializedPass> m_Passes;
|
||||||
public SerializedTagMap m_Tags;
|
public SerializedTagMap m_Tags;
|
||||||
public int m_LOD;
|
public int m_LOD;
|
||||||
|
|
||||||
public SerializedSubShader(ObjectReader reader)
|
public SerializedSubShader(ObjectReader reader)
|
||||||
{
|
{
|
||||||
int numPasses = reader.ReadInt32();
|
int numPasses = reader.ReadInt32();
|
||||||
m_Passes = new SerializedPass[numPasses];
|
m_Passes = new List<SerializedPass>();
|
||||||
for (int i = 0; i < numPasses; i++)
|
for (var i = 0; i < numPasses; i++)
|
||||||
{
|
{
|
||||||
m_Passes[i] = new SerializedPass(reader);
|
m_Passes.Add(new SerializedPass(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Tags = new SerializedTagMap(reader);
|
m_Tags = new SerializedTagMap(reader);
|
||||||
@@ -866,14 +796,14 @@ namespace AssetStudio
|
|||||||
public class SerializedShader
|
public class SerializedShader
|
||||||
{
|
{
|
||||||
public SerializedProperties m_PropInfo;
|
public SerializedProperties m_PropInfo;
|
||||||
public SerializedSubShader[] m_SubShaders;
|
public List<SerializedSubShader> m_SubShaders;
|
||||||
public string[] m_KeywordNames;
|
public string[] m_KeywordNames;
|
||||||
public byte[] m_KeywordFlags;
|
public byte[] m_KeywordFlags;
|
||||||
public string m_Name;
|
public string m_Name;
|
||||||
public string m_CustomEditorName;
|
public string m_CustomEditorName;
|
||||||
public string m_FallbackName;
|
public string m_FallbackName;
|
||||||
public SerializedShaderDependency[] m_Dependencies;
|
public List<SerializedShaderDependency> m_Dependencies;
|
||||||
public SerializedCustomEditorForRenderPipeline[] m_CustomEditorForRenderPipelines;
|
public List<SerializedCustomEditorForRenderPipeline> m_CustomEditorForRenderPipelines;
|
||||||
public bool m_DisableNoSubshadersMessage;
|
public bool m_DisableNoSubshadersMessage;
|
||||||
|
|
||||||
public SerializedShader(ObjectReader reader)
|
public SerializedShader(ObjectReader reader)
|
||||||
@@ -883,10 +813,10 @@ namespace AssetStudio
|
|||||||
m_PropInfo = new SerializedProperties(reader);
|
m_PropInfo = new SerializedProperties(reader);
|
||||||
|
|
||||||
int numSubShaders = reader.ReadInt32();
|
int numSubShaders = reader.ReadInt32();
|
||||||
m_SubShaders = new SerializedSubShader[numSubShaders];
|
m_SubShaders = new List<SerializedSubShader>();
|
||||||
for (int i = 0; i < numSubShaders; i++)
|
for (var i = 0; i < numSubShaders; i++)
|
||||||
{
|
{
|
||||||
m_SubShaders[i] = new SerializedSubShader(reader);
|
m_SubShaders.Add(new SerializedSubShader(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= (2021, 2)) //2021.2 and up
|
if (version >= (2021, 2)) //2021.2 and up
|
||||||
@@ -901,19 +831,19 @@ namespace AssetStudio
|
|||||||
m_FallbackName = reader.ReadAlignedString();
|
m_FallbackName = reader.ReadAlignedString();
|
||||||
|
|
||||||
int numDependencies = reader.ReadInt32();
|
int numDependencies = reader.ReadInt32();
|
||||||
m_Dependencies = new SerializedShaderDependency[numDependencies];
|
m_Dependencies = new List<SerializedShaderDependency>();
|
||||||
for (int i = 0; i < numDependencies; i++)
|
for (var i = 0; i < numDependencies; i++)
|
||||||
{
|
{
|
||||||
m_Dependencies[i] = new SerializedShaderDependency(reader);
|
m_Dependencies.Add(new SerializedShaderDependency(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= 2021) //2021.1 and up
|
if (version >= 2021) //2021.1 and up
|
||||||
{
|
{
|
||||||
int m_CustomEditorForRenderPipelinesSize = reader.ReadInt32();
|
int m_CustomEditorForRenderPipelinesSize = reader.ReadInt32();
|
||||||
m_CustomEditorForRenderPipelines = new SerializedCustomEditorForRenderPipeline[m_CustomEditorForRenderPipelinesSize];
|
m_CustomEditorForRenderPipelines = new List<SerializedCustomEditorForRenderPipeline>();
|
||||||
for (int i = 0; i < m_CustomEditorForRenderPipelinesSize; i++)
|
for (var i = 0; i < m_CustomEditorForRenderPipelinesSize; i++)
|
||||||
{
|
{
|
||||||
m_CustomEditorForRenderPipelines[i] = new SerializedCustomEditorForRenderPipeline(reader);
|
m_CustomEditorForRenderPipelines.Add(new SerializedCustomEditorForRenderPipeline(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -988,18 +918,18 @@ namespace AssetStudio
|
|||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
|
|
||||||
var m_DependenciesCount = reader.ReadInt32();
|
var m_DependenciesCount = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_DependenciesCount; i++)
|
for (var i = 0; i < m_DependenciesCount; i++)
|
||||||
{
|
{
|
||||||
new PPtr<Shader>(reader);
|
var m_Dependencies = new PPtr<Shader>(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= 2018)
|
if (version >= 2018)
|
||||||
{
|
{
|
||||||
var m_NonModifiableTexturesCount = reader.ReadInt32();
|
var m_NonModifiableTexturesCount = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_NonModifiableTexturesCount; i++)
|
for (var i = 0; i < m_NonModifiableTexturesCount; i++)
|
||||||
{
|
{
|
||||||
var first = reader.ReadAlignedString();
|
var first = reader.ReadAlignedString();
|
||||||
new PPtr<Texture>(reader);
|
var second = new PPtr<Texture>(reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public sealed class SkinnedMeshRenderer : Renderer
|
public sealed class SkinnedMeshRenderer : Renderer
|
||||||
{
|
{
|
||||||
public PPtr<Mesh> m_Mesh;
|
public PPtr<Mesh> m_Mesh;
|
||||||
public PPtr<Transform>[] m_Bones;
|
public List<PPtr<Transform>> m_Bones;
|
||||||
public float[] m_BlendShapeWeights;
|
public float[] m_BlendShapeWeights;
|
||||||
|
|
||||||
public SkinnedMeshRenderer(ObjectReader reader) : base(reader)
|
public SkinnedMeshRenderer(ObjectReader reader) : base(reader)
|
||||||
@@ -25,10 +22,11 @@ namespace AssetStudio
|
|||||||
|
|
||||||
m_Mesh = new PPtr<Mesh>(reader);
|
m_Mesh = new PPtr<Mesh>(reader);
|
||||||
|
|
||||||
m_Bones = new PPtr<Transform>[reader.ReadInt32()];
|
var numBones = reader.ReadInt32();
|
||||||
for (int b = 0; b < m_Bones.Length; b++)
|
m_Bones = new List<PPtr<Transform>>();
|
||||||
|
for (var b = 0; b < numBones; b++)
|
||||||
{
|
{
|
||||||
m_Bones[b] = new PPtr<Transform>(reader);
|
m_Bones.Add(new PPtr<Transform>(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= (4, 3)) //4.3 and up
|
if (version >= (4, 3)) //4.3 and up
|
||||||
|
|||||||
@@ -79,11 +79,11 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
public PPtr<Texture2D> texture;
|
public PPtr<Texture2D> texture;
|
||||||
public PPtr<Texture2D> alphaTexture;
|
public PPtr<Texture2D> alphaTexture;
|
||||||
public SecondarySpriteTexture[] secondaryTextures;
|
public List<SecondarySpriteTexture> secondaryTextures;
|
||||||
public SubMesh[] m_SubMeshes;
|
public List<SubMesh> m_SubMeshes;
|
||||||
public byte[] m_IndexBuffer;
|
public byte[] m_IndexBuffer;
|
||||||
public VertexData m_VertexData;
|
public VertexData m_VertexData;
|
||||||
public SpriteVertex[] vertices;
|
public List<SpriteVertex> vertices;
|
||||||
public ushort[] indices;
|
public ushort[] indices;
|
||||||
public Matrix4x4[] m_Bindpose;
|
public Matrix4x4[] m_Bindpose;
|
||||||
public BoneWeights4[] m_SourceSkin;
|
public BoneWeights4[] m_SourceSkin;
|
||||||
@@ -104,20 +104,20 @@ namespace AssetStudio
|
|||||||
if (version >= 2019) //2019 and up
|
if (version >= 2019) //2019 and up
|
||||||
{
|
{
|
||||||
var secondaryTexturesSize = reader.ReadInt32();
|
var secondaryTexturesSize = reader.ReadInt32();
|
||||||
secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize];
|
secondaryTextures = new List<SecondarySpriteTexture>();
|
||||||
for (int i = 0; i < secondaryTexturesSize; i++)
|
for (var i = 0; i < secondaryTexturesSize; i++)
|
||||||
{
|
{
|
||||||
secondaryTextures[i] = new SecondarySpriteTexture(reader);
|
secondaryTextures.Add(new SecondarySpriteTexture(reader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version >= (5, 6)) //5.6 and up
|
if (version >= (5, 6)) //5.6 and up
|
||||||
{
|
{
|
||||||
var m_SubMeshesSize = reader.ReadInt32();
|
var m_SubMeshesSize = reader.ReadInt32();
|
||||||
m_SubMeshes = new SubMesh[m_SubMeshesSize];
|
m_SubMeshes = new List<SubMesh>();
|
||||||
for (int i = 0; i < m_SubMeshesSize; i++)
|
for (var i = 0; i < m_SubMeshesSize; i++)
|
||||||
{
|
{
|
||||||
m_SubMeshes[i] = new SubMesh(reader);
|
m_SubMeshes.Add(new SubMesh(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_IndexBuffer = reader.ReadUInt8Array();
|
m_IndexBuffer = reader.ReadUInt8Array();
|
||||||
@@ -128,10 +128,10 @@ namespace AssetStudio
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var verticesSize = reader.ReadInt32();
|
var verticesSize = reader.ReadInt32();
|
||||||
vertices = new SpriteVertex[verticesSize];
|
vertices = new List<SpriteVertex>();
|
||||||
for (int i = 0; i < verticesSize; i++)
|
for (var i = 0; i < verticesSize; i++)
|
||||||
{
|
{
|
||||||
vertices[i] = new SpriteVertex(reader);
|
vertices.Add(new SpriteVertex(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
indices = reader.ReadUInt16Array();
|
indices = reader.ReadUInt16Array();
|
||||||
@@ -145,7 +145,9 @@ namespace AssetStudio
|
|||||||
if (version < (2018, 2)) //2018.2 down
|
if (version < (2018, 2)) //2018.2 down
|
||||||
{
|
{
|
||||||
var m_SourceSkinSize = reader.ReadInt32();
|
var m_SourceSkinSize = reader.ReadInt32();
|
||||||
for (int i = 0; i < m_SourceSkinSize; i++)
|
reader.ThrowIfTooLarge(m_SourceSkinSize * 32f);
|
||||||
|
m_SourceSkin = new BoneWeights4[m_SourceSkinSize];
|
||||||
|
for (var i = 0; i < m_SourceSkinSize; i++)
|
||||||
{
|
{
|
||||||
m_SourceSkin[i] = new BoneWeights4(reader);
|
m_SourceSkin[i] = new BoneWeights4(reader);
|
||||||
}
|
}
|
||||||
@@ -201,7 +203,7 @@ namespace AssetStudio
|
|||||||
public string[] m_AtlasTags;
|
public string[] m_AtlasTags;
|
||||||
public PPtr<SpriteAtlas> m_SpriteAtlas;
|
public PPtr<SpriteAtlas> m_SpriteAtlas;
|
||||||
public SpriteRenderData m_RD;
|
public SpriteRenderData m_RD;
|
||||||
public Vector2[][] m_PhysicsShape;
|
//public Vector2[][] m_PhysicsShape;
|
||||||
|
|
||||||
public Sprite(ObjectReader reader) : base(reader)
|
public Sprite(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
@@ -238,17 +240,18 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_RD = new SpriteRenderData(reader);
|
m_RD = new SpriteRenderData(reader);
|
||||||
|
/*
|
||||||
if (version >= 2017) //2017 and up
|
if (version >= 2017) //2017 and up
|
||||||
{
|
{
|
||||||
var m_PhysicsShapeSize = reader.ReadInt32();
|
var m_PhysicsShapeSize = reader.ReadInt32();
|
||||||
m_PhysicsShape = new Vector2[m_PhysicsShapeSize][];
|
var physicsShapeList = new List<Vector2[]>();
|
||||||
for (int i = 0; i < m_PhysicsShapeSize; i++)
|
for (var i = 0; i < m_PhysicsShapeSize; i++)
|
||||||
{
|
{
|
||||||
m_PhysicsShape[i] = reader.ReadVector2Array();
|
physicsShapeList.Add(reader.ReadVector2Array());
|
||||||
}
|
}
|
||||||
|
m_PhysicsShape = physicsShapeList.ToArray();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
//vector m_Bones 2018 and up
|
//vector m_Bones 2018 and up
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace AssetStudio
|
|||||||
public Vector4 uvTransform;
|
public Vector4 uvTransform;
|
||||||
public float downscaleMultiplier;
|
public float downscaleMultiplier;
|
||||||
public SpriteSettings settingsRaw;
|
public SpriteSettings settingsRaw;
|
||||||
public SecondarySpriteTexture[] secondaryTextures;
|
public List<SecondarySpriteTexture> secondaryTextures;
|
||||||
|
|
||||||
public SpriteAtlasData(ObjectReader reader)
|
public SpriteAtlasData(ObjectReader reader)
|
||||||
{
|
{
|
||||||
@@ -33,10 +33,10 @@ namespace AssetStudio
|
|||||||
if (version >= (2020, 2)) //2020.2 and up
|
if (version >= (2020, 2)) //2020.2 and up
|
||||||
{
|
{
|
||||||
var secondaryTexturesSize = reader.ReadInt32();
|
var secondaryTexturesSize = reader.ReadInt32();
|
||||||
secondaryTextures = new SecondarySpriteTexture[secondaryTexturesSize];
|
secondaryTextures = new List<SecondarySpriteTexture>();
|
||||||
for (int i = 0; i < secondaryTexturesSize; i++)
|
for (var i = 0; i < secondaryTexturesSize; i++)
|
||||||
{
|
{
|
||||||
secondaryTextures[i] = new SecondarySpriteTexture(reader);
|
secondaryTextures.Add(new SecondarySpriteTexture(reader));
|
||||||
}
|
}
|
||||||
reader.AlignStream();
|
reader.AlignStream();
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public sealed class SpriteAtlas : NamedObject
|
public sealed class SpriteAtlas : NamedObject
|
||||||
{
|
{
|
||||||
public PPtr<Sprite>[] m_PackedSprites;
|
public List<PPtr<Sprite>> m_PackedSprites;
|
||||||
[JsonConverter(typeof(JsonConverterHelper.RenderDataMapConverter))]
|
[JsonConverter(typeof(JsonConverterHelper.RenderDataMapConverter))]
|
||||||
public Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData> m_RenderDataMap;
|
public Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData> m_RenderDataMap;
|
||||||
public bool m_IsVariant;
|
public bool m_IsVariant;
|
||||||
@@ -53,17 +53,17 @@ namespace AssetStudio
|
|||||||
public SpriteAtlas(ObjectReader reader) : base(reader)
|
public SpriteAtlas(ObjectReader reader) : base(reader)
|
||||||
{
|
{
|
||||||
var m_PackedSpritesSize = reader.ReadInt32();
|
var m_PackedSpritesSize = reader.ReadInt32();
|
||||||
m_PackedSprites = new PPtr<Sprite>[m_PackedSpritesSize];
|
m_PackedSprites = new List<PPtr<Sprite>>();
|
||||||
for (int i = 0; i < m_PackedSpritesSize; i++)
|
for (var i = 0; i < m_PackedSpritesSize; i++)
|
||||||
{
|
{
|
||||||
m_PackedSprites[i] = new PPtr<Sprite>(reader);
|
m_PackedSprites.Add(new PPtr<Sprite>(reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
var m_PackedSpriteNamesToIndex = reader.ReadStringArray();
|
var m_PackedSpriteNamesToIndex = reader.ReadStringArray();
|
||||||
|
|
||||||
var m_RenderDataMapSize = reader.ReadInt32();
|
var m_RenderDataMapSize = reader.ReadInt32();
|
||||||
m_RenderDataMap = new Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData>(m_RenderDataMapSize);
|
m_RenderDataMap = new Dictionary<KeyValuePair<Guid, long>, SpriteAtlasData>();
|
||||||
for (int i = 0; i < m_RenderDataMapSize; i++)
|
for (var i = 0; i < m_RenderDataMapSize; i++)
|
||||||
{
|
{
|
||||||
var first = new Guid(reader.ReadBytes(16));
|
var first = new Guid(reader.ReadBytes(16));
|
||||||
var second = reader.ReadInt64();
|
var second = reader.ReadInt64();
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace AssetStudio
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
|
||||||
{
|
{
|
||||||
public sealed class TextAsset : NamedObject
|
public sealed class TextAsset : NamedObject
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
@@ -10,7 +7,7 @@ namespace AssetStudio
|
|||||||
public Quaternion m_LocalRotation;
|
public Quaternion m_LocalRotation;
|
||||||
public Vector3 m_LocalPosition;
|
public Vector3 m_LocalPosition;
|
||||||
public Vector3 m_LocalScale;
|
public Vector3 m_LocalScale;
|
||||||
public PPtr<Transform>[] m_Children;
|
public List<PPtr<Transform>> m_Children;
|
||||||
public PPtr<Transform> m_Father;
|
public PPtr<Transform> m_Father;
|
||||||
|
|
||||||
public Transform(ObjectReader reader) : base(reader)
|
public Transform(ObjectReader reader) : base(reader)
|
||||||
@@ -20,10 +17,10 @@ namespace AssetStudio
|
|||||||
m_LocalScale = reader.ReadVector3();
|
m_LocalScale = reader.ReadVector3();
|
||||||
|
|
||||||
int m_ChildrenCount = reader.ReadInt32();
|
int m_ChildrenCount = reader.ReadInt32();
|
||||||
m_Children = new PPtr<Transform>[m_ChildrenCount];
|
m_Children = new List<PPtr<Transform>>();
|
||||||
for (int i = 0; i < m_ChildrenCount; i++)
|
for (var i = 0; i < m_ChildrenCount; i++)
|
||||||
{
|
{
|
||||||
m_Children[i] = new PPtr<Transform>(reader);
|
m_Children.Add(new PPtr<Transform>(reader));
|
||||||
}
|
}
|
||||||
m_Father = new PPtr<Transform>(reader);
|
m_Father = new PPtr<Transform>(reader);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,10 +49,9 @@ namespace AssetStudio
|
|||||||
if (version >= 2020) //2020.1 and up
|
if (version >= 2020) //2020.1 and up
|
||||||
{
|
{
|
||||||
var m_VideoShadersSize = reader.ReadInt32();
|
var m_VideoShadersSize = reader.ReadInt32();
|
||||||
var m_VideoShaders = new PPtr<Shader>[m_VideoShadersSize];
|
for (var i = 0; i < m_VideoShadersSize; i++)
|
||||||
for (int i = 0; i < m_VideoShadersSize; i++)
|
|
||||||
{
|
{
|
||||||
m_VideoShaders[i] = new PPtr<Shader>(reader);
|
var m_VideoShaders = new PPtr<Shader>(reader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_ExternalResources = new StreamedResource(reader);
|
m_ExternalResources = new StreamedResource(reader);
|
||||||
|
|||||||
@@ -1,18 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
public static class BinaryReaderExtensions
|
public static class BinaryReaderExtensions
|
||||||
{
|
{
|
||||||
public static void AlignStream(this BinaryReader reader)
|
public static void AlignStream(this BinaryReader reader, int alignment = 4)
|
||||||
{
|
|
||||||
reader.AlignStream(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void AlignStream(this BinaryReader reader, int alignment)
|
|
||||||
{
|
{
|
||||||
var pos = reader.BaseStream.Position;
|
var pos = reader.BaseStream.Position;
|
||||||
var mod = pos % alignment;
|
var mod = pos % alignment;
|
||||||
@@ -25,7 +21,9 @@ namespace AssetStudio
|
|||||||
public static string ReadAlignedString(this BinaryReader reader)
|
public static string ReadAlignedString(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
var length = reader.ReadInt32();
|
var length = reader.ReadInt32();
|
||||||
if (length > 0 && length <= reader.BaseStream.Length - reader.BaseStream.Position)
|
if (length > reader.BaseStream.Length - reader.BaseStream.Position)
|
||||||
|
throw new EndOfStreamException();
|
||||||
|
if (length > 0)
|
||||||
{
|
{
|
||||||
var stringData = reader.ReadBytes(length);
|
var stringData = reader.ReadBytes(length);
|
||||||
var result = Encoding.UTF8.GetString(stringData);
|
var result = Encoding.UTF8.GetString(stringData);
|
||||||
@@ -102,24 +100,22 @@ namespace AssetStudio
|
|||||||
return new Color(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
return new Color(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix4x4 ReadMatrix(this BinaryReader reader)
|
private static T[] ReadArray<T>(BinaryReader reader, int byteLen) where T : struct
|
||||||
{
|
{
|
||||||
return new Matrix4x4(reader.ReadSingleArray(16));
|
if (byteLen < 0)
|
||||||
}
|
throw new ArgumentOutOfRangeException(nameof(byteLen));
|
||||||
|
if (reader.BaseStream.Position + byteLen > reader.BaseStream.Length)
|
||||||
|
throw new EndOfStreamException();
|
||||||
|
|
||||||
|
var bytes = reader.ReadBytes(byteLen);
|
||||||
|
|
||||||
private static T[] ReadArray<T>(Func<T> del, int length)
|
var span = MemoryMarshal.Cast<byte, T>(bytes);
|
||||||
{
|
return span.ToArray();
|
||||||
var array = new T[length];
|
|
||||||
for (int i = 0; i < length; i++)
|
|
||||||
{
|
|
||||||
array[i] = del();
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool[] ReadBooleanArray(this BinaryReader reader)
|
public static bool[] ReadBooleanArray(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadBoolean, reader.ReadInt32());
|
return ReadArray<bool>(reader, reader.ReadInt32());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] ReadUInt8Array(this BinaryReader reader)
|
public static byte[] ReadUInt8Array(this BinaryReader reader)
|
||||||
@@ -129,62 +125,65 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public static ushort[] ReadUInt16Array(this BinaryReader reader)
|
public static ushort[] ReadUInt16Array(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadUInt16, reader.ReadInt32());
|
return ReadArray<ushort>(reader, reader.ReadInt32() * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int[] ReadInt32Array(this BinaryReader reader)
|
public static int[] ReadInt32Array(this BinaryReader reader, int length = -1)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadInt32, reader.ReadInt32());
|
if (length == -1)
|
||||||
|
length = reader.ReadInt32();
|
||||||
|
return ReadArray<int>(reader, length * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int[] ReadInt32Array(this BinaryReader reader, int length)
|
public static uint[] ReadUInt32Array(this BinaryReader reader, int length = -1)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadInt32, length);
|
if (length == -1)
|
||||||
}
|
length = reader.ReadInt32();
|
||||||
|
return ReadArray<uint>(reader, length * 4);
|
||||||
public static uint[] ReadUInt32Array(this BinaryReader reader)
|
|
||||||
{
|
|
||||||
return ReadArray(reader.ReadUInt32, reader.ReadInt32());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static uint[][] ReadUInt32ArrayArray(this BinaryReader reader)
|
public static uint[][] ReadUInt32ArrayArray(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadUInt32Array, reader.ReadInt32());
|
var length = reader.ReadInt32();
|
||||||
|
var list = new List<uint[]>();
|
||||||
|
for (var i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
list.Add(ReadArray<uint>(reader, reader.ReadInt32() * 4));
|
||||||
|
}
|
||||||
|
return list.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static uint[] ReadUInt32Array(this BinaryReader reader, int length)
|
public static float[] ReadSingleArray(this BinaryReader reader, int length = -1)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadUInt32, length);
|
if (length == -1)
|
||||||
}
|
length = reader.ReadInt32();
|
||||||
|
return ReadArray<float>(reader, length * 4);
|
||||||
public static float[] ReadSingleArray(this BinaryReader reader)
|
|
||||||
{
|
|
||||||
return ReadArray(reader.ReadSingle, reader.ReadInt32());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float[] ReadSingleArray(this BinaryReader reader, int length)
|
|
||||||
{
|
|
||||||
return ReadArray(reader.ReadSingle, length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string[] ReadStringArray(this BinaryReader reader)
|
public static string[] ReadStringArray(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadAlignedString, reader.ReadInt32());
|
var length = reader.ReadInt32();
|
||||||
|
var list = new List<string>();
|
||||||
|
for (var i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
list.Add(reader.ReadAlignedString());
|
||||||
|
}
|
||||||
|
return list.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector2[] ReadVector2Array(this BinaryReader reader)
|
public static Vector2[] ReadVector2Array(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadVector2, reader.ReadInt32());
|
return ReadArray<Vector2>(reader, reader.ReadInt32() * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector4[] ReadVector4Array(this BinaryReader reader)
|
public static Vector4[] ReadVector4Array(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadVector4, reader.ReadInt32());
|
return ReadArray<Vector4>(reader, reader.ReadInt32() * 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix4x4[] ReadMatrixArray(this BinaryReader reader)
|
public static Matrix4x4[] ReadMatrixArray(this BinaryReader reader)
|
||||||
{
|
{
|
||||||
return ReadArray(reader.ReadMatrix, reader.ReadInt32());
|
return ReadArray<Matrix4x4>(reader, reader.ReadInt32() * 64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace AssetStudio
|
namespace AssetStudio
|
||||||
{
|
{
|
||||||
@@ -16,6 +17,8 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public UnityVersion version => assetsFile.version;
|
public UnityVersion version => assetsFile.version;
|
||||||
|
|
||||||
|
public long Remaining => byteStart + byteSize - Position;
|
||||||
|
|
||||||
public ObjectReader(EndianBinaryReader reader, SerializedFile assetsFile, ObjectInfo objectInfo) : base(reader.BaseStream, reader.Endian)
|
public ObjectReader(EndianBinaryReader reader, SerializedFile assetsFile, ObjectInfo objectInfo) : base(reader.BaseStream, reader.Endian)
|
||||||
{
|
{
|
||||||
this.assetsFile = assetsFile;
|
this.assetsFile = assetsFile;
|
||||||
@@ -36,6 +39,12 @@ namespace AssetStudio
|
|||||||
m_Version = assetsFile.header.m_Version;
|
m_Version = assetsFile.header.m_Version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ThrowIfTooLarge(float val)
|
||||||
|
{
|
||||||
|
if (val < 0 || val > Remaining)
|
||||||
|
throw new EndOfStreamException();
|
||||||
|
}
|
||||||
|
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
Position = byteStart;
|
Position = byteStart;
|
||||||
|
|||||||
@@ -112,8 +112,8 @@ namespace AssetStudio
|
|||||||
|
|
||||||
// Read Types
|
// Read Types
|
||||||
int typeCount = reader.ReadInt32();
|
int typeCount = reader.ReadInt32();
|
||||||
m_Types = new List<SerializedType>(typeCount);
|
m_Types = new List<SerializedType>();
|
||||||
for (int i = 0; i < typeCount; i++)
|
for (var i = 0; i < typeCount; i++)
|
||||||
{
|
{
|
||||||
m_Types.Add(ReadSerializedType(false));
|
m_Types.Add(ReadSerializedType(false));
|
||||||
}
|
}
|
||||||
@@ -125,10 +125,10 @@ namespace AssetStudio
|
|||||||
|
|
||||||
// Read Objects
|
// Read Objects
|
||||||
int objectCount = reader.ReadInt32();
|
int objectCount = reader.ReadInt32();
|
||||||
m_Objects = new List<ObjectInfo>(objectCount);
|
m_Objects = new List<ObjectInfo>();
|
||||||
Objects = new List<Object>(objectCount);
|
Objects = new List<Object>();
|
||||||
ObjectsDic = new Dictionary<long, Object>(objectCount);
|
ObjectsDic = new Dictionary<long, Object>();
|
||||||
for (int i = 0; i < objectCount; i++)
|
for (var i = 0; i < objectCount; i++)
|
||||||
{
|
{
|
||||||
var objectInfo = new ObjectInfo();
|
var objectInfo = new ObjectInfo();
|
||||||
if (bigIDEnabled != 0)
|
if (bigIDEnabled != 0)
|
||||||
@@ -184,8 +184,8 @@ namespace AssetStudio
|
|||||||
if (header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex)
|
if (header.m_Version >= SerializedFileFormatVersion.HasScriptTypeIndex)
|
||||||
{
|
{
|
||||||
int scriptCount = reader.ReadInt32();
|
int scriptCount = reader.ReadInt32();
|
||||||
m_ScriptTypes = new List<LocalSerializedObjectIdentifier>(scriptCount);
|
m_ScriptTypes = new List<LocalSerializedObjectIdentifier>();
|
||||||
for (int i = 0; i < scriptCount; i++)
|
for (var i = 0; i < scriptCount; i++)
|
||||||
{
|
{
|
||||||
var m_ScriptType = new LocalSerializedObjectIdentifier();
|
var m_ScriptType = new LocalSerializedObjectIdentifier();
|
||||||
m_ScriptType.localSerializedFileIndex = reader.ReadInt32();
|
m_ScriptType.localSerializedFileIndex = reader.ReadInt32();
|
||||||
@@ -203,8 +203,8 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
int externalsCount = reader.ReadInt32();
|
int externalsCount = reader.ReadInt32();
|
||||||
m_Externals = new List<FileIdentifier>(externalsCount);
|
m_Externals = new List<FileIdentifier>();
|
||||||
for (int i = 0; i < externalsCount; i++)
|
for (var i = 0; i < externalsCount; i++)
|
||||||
{
|
{
|
||||||
var m_External = new FileIdentifier();
|
var m_External = new FileIdentifier();
|
||||||
if (header.m_Version >= SerializedFileFormatVersion.Unknown_6)
|
if (header.m_Version >= SerializedFileFormatVersion.Unknown_6)
|
||||||
@@ -224,8 +224,8 @@ namespace AssetStudio
|
|||||||
if (header.m_Version >= SerializedFileFormatVersion.SupportsRefObject)
|
if (header.m_Version >= SerializedFileFormatVersion.SupportsRefObject)
|
||||||
{
|
{
|
||||||
int refTypesCount = reader.ReadInt32();
|
int refTypesCount = reader.ReadInt32();
|
||||||
m_RefTypes = new List<SerializedType>(refTypesCount);
|
m_RefTypes = new List<SerializedType>();
|
||||||
for (int i = 0; i < refTypesCount; i++)
|
for (var i = 0; i < refTypesCount; i++)
|
||||||
{
|
{
|
||||||
m_RefTypes.Add(ReadSerializedType(true));
|
m_RefTypes.Add(ReadSerializedType(true));
|
||||||
}
|
}
|
||||||
@@ -322,7 +322,7 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
int childrenCount = reader.ReadInt32();
|
int childrenCount = reader.ReadInt32();
|
||||||
for (int i = 0; i < childrenCount; i++)
|
for (var i = 0; i < childrenCount; i++)
|
||||||
{
|
{
|
||||||
ReadTypeTree(m_Type, level + 1);
|
ReadTypeTree(m_Type, level + 1);
|
||||||
}
|
}
|
||||||
@@ -332,7 +332,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
int numberOfNodes = reader.ReadInt32();
|
int numberOfNodes = reader.ReadInt32();
|
||||||
int stringBufferSize = reader.ReadInt32();
|
int stringBufferSize = reader.ReadInt32();
|
||||||
for (int i = 0; i < numberOfNodes; i++)
|
for (var i = 0; i < numberOfNodes; i++)
|
||||||
{
|
{
|
||||||
var typeTreeNode = new TypeTreeNode();
|
var typeTreeNode = new TypeTreeNode();
|
||||||
m_Type.m_Nodes.Add(typeTreeNode);
|
m_Type.m_Nodes.Add(typeTreeNode);
|
||||||
@@ -353,7 +353,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
using (var stringBufferReader = new BinaryReader(new MemoryStream(m_Type.m_StringBuffer)))
|
using (var stringBufferReader = new BinaryReader(new MemoryStream(m_Type.m_StringBuffer)))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < numberOfNodes; i++)
|
for (var i = 0; i < numberOfNodes; i++)
|
||||||
{
|
{
|
||||||
var m_Node = m_Type.m_Nodes[i];
|
var m_Node = m_Type.m_Nodes[i];
|
||||||
m_Node.m_Type = ReadString(stringBufferReader, m_Node.m_TypeStrOffset);
|
m_Node.m_Type = ReadString(stringBufferReader, m_Node.m_TypeStrOffset);
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ namespace AssetStudioCLI
|
|||||||
#region Face
|
#region Face
|
||||||
|
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (var i = 0; i < m_Mesh.m_SubMeshes.Length; i++)
|
for (var i = 0; i < m_Mesh.m_SubMeshes.Count; i++)
|
||||||
{
|
{
|
||||||
sb.AppendLine($"g {m_Mesh.m_Name}_{i}");
|
sb.AppendLine($"g {m_Mesh.m_Name}_{i}");
|
||||||
int indexCount = (int)m_Mesh.m_SubMeshes[i].indexCount;
|
int indexCount = (int)m_Mesh.m_SubMeshes[i].indexCount;
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ namespace AssetStudioCLI
|
|||||||
var i = 0;
|
var i = 0;
|
||||||
foreach (var assetsFile in assetsManager.assetsFileList)
|
foreach (var assetsFile in assetsManager.assetsFileList)
|
||||||
{
|
{
|
||||||
var preloadTable = Array.Empty<PPtr<AssetStudio.Object>>();
|
var preloadTable = new List<PPtr<AssetStudio.Object>>();
|
||||||
foreach (var asset in assetsFile.Objects)
|
foreach (var asset in assetsFile.Objects)
|
||||||
{
|
{
|
||||||
var assetItem = new AssetItem(asset);
|
var assetItem = new AssetItem(asset);
|
||||||
@@ -221,7 +221,7 @@ namespace AssetStudioCLI
|
|||||||
foreach (var m_Container in m_AssetBundle.m_Container)
|
foreach (var m_Container in m_AssetBundle.m_Container)
|
||||||
{
|
{
|
||||||
var preloadIndex = m_Container.Value.preloadIndex;
|
var preloadIndex = m_Container.Value.preloadIndex;
|
||||||
var preloadSize = isStreamedSceneAssetBundle ? preloadTable.Length : m_Container.Value.preloadSize;
|
var preloadSize = isStreamedSceneAssetBundle ? preloadTable.Count : m_Container.Value.preloadSize;
|
||||||
var preloadEnd = preloadIndex + preloadSize;
|
var preloadEnd = preloadIndex + preloadSize;
|
||||||
for (var k = preloadIndex; k < preloadEnd; k++)
|
for (var k = preloadIndex; k < preloadEnd; k++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ namespace AssetStudioGUI
|
|||||||
|
|
||||||
#region Face
|
#region Face
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (var i = 0; i < m_Mesh.m_SubMeshes.Length; i++)
|
for (var i = 0; i < m_Mesh.m_SubMeshes.Count; i++)
|
||||||
{
|
{
|
||||||
sb.AppendLine($"g {m_Mesh.m_Name}_{i}");
|
sb.AppendLine($"g {m_Mesh.m_Name}_{i}");
|
||||||
int indexCount = (int)m_Mesh.m_SubMeshes[i].indexCount;
|
int indexCount = (int)m_Mesh.m_SubMeshes[i].indexCount;
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ namespace AssetStudioGUI
|
|||||||
Progress.Reset();
|
Progress.Reset();
|
||||||
foreach (var assetsFile in assetsManager.assetsFileList)
|
foreach (var assetsFile in assetsManager.assetsFileList)
|
||||||
{
|
{
|
||||||
var preloadTable = Array.Empty<PPtr<Object>>();
|
var preloadTable = new List<PPtr<Object>>();
|
||||||
|
|
||||||
foreach (var asset in assetsFile.Objects)
|
foreach (var asset in assetsFile.Objects)
|
||||||
{
|
{
|
||||||
@@ -333,7 +333,7 @@ namespace AssetStudioGUI
|
|||||||
{
|
{
|
||||||
var preloadIndex = m_Container.Value.preloadIndex;
|
var preloadIndex = m_Container.Value.preloadIndex;
|
||||||
var preloadSize = isStreamedSceneAssetBundle
|
var preloadSize = isStreamedSceneAssetBundle
|
||||||
? preloadTable.Length
|
? preloadTable.Count
|
||||||
: m_Container.Value.preloadSize;
|
: m_Container.Value.preloadSize;
|
||||||
var preloadEnd = preloadIndex + preloadSize;
|
var preloadEnd = preloadIndex + preloadSize;
|
||||||
for (var k = preloadIndex; k < preloadEnd; k++)
|
for (var k = preloadIndex; k < preloadEnd; k++)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace CubismLive2DExtractor
|
|||||||
for (int frameIndex = 1; frameIndex < streamedFrames.Count - 1; frameIndex++)
|
for (int frameIndex = 1; frameIndex < streamedFrames.Count - 1; frameIndex++)
|
||||||
{
|
{
|
||||||
var frame = streamedFrames[frameIndex];
|
var frame = streamedFrames[frameIndex];
|
||||||
for (int curveIndex = 0; curveIndex < frame.keyList.Length; curveIndex++)
|
for (int curveIndex = 0; curveIndex < frame.keyList.Count; curveIndex++)
|
||||||
{
|
{
|
||||||
ReadStreamedData(iAnim, m_ClipBindingConstant, frame.time, frame.keyList[curveIndex]);
|
ReadStreamedData(iAnim, m_ClipBindingConstant, frame.time, frame.keyList[curveIndex]);
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ namespace CubismLive2DExtractor
|
|||||||
GetLive2dPath(binding, out var target, out var boneName);
|
GetLive2dPath(binding, out var target, out var boneName);
|
||||||
if (string.IsNullOrEmpty(boneName))
|
if (string.IsNullOrEmpty(boneName))
|
||||||
{
|
{
|
||||||
Logger.Warning($"[Motion Converter] \"{iAnim.Name}\" read fail on binding {Array.IndexOf(m_ClipBindingConstant.genericBindings, binding)}");
|
Logger.Warning($"[Motion Converter] \"{iAnim.Name}\" read fail on binding {m_ClipBindingConstant.genericBindings.FindIndex(x => x == binding)}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ namespace CubismLive2DExtractor
|
|||||||
GetLive2dPath(binding, out var target, out var boneName);
|
GetLive2dPath(binding, out var target, out var boneName);
|
||||||
if (string.IsNullOrEmpty(boneName))
|
if (string.IsNullOrEmpty(boneName))
|
||||||
{
|
{
|
||||||
Logger.Warning($"[Motion Converter] \"{iAnim.Name}\" read fail on binding {Array.IndexOf(m_ClipBindingConstant.genericBindings, binding)}");
|
Logger.Warning($"[Motion Converter] \"{iAnim.Name}\" read fail on binding {m_ClipBindingConstant.genericBindings.FindIndex(x => x == binding)}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ namespace CubismLive2DExtractor
|
|||||||
// [Optional] Time of the overall Fade-Out for easing in seconds.
|
// [Optional] Time of the overall Fade-Out for easing in seconds.
|
||||||
FadeOutTime = fadeMotion.FadeOutTime,
|
FadeOutTime = fadeMotion.FadeOutTime,
|
||||||
// The total number of curves.
|
// The total number of curves.
|
||||||
CurveCount = (int)fadeMotion.ParameterCurves.LongCount(x => x.m_Curve.Length > 0),
|
CurveCount = (int)fadeMotion.ParameterCurves.LongCount(x => x.m_Curve.Count > 0),
|
||||||
// [Optional] The total number of UserData.
|
// [Optional] The total number of UserData.
|
||||||
UserDataCount = 0
|
UserDataCount = 0
|
||||||
};
|
};
|
||||||
@@ -128,7 +128,7 @@ namespace CubismLive2DExtractor
|
|||||||
var actualCurveCount = 0;
|
var actualCurveCount = 0;
|
||||||
for (var i = 0; i < fadeMotion.ParameterCurves.Length; i++)
|
for (var i = 0; i < fadeMotion.ParameterCurves.Length; i++)
|
||||||
{
|
{
|
||||||
if (fadeMotion.ParameterCurves[i].m_Curve.Length == 0)
|
if (fadeMotion.ParameterCurves[i].m_Curve.Count == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
string target;
|
string target;
|
||||||
@@ -174,7 +174,7 @@ namespace CubismLive2DExtractor
|
|||||||
fadeMotion.ParameterCurves[i].m_Curve[0].value
|
fadeMotion.ParameterCurves[i].m_Curve[0].value
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
for (var j = 1; j < fadeMotion.ParameterCurves[i].m_Curve.Length; j++)
|
for (var j = 1; j < fadeMotion.ParameterCurves[i].m_Curve.Count; j++)
|
||||||
{
|
{
|
||||||
var curve = fadeMotion.ParameterCurves[i].m_Curve[j];
|
var curve = fadeMotion.ParameterCurves[i].m_Curve[j];
|
||||||
var preCurve = fadeMotion.ParameterCurves[i].m_Curve[j - 1];
|
var preCurve = fadeMotion.ParameterCurves[i].m_Curve[j - 1];
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
private ImportedFrame ConvertTransform(Transform trans)
|
private ImportedFrame ConvertTransform(Transform trans)
|
||||||
{
|
{
|
||||||
var frame = new ImportedFrame(trans.m_Children.Length);
|
var frame = new ImportedFrame(trans.m_Children.Count);
|
||||||
transformDictionary.Add(trans, frame);
|
transformDictionary.Add(trans, frame);
|
||||||
trans.m_GameObject.TryGet(out var m_GameObject);
|
trans.m_GameObject.TryGet(out var m_GameObject);
|
||||||
frame.Name = m_GameObject.m_Name;
|
frame.Name = m_GameObject.m_Name;
|
||||||
@@ -286,7 +286,7 @@ namespace AssetStudio
|
|||||||
iMesh.hasColor = mesh.m_Colors?.Length > 0;
|
iMesh.hasColor = mesh.m_Colors?.Length > 0;
|
||||||
|
|
||||||
int firstFace = 0;
|
int firstFace = 0;
|
||||||
for (int i = 0; i < mesh.m_SubMeshes.Length; i++)
|
for (int i = 0; i < mesh.m_SubMeshes.Count; i++)
|
||||||
{
|
{
|
||||||
int numFaces = (int)mesh.m_SubMeshes[i].indexCount / 3;
|
int numFaces = (int)mesh.m_SubMeshes[i].indexCount / 3;
|
||||||
if (subHashSet.Count > 0 && !subHashSet.Contains(i))
|
if (subHashSet.Count > 0 && !subHashSet.Contains(i))
|
||||||
@@ -297,7 +297,7 @@ namespace AssetStudio
|
|||||||
var submesh = mesh.m_SubMeshes[i];
|
var submesh = mesh.m_SubMeshes[i];
|
||||||
var iSubmesh = new ImportedSubmesh();
|
var iSubmesh = new ImportedSubmesh();
|
||||||
Material mat = null;
|
Material mat = null;
|
||||||
if (i - firstSubMesh < meshR.m_Materials.Length)
|
if (i - firstSubMesh < meshR.m_Materials.Count)
|
||||||
{
|
{
|
||||||
if (meshR.m_Materials[i - firstSubMesh].TryGet(out var m_Material))
|
if (meshR.m_Materials[i - firstSubMesh].TryGet(out var m_Material))
|
||||||
{
|
{
|
||||||
@@ -410,16 +410,16 @@ namespace AssetStudio
|
|||||||
* 2 - m_BoneNameHashes
|
* 2 - m_BoneNameHashes
|
||||||
*/
|
*/
|
||||||
var boneType = 0;
|
var boneType = 0;
|
||||||
if (sMesh.m_Bones.Length > 0)
|
if (sMesh.m_Bones.Count > 0)
|
||||||
{
|
{
|
||||||
if (sMesh.m_Bones.Length == mesh.m_BindPose.Length)
|
if (sMesh.m_Bones.Count == mesh.m_BindPose.Length)
|
||||||
{
|
{
|
||||||
var verifiedBoneCount = sMesh.m_Bones.Count(x => x.TryGet(out _));
|
var verifiedBoneCount = sMesh.m_Bones.Count(x => x.TryGet(out _));
|
||||||
if (verifiedBoneCount > 0)
|
if (verifiedBoneCount > 0)
|
||||||
{
|
{
|
||||||
boneType = 1;
|
boneType = 1;
|
||||||
}
|
}
|
||||||
if (verifiedBoneCount != sMesh.m_Bones.Length)
|
if (verifiedBoneCount != sMesh.m_Bones.Count)
|
||||||
{
|
{
|
||||||
//尝试使用m_BoneNameHashes 4.3 and up
|
//尝试使用m_BoneNameHashes 4.3 and up
|
||||||
if (mesh.m_BindPose.Length > 0 && (mesh.m_BindPose.Length == mesh.m_BoneNameHashes?.Length))
|
if (mesh.m_BindPose.Length > 0 && (mesh.m_BindPose.Length == mesh.m_BoneNameHashes?.Length))
|
||||||
@@ -449,7 +449,7 @@ namespace AssetStudio
|
|||||||
|
|
||||||
if (boneType == 1)
|
if (boneType == 1)
|
||||||
{
|
{
|
||||||
var boneCount = sMesh.m_Bones.Length;
|
var boneCount = sMesh.m_Bones.Count;
|
||||||
iMesh.BoneList = new List<ImportedBone>(boneCount);
|
iMesh.BoneList = new List<ImportedBone>(boneCount);
|
||||||
for (int i = 0; i < boneCount; i++)
|
for (int i = 0; i < boneCount; i++)
|
||||||
{
|
{
|
||||||
@@ -480,13 +480,13 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Morphs
|
//Morphs
|
||||||
if (mesh.m_Shapes?.channels?.Length > 0)
|
if (mesh.m_Shapes?.channels?.Count > 0)
|
||||||
{
|
{
|
||||||
var morph = new ImportedMorph();
|
var morph = new ImportedMorph();
|
||||||
MorphList.Add(morph);
|
MorphList.Add(morph);
|
||||||
morph.Path = iMesh.Path;
|
morph.Path = iMesh.Path;
|
||||||
morph.Channels = new List<ImportedMorphChannel>(mesh.m_Shapes.channels.Length);
|
morph.Channels = new List<ImportedMorphChannel>(mesh.m_Shapes.channels.Count);
|
||||||
for (int i = 0; i < mesh.m_Shapes.channels.Length; i++)
|
for (var i = 0; i < mesh.m_Shapes.channels.Count; i++)
|
||||||
{
|
{
|
||||||
var channel = new ImportedMorphChannel();
|
var channel = new ImportedMorphChannel();
|
||||||
morph.Channels.Add(channel);
|
morph.Channels.Add(channel);
|
||||||
@@ -501,7 +501,7 @@ namespace AssetStudio
|
|||||||
channel.Name = shapeChannel.name.Split('.').Last();
|
channel.Name = shapeChannel.name.Split('.').Last();
|
||||||
channel.KeyframeList = new List<ImportedMorphKeyframe>(shapeChannel.frameCount);
|
channel.KeyframeList = new List<ImportedMorphKeyframe>(shapeChannel.frameCount);
|
||||||
var frameEnd = shapeChannel.frameIndex + shapeChannel.frameCount;
|
var frameEnd = shapeChannel.frameIndex + shapeChannel.frameCount;
|
||||||
for (int frameIdx = shapeChannel.frameIndex; frameIdx < frameEnd; frameIdx++)
|
for (var frameIdx = shapeChannel.frameIndex; frameIdx < frameEnd; frameIdx++)
|
||||||
{
|
{
|
||||||
var keyframe = new ImportedMorphKeyframe();
|
var keyframe = new ImportedMorphKeyframe();
|
||||||
channel.KeyframeList.Add(keyframe);
|
channel.KeyframeList.Add(keyframe);
|
||||||
@@ -890,7 +890,7 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
var frame = streamedFrames[frameIndex];
|
var frame = streamedFrames[frameIndex];
|
||||||
var streamedValues = frame.keyList.Select(x => x.value).ToArray();
|
var streamedValues = frame.keyList.Select(x => x.value).ToArray();
|
||||||
for (var curveIndex = 0; curveIndex < frame.keyList.Length;)
|
for (var curveIndex = 0; curveIndex < frame.keyList.Count;)
|
||||||
{
|
{
|
||||||
ReadCurveData(iAnim, m_ClipBindingConstant, frame.keyList[curveIndex].index, frame.time, streamedValues, 0, ref curveIndex);
|
ReadCurveData(iAnim, m_ClipBindingConstant, frame.keyList[curveIndex].index, frame.time, streamedValues, 0, ref curveIndex);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using K4os.Compression.LZ4;
|
using K4os.Compression.LZ4;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -138,42 +139,42 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
sb.Append(ConvertSerializedShaderState(m_Passe.m_State));
|
sb.Append(ConvertSerializedShaderState(m_Passe.m_State));
|
||||||
|
|
||||||
if (m_Passe.progVertex.m_SubPrograms.Length > 0)
|
if (m_Passe.progVertex.m_SubPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append("Program \"vp\" {\n");
|
sb.Append("Program \"vp\" {\n");
|
||||||
sb.Append(ConvertSerializedSubPrograms(m_Passe.progVertex.m_SubPrograms, platforms, shaderPrograms));
|
sb.Append(ConvertSerializedSubPrograms(m_Passe.progVertex.m_SubPrograms, platforms, shaderPrograms));
|
||||||
sb.Append("}\n");
|
sb.Append("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Passe.progFragment.m_SubPrograms.Length > 0)
|
if (m_Passe.progFragment.m_SubPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append("Program \"fp\" {\n");
|
sb.Append("Program \"fp\" {\n");
|
||||||
sb.Append(ConvertSerializedSubPrograms(m_Passe.progFragment.m_SubPrograms, platforms, shaderPrograms));
|
sb.Append(ConvertSerializedSubPrograms(m_Passe.progFragment.m_SubPrograms, platforms, shaderPrograms));
|
||||||
sb.Append("}\n");
|
sb.Append("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Passe.progGeometry.m_SubPrograms.Length > 0)
|
if (m_Passe.progGeometry.m_SubPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append("Program \"gp\" {\n");
|
sb.Append("Program \"gp\" {\n");
|
||||||
sb.Append(ConvertSerializedSubPrograms(m_Passe.progGeometry.m_SubPrograms, platforms, shaderPrograms));
|
sb.Append(ConvertSerializedSubPrograms(m_Passe.progGeometry.m_SubPrograms, platforms, shaderPrograms));
|
||||||
sb.Append("}\n");
|
sb.Append("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Passe.progHull.m_SubPrograms.Length > 0)
|
if (m_Passe.progHull.m_SubPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append("Program \"hp\" {\n");
|
sb.Append("Program \"hp\" {\n");
|
||||||
sb.Append(ConvertSerializedSubPrograms(m_Passe.progHull.m_SubPrograms, platforms, shaderPrograms));
|
sb.Append(ConvertSerializedSubPrograms(m_Passe.progHull.m_SubPrograms, platforms, shaderPrograms));
|
||||||
sb.Append("}\n");
|
sb.Append("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Passe.progDomain.m_SubPrograms.Length > 0)
|
if (m_Passe.progDomain.m_SubPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append("Program \"dp\" {\n");
|
sb.Append("Program \"dp\" {\n");
|
||||||
sb.Append(ConvertSerializedSubPrograms(m_Passe.progDomain.m_SubPrograms, platforms, shaderPrograms));
|
sb.Append(ConvertSerializedSubPrograms(m_Passe.progDomain.m_SubPrograms, platforms, shaderPrograms));
|
||||||
sb.Append("}\n");
|
sb.Append("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Passe.progRayTracing?.m_SubPrograms.Length > 0)
|
if (m_Passe.progRayTracing?.m_SubPrograms.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append("Program \"rtp\" {\n");
|
sb.Append("Program \"rtp\" {\n");
|
||||||
sb.Append(ConvertSerializedSubPrograms(m_Passe.progRayTracing.m_SubPrograms, platforms, shaderPrograms));
|
sb.Append(ConvertSerializedSubPrograms(m_Passe.progRayTracing.m_SubPrograms, platforms, shaderPrograms));
|
||||||
@@ -185,7 +186,7 @@ namespace AssetStudio
|
|||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string ConvertSerializedSubPrograms(SerializedSubProgram[] m_SubPrograms, ShaderCompilerPlatform[] platforms, ShaderProgram[] shaderPrograms)
|
private static string ConvertSerializedSubPrograms(List<SerializedSubProgram> m_SubPrograms, ShaderCompilerPlatform[] platforms, ShaderProgram[] shaderPrograms)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var groups = m_SubPrograms.GroupBy(x => x.m_BlobIndex);
|
var groups = m_SubPrograms.GroupBy(x => x.m_BlobIndex);
|
||||||
@@ -638,7 +639,7 @@ namespace AssetStudio
|
|||||||
private static string ConvertSerializedTagMap(SerializedTagMap m_Tags, int intent)
|
private static string ConvertSerializedTagMap(SerializedTagMap m_Tags, int intent)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
if (m_Tags.tags.Length > 0)
|
if (m_Tags.tags.Count > 0)
|
||||||
{
|
{
|
||||||
sb.Append(new string(' ', intent));
|
sb.Append(new string(' ', intent));
|
||||||
sb.Append("Tags { ");
|
sb.Append("Tags { ");
|
||||||
|
|||||||
Reference in New Issue
Block a user