mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
- export mesh deformers with dummies or bones
- FBX code re-arranged to get object count - changed the way FBX ASCII lines are split at every ~2000 chars - added option to export tangents - fixed a problem with treeview continuous search
This commit is contained in:
parent
93ebc67841
commit
235b74a9cd
BIN
Unity Studio/7zip/7z.dll
Normal file
BIN
Unity Studio/7zip/7z.dll
Normal file
Binary file not shown.
@ -53,20 +53,20 @@ namespace Unity_Studio
|
||||
|
||||
switch (fileGen)
|
||||
{
|
||||
case 6:
|
||||
case 6://2.5.0 - 2.6.1
|
||||
{
|
||||
a_Stream.Position = (dataEnd - tableSize);
|
||||
a_Stream.Position += 1;
|
||||
break;
|
||||
}
|
||||
case 7://Unity 3 beta
|
||||
case 7://3.0.0 beta
|
||||
{
|
||||
a_Stream.Position = (dataEnd - tableSize);
|
||||
a_Stream.Position += 1;
|
||||
m_Version = a_Stream.ReadStringToNull();
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
case 8://3.0.0 - 3.4.2
|
||||
{
|
||||
a_Stream.Position = (dataEnd - tableSize);
|
||||
a_Stream.Position += 1;
|
||||
@ -74,15 +74,15 @@ namespace Unity_Studio
|
||||
platform = a_Stream.ReadInt32();
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
case 9://3.5.0 - 4.6.x
|
||||
{
|
||||
a_Stream.Position += 4;//azero
|
||||
m_Version = a_Stream.ReadStringToNull();
|
||||
platform = a_Stream.ReadInt32();
|
||||
break;
|
||||
}
|
||||
case 14:
|
||||
case 15://not fully tested!
|
||||
case 14://5.0.0 beta and final
|
||||
case 15://5.0.1 and up
|
||||
{
|
||||
a_Stream.Position += 4;//azero
|
||||
m_Version = a_Stream.ReadStringToNull();
|
||||
|
@ -29,10 +29,11 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.includeBox = new System.Windows.Forms.GroupBox();
|
||||
this.convertDummies = new System.Windows.Forms.CheckBox();
|
||||
this.embedBox = new System.Windows.Forms.CheckBox();
|
||||
this.lightsBox = new System.Windows.Forms.CheckBox();
|
||||
this.camerasBox = new System.Windows.Forms.CheckBox();
|
||||
this.animationBox = new System.Windows.Forms.CheckBox();
|
||||
this.exportDeformers = new System.Windows.Forms.CheckBox();
|
||||
this.geometryBox = new System.Windows.Forms.GroupBox();
|
||||
this.exportColors = new System.Windows.Forms.CheckBox();
|
||||
this.exportUVs = new System.Windows.Forms.CheckBox();
|
||||
@ -56,23 +57,35 @@
|
||||
// includeBox
|
||||
//
|
||||
this.includeBox.AutoSize = true;
|
||||
this.includeBox.Controls.Add(this.convertDummies);
|
||||
this.includeBox.Controls.Add(this.embedBox);
|
||||
this.includeBox.Controls.Add(this.lightsBox);
|
||||
this.includeBox.Controls.Add(this.camerasBox);
|
||||
this.includeBox.Controls.Add(this.animationBox);
|
||||
this.includeBox.Controls.Add(this.exportDeformers);
|
||||
this.includeBox.Controls.Add(this.geometryBox);
|
||||
this.includeBox.Location = new System.Drawing.Point(13, 13);
|
||||
this.includeBox.Location = new System.Drawing.Point(12, 12);
|
||||
this.includeBox.Name = "includeBox";
|
||||
this.includeBox.Size = new System.Drawing.Size(359, 262);
|
||||
this.includeBox.Size = new System.Drawing.Size(360, 285);
|
||||
this.includeBox.TabIndex = 0;
|
||||
this.includeBox.TabStop = false;
|
||||
this.includeBox.Text = "Include";
|
||||
//
|
||||
// convertDummies
|
||||
//
|
||||
this.convertDummies.AutoSize = true;
|
||||
this.convertDummies.Location = new System.Drawing.Point(14, 178);
|
||||
this.convertDummies.Name = "convertDummies";
|
||||
this.convertDummies.Size = new System.Drawing.Size(205, 17);
|
||||
this.convertDummies.TabIndex = 5;
|
||||
this.convertDummies.Text = "Convert Deforming Dummies to Bones";
|
||||
this.convertDummies.UseVisualStyleBackColor = true;
|
||||
this.convertDummies.CheckedChanged += new System.EventHandler(this.exportOpnions_CheckedChanged);
|
||||
//
|
||||
// embedBox
|
||||
//
|
||||
this.embedBox.AutoSize = true;
|
||||
this.embedBox.Enabled = false;
|
||||
this.embedBox.Location = new System.Drawing.Point(14, 226);
|
||||
this.embedBox.Location = new System.Drawing.Point(14, 249);
|
||||
this.embedBox.Name = "embedBox";
|
||||
this.embedBox.Size = new System.Drawing.Size(91, 17);
|
||||
this.embedBox.TabIndex = 4;
|
||||
@ -83,7 +96,7 @@
|
||||
//
|
||||
this.lightsBox.AutoSize = true;
|
||||
this.lightsBox.Enabled = false;
|
||||
this.lightsBox.Location = new System.Drawing.Point(14, 202);
|
||||
this.lightsBox.Location = new System.Drawing.Point(14, 225);
|
||||
this.lightsBox.Name = "lightsBox";
|
||||
this.lightsBox.Size = new System.Drawing.Size(54, 17);
|
||||
this.lightsBox.TabIndex = 3;
|
||||
@ -94,23 +107,23 @@
|
||||
//
|
||||
this.camerasBox.AutoSize = true;
|
||||
this.camerasBox.Enabled = false;
|
||||
this.camerasBox.Location = new System.Drawing.Point(14, 178);
|
||||
this.camerasBox.Location = new System.Drawing.Point(14, 201);
|
||||
this.camerasBox.Name = "camerasBox";
|
||||
this.camerasBox.Size = new System.Drawing.Size(67, 17);
|
||||
this.camerasBox.TabIndex = 2;
|
||||
this.camerasBox.Text = "Cameras";
|
||||
this.camerasBox.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// animationBox
|
||||
// exportDeformers
|
||||
//
|
||||
this.animationBox.AutoSize = true;
|
||||
this.animationBox.Enabled = false;
|
||||
this.animationBox.Location = new System.Drawing.Point(14, 154);
|
||||
this.animationBox.Name = "animationBox";
|
||||
this.animationBox.Size = new System.Drawing.Size(72, 17);
|
||||
this.animationBox.TabIndex = 1;
|
||||
this.animationBox.Text = "Animation";
|
||||
this.animationBox.UseVisualStyleBackColor = true;
|
||||
this.exportDeformers.AutoSize = true;
|
||||
this.exportDeformers.Location = new System.Drawing.Point(14, 154);
|
||||
this.exportDeformers.Name = "exportDeformers";
|
||||
this.exportDeformers.Size = new System.Drawing.Size(98, 17);
|
||||
this.exportDeformers.TabIndex = 1;
|
||||
this.exportDeformers.Text = "Skin Deformers";
|
||||
this.exportDeformers.UseVisualStyleBackColor = true;
|
||||
this.exportDeformers.CheckedChanged += new System.EventHandler(this.exportDeformers_CheckedChanged);
|
||||
//
|
||||
// geometryBox
|
||||
//
|
||||
@ -155,7 +168,6 @@
|
||||
// exportTangents
|
||||
//
|
||||
this.exportTangents.AutoSize = true;
|
||||
this.exportTangents.Enabled = false;
|
||||
this.exportTangents.Location = new System.Drawing.Point(7, 44);
|
||||
this.exportTangents.Name = "exportTangents";
|
||||
this.exportTangents.Size = new System.Drawing.Size(71, 17);
|
||||
@ -184,7 +196,7 @@
|
||||
this.advancedBox.Controls.Add(this.upAxis);
|
||||
this.advancedBox.Controls.Add(this.scaleFactor);
|
||||
this.advancedBox.Controls.Add(this.scaleLabel);
|
||||
this.advancedBox.Location = new System.Drawing.Point(12, 281);
|
||||
this.advancedBox.Location = new System.Drawing.Point(12, 303);
|
||||
this.advancedBox.Name = "advancedBox";
|
||||
this.advancedBox.Size = new System.Drawing.Size(360, 80);
|
||||
this.advancedBox.TabIndex = 5;
|
||||
@ -240,7 +252,7 @@
|
||||
//
|
||||
// fbxOKbutton
|
||||
//
|
||||
this.fbxOKbutton.Location = new System.Drawing.Point(216, 367);
|
||||
this.fbxOKbutton.Location = new System.Drawing.Point(216, 389);
|
||||
this.fbxOKbutton.Name = "fbxOKbutton";
|
||||
this.fbxOKbutton.Size = new System.Drawing.Size(75, 23);
|
||||
this.fbxOKbutton.TabIndex = 6;
|
||||
@ -251,7 +263,7 @@
|
||||
// fbxCancel
|
||||
//
|
||||
this.fbxCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.fbxCancel.Location = new System.Drawing.Point(297, 367);
|
||||
this.fbxCancel.Location = new System.Drawing.Point(297, 389);
|
||||
this.fbxCancel.Name = "fbxCancel";
|
||||
this.fbxCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.fbxCancel.TabIndex = 7;
|
||||
@ -267,11 +279,11 @@
|
||||
// showExpOpt
|
||||
//
|
||||
this.showExpOpt.AutoSize = true;
|
||||
this.showExpOpt.Location = new System.Drawing.Point(12, 371);
|
||||
this.showExpOpt.Location = new System.Drawing.Point(12, 393);
|
||||
this.showExpOpt.Name = "showExpOpt";
|
||||
this.showExpOpt.Size = new System.Drawing.Size(127, 17);
|
||||
this.showExpOpt.Size = new System.Drawing.Size(179, 17);
|
||||
this.showExpOpt.TabIndex = 8;
|
||||
this.showExpOpt.Text = "Show for each export";
|
||||
this.showExpOpt.Text = "Show this dialog for every export";
|
||||
this.showExpOpt.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// ExportOptions
|
||||
@ -280,7 +292,7 @@
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.fbxCancel;
|
||||
this.ClientSize = new System.Drawing.Size(384, 401);
|
||||
this.ClientSize = new System.Drawing.Size(384, 421);
|
||||
this.Controls.Add(this.showExpOpt);
|
||||
this.Controls.Add(this.fbxCancel);
|
||||
this.Controls.Add(this.fbxOKbutton);
|
||||
@ -315,7 +327,7 @@
|
||||
private System.Windows.Forms.CheckBox embedBox;
|
||||
private System.Windows.Forms.CheckBox lightsBox;
|
||||
private System.Windows.Forms.CheckBox camerasBox;
|
||||
private System.Windows.Forms.CheckBox animationBox;
|
||||
private System.Windows.Forms.CheckBox exportDeformers;
|
||||
private System.Windows.Forms.GroupBox geometryBox;
|
||||
private System.Windows.Forms.CheckBox exportColors;
|
||||
private System.Windows.Forms.CheckBox exportUVs;
|
||||
@ -327,5 +339,6 @@
|
||||
private System.Windows.Forms.Button fbxCancel;
|
||||
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
|
||||
private System.Windows.Forms.CheckBox showExpOpt;
|
||||
private System.Windows.Forms.CheckBox convertDummies;
|
||||
}
|
||||
}
|
@ -21,6 +21,8 @@ namespace Unity_Studio
|
||||
exportTangents.Checked = (bool)Properties.Settings.Default["exportTangents"];
|
||||
exportUVs.Checked = (bool)Properties.Settings.Default["exportUVs"];
|
||||
exportColors.Checked = (bool)Properties.Settings.Default["exportColors"];
|
||||
exportDeformers.Checked = (bool)Properties.Settings.Default["exportDeformers"];
|
||||
convertDummies.Checked = (bool)Properties.Settings.Default["convertDummies"];
|
||||
scaleFactor.Value = (decimal)Properties.Settings.Default["scaleFactor"];
|
||||
upAxis.SelectedIndex = (int)Properties.Settings.Default["upAxis"];
|
||||
showExpOpt.Checked = (bool)Properties.Settings.Default["showExpOpt"];
|
||||
@ -38,6 +40,7 @@ namespace Unity_Studio
|
||||
Properties.Settings.Default["exportTangents"] = exportTangents.Checked;
|
||||
Properties.Settings.Default["exportUVs"] = exportUVs.Checked;
|
||||
Properties.Settings.Default["exportColors"] = exportColors.Checked;
|
||||
Properties.Settings.Default["exportDeformers"] = exportDeformers.Checked;
|
||||
Properties.Settings.Default["scaleFactor"] = scaleFactor.Value;
|
||||
Properties.Settings.Default["upAxis"] = upAxis.SelectedIndex;
|
||||
this.DialogResult = DialogResult.OK;
|
||||
@ -49,5 +52,11 @@ namespace Unity_Studio
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void exportDeformers_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
exportOpnions_CheckedChanged(sender, e);
|
||||
convertDummies.Enabled = exportDeformers.Checked;
|
||||
}
|
||||
}
|
||||
}
|
BIN
Unity Studio/FMOD Studio API/fmod.dll
Normal file
BIN
Unity Studio/FMOD Studio API/fmod.dll
Normal file
Binary file not shown.
24
Unity Studio/Properties/Settings.Designer.cs
generated
24
Unity Studio/Properties/Settings.Designer.cs
generated
@ -166,5 +166,29 @@ namespace Unity_Studio.Properties {
|
||||
this["showExpOpt"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool exportDeformers {
|
||||
get {
|
||||
return ((bool)(this["exportDeformers"]));
|
||||
}
|
||||
set {
|
||||
this["exportDeformers"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool convertDummies {
|
||||
get {
|
||||
return ((bool)(this["convertDummies"]));
|
||||
}
|
||||
set {
|
||||
this["convertDummies"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,5 +38,11 @@
|
||||
<Setting Name="showExpOpt" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="exportDeformers" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="convertDummies" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
@ -9,8 +9,8 @@ namespace Unity_Studio
|
||||
class AudioClip
|
||||
{
|
||||
public string m_Name;
|
||||
public int m_Format = 0;
|
||||
public int m_Type;
|
||||
public int m_Format;
|
||||
public int m_Type = -1;
|
||||
public bool m_3D;
|
||||
public bool m_UseHardware;
|
||||
|
||||
@ -25,14 +25,14 @@ namespace Unity_Studio
|
||||
public bool m_PreloadAudioData;
|
||||
public bool m_LoadInBackground;
|
||||
public bool m_Legacy3D;
|
||||
public int m_CompressionFormat;
|
||||
public int m_CompressionFormat = -1;
|
||||
|
||||
public string m_Source;
|
||||
public long m_Offset;
|
||||
public long m_Size;
|
||||
public byte[] m_AudioData;
|
||||
|
||||
public string extension;
|
||||
public string extension = "";
|
||||
|
||||
public AudioClip(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
@ -73,8 +73,7 @@ namespace Unity_Studio
|
||||
}
|
||||
else
|
||||
{
|
||||
m_LoadType = a_Stream.ReadInt32();
|
||||
m_Type = m_LoadType;
|
||||
m_LoadType = a_Stream.ReadInt32();//Decompress on load, Compressed in memory, Streaming
|
||||
m_Channels = a_Stream.ReadInt32();
|
||||
m_Frequency = a_Stream.ReadInt32();
|
||||
m_BitsPerSample = a_Stream.ReadInt32();
|
||||
@ -97,17 +96,13 @@ namespace Unity_Studio
|
||||
}
|
||||
|
||||
#region Info Text & extension
|
||||
preloadData.InfoText = "Format: " + m_Format + "\nType: ";
|
||||
preloadData.InfoText = "Compression format: ";
|
||||
|
||||
switch (m_Type)
|
||||
{
|
||||
case 1:
|
||||
extension = ".fsb";
|
||||
preloadData.InfoText += "FSB with substreams";
|
||||
break;
|
||||
case 2:
|
||||
extension = ".fsb";
|
||||
preloadData.InfoText += "FSB";
|
||||
extension = ".aif";
|
||||
preloadData.InfoText += "AIFF";
|
||||
break;
|
||||
case 13:
|
||||
extension = ".mp3";
|
||||
@ -125,11 +120,29 @@ namespace Unity_Studio
|
||||
extension = ".wav";
|
||||
preloadData.InfoText += "Xbox360 WAV";
|
||||
break;
|
||||
default:
|
||||
preloadData.InfoText += "Unknown type " + m_Type;
|
||||
}
|
||||
|
||||
switch (m_CompressionFormat)
|
||||
{
|
||||
case 0:
|
||||
extension = ".fsb";
|
||||
preloadData.InfoText += "PCM";
|
||||
break;
|
||||
case 1:
|
||||
extension = ".fsb";
|
||||
preloadData.InfoText += "Vorbis";
|
||||
break;
|
||||
case 2:
|
||||
extension = ".fsb";
|
||||
preloadData.InfoText += "ADPCM";
|
||||
break;
|
||||
case 3:
|
||||
extension = ".fsb";
|
||||
preloadData.InfoText += "MP3";//not sure
|
||||
break;
|
||||
}
|
||||
|
||||
if (extension == "") { preloadData.InfoText += "Unknown"; }
|
||||
preloadData.InfoText += "\n3D: " + m_3D.ToString();
|
||||
#endregion
|
||||
|
@ -93,7 +93,7 @@ But since the -90 rotation from Unity is a regular type, it will show up in the
|
||||
Also, re-importing this FBX in Unity will now produce a (-90)+(-90)=-180 rotation.
|
||||
This is an unfortunate eyesore, but nothing more, the orientation will be fine.
|
||||
|
||||
In theory, one could add +90 degrees rotation to GameObjects that link to Mesh assets (but not other types) and use a different conversion for vertex components.
|
||||
In theory, one could add +90 degrees rotation to GameObjects that link to Mesh assets (but not other types) to cancel out the Unity rotation.
|
||||
The problem is you can never know where the Unity mesh originated from. If it came from a left-handed format such as OBJ, there wouldn't have been any conversion and it wouldn't have that -90 degree adjustment.
|
||||
So it would "fix" meshes that were originally sourced form FBX, but would still have the "extra" rotation in mehses sourced from left-handed formats.
|
||||
*/
|
||||
@ -107,10 +107,13 @@ namespace Unity_Studio
|
||||
public List<SubMesh> m_SubMeshes = new List<SubMesh>();
|
||||
public List<uint> m_Indices = new List<uint>(); //use a list because I don't always know the facecount for triangle strips
|
||||
public List<int> m_materialIDs = new List<int>();
|
||||
public uint m_VertexCount;
|
||||
private uint[] m_IndexBuffer;
|
||||
private ChannelInfo[] m_Channels;
|
||||
private StreamInfo[] m_Streams;
|
||||
private uint[] m_IndexBuffer;
|
||||
public List<BoneInfluence>[] m_Skin;
|
||||
//public Dictionary<int, float>[] m_Skin;
|
||||
public float[][,] m_BindPose;
|
||||
public uint m_VertexCount;
|
||||
public float[] m_Vertices;
|
||||
public float[] m_Normals;
|
||||
public float[] m_Colors;
|
||||
@ -130,6 +133,12 @@ namespace Unity_Studio
|
||||
public uint vertexCount;
|
||||
}
|
||||
|
||||
public class BoneInfluence
|
||||
{
|
||||
public float weight;
|
||||
public int boneIndex;
|
||||
}
|
||||
|
||||
public class ChannelInfo
|
||||
{
|
||||
public byte stream;
|
||||
@ -362,6 +371,7 @@ namespace Unity_Studio
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region subMeshes
|
||||
int m_SubMeshes_size = a_Stream.ReadInt32();
|
||||
for (int s = 0; s < m_SubMeshes_size; s++)
|
||||
{
|
||||
@ -380,54 +390,68 @@ namespace Unity_Studio
|
||||
a_Stream.Position += 24; //Axis-Aligned Bounding Box
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region m_Shapes for 4.1.0 and later, excluding 4.1.0 alpha
|
||||
if (version [0] >= 5 || (version[0] == 4 && (version[1] > 1 || (version[1] == 1 && MeshPD.sourceFile.buildType[0] != "a"))))
|
||||
#region BlendShapeData
|
||||
#region 4.1.0 to 4.2.x, excluding 4.1.0 alpha
|
||||
if (version[0] == 4 && ((version[1] == 1 && MeshPD.sourceFile.buildType[0] != "a") ||
|
||||
(version[1] > 1 && version[1] <= 2)))
|
||||
{
|
||||
if (version[0] == 4 && version[1] <= 2) //4.1.0f4 - 4.2.2f1
|
||||
int m_Shapes_size = a_Stream.ReadInt32();
|
||||
if (m_Shapes_size > 0)
|
||||
{
|
||||
int m_Shapes_size = a_Stream.ReadInt32();
|
||||
if (m_Shapes_size > 0)
|
||||
{
|
||||
bool stop = true;
|
||||
}
|
||||
for (int s = 0; s < m_Shapes_size; s++) //untested
|
||||
{
|
||||
string shape_name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
a_Stream.Position += 36; //uint firstVertex, vertexCount; Vector3f aabbMinDelta, aabbMaxDelta; bool hasNormals, hasTangents
|
||||
}
|
||||
|
||||
int m_ShapeVertices_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_ShapeVertices_size * 40; //vertex positions, normals, tangents & uint index
|
||||
bool stop = true;
|
||||
}
|
||||
else //4.3.0 and later
|
||||
for (int s = 0; s < m_Shapes_size; s++) //untested
|
||||
{
|
||||
int m_ShapeVertices_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_ShapeVertices_size * 40; //vertex positions, normals, tangents & uint index
|
||||
|
||||
int shapes_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += shapes_size * 12; //uint firstVertex, vertexCount; bool hasNormals, hasTangents
|
||||
|
||||
int channels_size = a_Stream.ReadInt32();
|
||||
for (int c = 0; c < channels_size; c++)
|
||||
{
|
||||
string channel_name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
a_Stream.Position += 12; //uint nameHash; int frameIndex, frameCount
|
||||
}
|
||||
|
||||
int fullWeights_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += fullWeights_size * 4; //floats
|
||||
|
||||
int m_BindPose_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BindPose_size * 16 * 4; //matrix 4x4
|
||||
|
||||
int m_BoneNameHashes_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BoneNameHashes_size * 4; //uints
|
||||
|
||||
uint m_RootBoneNameHash = a_Stream.ReadUInt32();
|
||||
string shape_name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
a_Stream.Position += 36; //uint firstVertex, vertexCount; Vector3f aabbMinDelta, aabbMaxDelta; bool hasNormals, hasTangents
|
||||
}
|
||||
|
||||
int m_ShapeVertices_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_ShapeVertices_size * 40; //vertex positions, normals, tangents & uint index
|
||||
}
|
||||
#endregion
|
||||
#region 4.3.0 and later
|
||||
else if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))
|
||||
{
|
||||
int m_ShapeVertices_size = a_Stream.ReadInt32();
|
||||
if (m_ShapeVertices_size > 0)
|
||||
{
|
||||
bool stop = true;
|
||||
}
|
||||
a_Stream.Position += m_ShapeVertices_size * 40; //vertex positions, normals, tangents & uint index
|
||||
|
||||
int shapes_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += shapes_size * 12; //uint firstVertex, vertexCount; bool hasNormals, hasTangents
|
||||
|
||||
int channels_size = a_Stream.ReadInt32();
|
||||
for (int c = 0; c < channels_size; c++)
|
||||
{
|
||||
string channel_name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
a_Stream.Position += 12; //uint nameHash; int frameIndex, frameCount
|
||||
}
|
||||
|
||||
int fullWeights_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += fullWeights_size * 4; //floats
|
||||
|
||||
m_BindPose = new float[a_Stream.ReadInt32()][,];
|
||||
for (int i = 0; i < m_BindPose.Length; i++)
|
||||
{
|
||||
m_BindPose[i] = new float[4,4] {
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() } };
|
||||
}
|
||||
|
||||
int m_BoneNameHashes_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BoneNameHashes_size * 4; //uints
|
||||
|
||||
uint m_RootBoneNameHash = a_Stream.ReadUInt32();
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region Index Buffer for 2.6.0 and later
|
||||
if (version[0] >= 3 || (version[0] == 2 && version[1] >= 6))
|
||||
@ -454,7 +478,7 @@ namespace Unity_Studio
|
||||
{
|
||||
m_IndexBuffer = new uint[m_IndexBuffer_size / 4];
|
||||
for (int i = 0; i < m_IndexBuffer_size / 4; i++) { m_IndexBuffer[i] = a_Stream.ReadUInt32(); }
|
||||
//align??
|
||||
a_Stream.AlignStream(4);//untested
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@ -466,11 +490,32 @@ namespace Unity_Studio
|
||||
m_Vertices = new float[m_VertexCount * 3];
|
||||
for (int v = 0; v < m_VertexCount * 3; v++) { m_Vertices[v] = a_Stream.ReadSingle(); }
|
||||
|
||||
int m_Skin_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_Skin_size * 32; //4x float weights & 4x int boneIndices
|
||||
m_Skin = new List<BoneInfluence>[a_Stream.ReadInt32()];
|
||||
//m_Skin = new Dictionary<int, float>[a_Stream.ReadInt32()];
|
||||
for (int s = 0; s < m_Skin.Length; s++)
|
||||
{
|
||||
m_Skin[s] = new List<BoneInfluence>();
|
||||
for (int i = 0; i < 4; i++) { m_Skin[s].Add(new BoneInfluence() { weight = a_Stream.ReadSingle() }); }
|
||||
for (int i = 0; i < 4; i++) { m_Skin[s][i].boneIndex = a_Stream.ReadInt32(); }
|
||||
|
||||
int m_BindPose_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BindPose_size * 16 * 4; //matrix 4x4
|
||||
/*m_Skin[s] = new Dictionary<int, float>();
|
||||
float[] weights = new float[4] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
int boneIndex = a_Stream.ReadInt32();
|
||||
m_Skin[s][boneIndex] = weights[i];
|
||||
}*/
|
||||
}
|
||||
|
||||
m_BindPose = new float[a_Stream.ReadInt32()][,];
|
||||
for (int i = 0; i < m_BindPose.Length; i++)
|
||||
{
|
||||
m_BindPose[i] = new float[4, 4] {
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() } };
|
||||
}
|
||||
|
||||
int m_UV1_size = a_Stream.ReadInt32();
|
||||
m_UV1 = new float[m_UV1_size * 2];
|
||||
@ -507,13 +552,35 @@ namespace Unity_Studio
|
||||
else
|
||||
{
|
||||
#region read vertex stream
|
||||
int m_Skin_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_Skin_size * 32; //4x float weights & 4x int boneIndices
|
||||
|
||||
if (version[0] <= 3 || (version[0] == 4 && version[1] <= 2))
|
||||
m_Skin = new List<BoneInfluence>[a_Stream.ReadInt32()];
|
||||
//m_Skin = new Dictionary<int, float>[a_Stream.ReadInt32()];
|
||||
for (int s = 0; s < m_Skin.Length; s++)
|
||||
{
|
||||
int m_BindPose_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BindPose_size * 16 * 4; //matrix 4x4
|
||||
m_Skin[s] = new List<BoneInfluence>();
|
||||
for (int i = 0; i < 4; i++) { m_Skin[s].Add(new BoneInfluence() { weight = a_Stream.ReadSingle() }); }
|
||||
for (int i = 0; i < 4; i++) { m_Skin[s][i].boneIndex = a_Stream.ReadInt32(); }
|
||||
|
||||
/*m_Skin[s] = new Dictionary<int, float>();
|
||||
float[] weights = new float[4] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
int boneIndex = a_Stream.ReadInt32();
|
||||
m_Skin[s][boneIndex] = weights[i];
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
if (version[0] == 3 || (version[0] == 4 && version[1] <= 2))
|
||||
{
|
||||
m_BindPose = new float[a_Stream.ReadInt32()][,];
|
||||
for (int i = 0; i < m_BindPose.Length; i++)
|
||||
{
|
||||
m_BindPose[i] = new float[4, 4] {
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
{ a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() } };
|
||||
}
|
||||
}
|
||||
|
||||
int m_CurrentChannels = a_Stream.ReadInt32();//defined as uint in Unity
|
||||
@ -588,15 +655,15 @@ namespace Unity_Studio
|
||||
#endregion
|
||||
|
||||
#region compute FvF
|
||||
int valueBufferSize = 0;
|
||||
byte[] valueBuffer;
|
||||
float[] dstArray;
|
||||
int componentByteSize = 0;
|
||||
byte[] componentBytes;
|
||||
float[] componentsArray;
|
||||
|
||||
#region 4.0.0 and later
|
||||
if (m_Channels != null)
|
||||
{
|
||||
//it is better to loop channels instead of streams
|
||||
//because channels are likely to be sorted by vertex property
|
||||
#region 4.0.0 and later
|
||||
foreach (var m_Channel in m_Channels)
|
||||
{
|
||||
if (m_Channel.dimension > 0)
|
||||
@ -610,7 +677,7 @@ namespace Unity_Studio
|
||||
// in Unity 4.x the colors channel has 1 dimension, as in 1 color with 4 components
|
||||
if (b == 2 && m_Channel.format == 2) { m_Channel.dimension = 4; }
|
||||
|
||||
valueBufferSize = 4 / (int)Math.Pow(2, m_Channel.format);
|
||||
componentByteSize = 4 / (int)Math.Pow(2, m_Channel.format);
|
||||
|
||||
/*switch (m_Channel.format)
|
||||
{
|
||||
@ -626,51 +693,38 @@ namespace Unity_Studio
|
||||
break;
|
||||
}*/
|
||||
|
||||
valueBuffer = new byte[valueBufferSize];
|
||||
dstArray = new float[m_VertexCount * m_Channel.dimension];
|
||||
componentBytes = new byte[componentByteSize];
|
||||
componentsArray = new float[m_VertexCount * m_Channel.dimension];
|
||||
|
||||
for (int v = 0; v < m_VertexCount; v++)
|
||||
{
|
||||
int vertexOffset = m_Stream.offset + m_Channel.offset + m_Stream.stride * v;
|
||||
for (int d = 0; d < m_Channel.dimension; d++)
|
||||
{
|
||||
int m_DataSizeOffset = m_Stream.offset + m_Channel.offset + m_Stream.stride * v + valueBufferSize * d;
|
||||
Buffer.BlockCopy(m_DataSize, m_DataSizeOffset, valueBuffer, 0, valueBufferSize);
|
||||
dstArray[v * m_Channel.dimension + d] = bytesToFloat(valueBuffer);
|
||||
int componentOffset = vertexOffset + componentByteSize * d;
|
||||
Buffer.BlockCopy(m_DataSize, componentOffset, componentBytes, 0, componentByteSize);
|
||||
componentsArray[v * m_Channel.dimension + d] = bytesToFloat(componentBytes);
|
||||
}
|
||||
}
|
||||
|
||||
switch (b)
|
||||
{
|
||||
case 0:
|
||||
m_Vertices = dstArray;
|
||||
break;
|
||||
case 1:
|
||||
m_Normals = dstArray;
|
||||
break;
|
||||
case 2:
|
||||
m_Colors = dstArray;
|
||||
break;
|
||||
case 3:
|
||||
m_UV1 = dstArray;
|
||||
break;
|
||||
case 4:
|
||||
m_UV2 = dstArray;
|
||||
break;
|
||||
case 0: m_Vertices = componentsArray; break;
|
||||
case 1: m_Normals = componentsArray; break;
|
||||
case 2: m_Colors = componentsArray; break;
|
||||
case 3: m_UV1 = componentsArray; break;
|
||||
case 4: m_UV2 = componentsArray; break;
|
||||
case 5:
|
||||
if (version[0] == 5) { m_UV3 = dstArray; }
|
||||
else { m_Tangents = dstArray; }
|
||||
break;
|
||||
case 6:
|
||||
m_UV4 = dstArray;
|
||||
break;
|
||||
case 7:
|
||||
m_Tangents = dstArray;
|
||||
if (version[0] == 5) { m_UV3 = componentsArray; }
|
||||
else { m_Tangents = componentsArray; }
|
||||
break;
|
||||
case 6: m_UV4 = componentsArray; break;
|
||||
case 7: m_Tangents = componentsArray; break;
|
||||
}
|
||||
|
||||
m_Stream.channelMask.Set(b, false); //is this needed?
|
||||
valueBuffer = null;
|
||||
dstArray = null;
|
||||
m_Stream.channelMask.Set(b, false);
|
||||
componentBytes = null;
|
||||
componentsArray = null;
|
||||
break; //go to next channel
|
||||
}
|
||||
}
|
||||
@ -697,63 +751,52 @@ namespace Unity_Studio
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
valueBufferSize = 4;
|
||||
componentByteSize = 4;
|
||||
m_Channel.dimension = 3;
|
||||
break;
|
||||
case 2:
|
||||
valueBufferSize = 1;
|
||||
componentByteSize = 1;
|
||||
m_Channel.dimension = 4;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
valueBufferSize = 4;
|
||||
componentByteSize = 4;
|
||||
m_Channel.dimension = 2;
|
||||
break;
|
||||
case 5:
|
||||
valueBufferSize = 4;
|
||||
componentByteSize = 4;
|
||||
m_Channel.dimension = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
valueBuffer = new byte[valueBufferSize];
|
||||
dstArray = new float[m_VertexCount * m_Channel.dimension];
|
||||
componentBytes = new byte[componentByteSize];
|
||||
componentsArray = new float[m_VertexCount * m_Channel.dimension];
|
||||
|
||||
for (int v = 0; v < m_VertexCount; v++)
|
||||
{
|
||||
int vertexOffset = m_Stream.offset + m_Channel.offset + m_Stream.stride * v;
|
||||
for (int d = 0; d < m_Channel.dimension; d++)
|
||||
{
|
||||
int m_DataSizeOffset = m_Stream.offset + m_Channel.offset + m_Stream.stride * v + valueBufferSize * d;
|
||||
Buffer.BlockCopy(m_DataSize, m_DataSizeOffset, valueBuffer, 0, valueBufferSize);
|
||||
dstArray[v * m_Channel.dimension + d] = bytesToFloat(valueBuffer);
|
||||
int m_DataSizeOffset = vertexOffset + componentByteSize * d;
|
||||
Buffer.BlockCopy(m_DataSize, m_DataSizeOffset, componentBytes, 0, componentByteSize);
|
||||
componentsArray[v * m_Channel.dimension + d] = bytesToFloat(componentBytes);
|
||||
}
|
||||
}
|
||||
|
||||
switch (b)
|
||||
{
|
||||
case 0:
|
||||
m_Vertices = dstArray;
|
||||
break;
|
||||
case 1:
|
||||
m_Normals = dstArray;
|
||||
break;
|
||||
case 2:
|
||||
m_Colors = dstArray;
|
||||
break;
|
||||
case 3:
|
||||
m_UV1 = dstArray;
|
||||
break;
|
||||
case 4:
|
||||
m_UV2 = dstArray;
|
||||
break;
|
||||
case 5:
|
||||
m_Tangents = dstArray;
|
||||
break;
|
||||
case 0: m_Vertices = componentsArray; break;
|
||||
case 1: m_Normals = componentsArray; break;
|
||||
case 2: m_Colors = componentsArray; break;
|
||||
case 3: m_UV1 = componentsArray; break;
|
||||
case 4: m_UV2 = componentsArray; break;
|
||||
case 5: m_Tangents = componentsArray; break;
|
||||
}
|
||||
|
||||
m_Channel.offset += (byte)(m_Channel.dimension * valueBufferSize); //strides larger than 255 are unlikely
|
||||
m_Stream.channelMask.Set(b, false); //is this needed?
|
||||
valueBuffer = null;
|
||||
dstArray = null;
|
||||
m_Channel.offset += (byte)(m_Channel.dimension * componentByteSize); //safe to cast as byte because strides larger than 255 are unlikely
|
||||
m_Stream.channelMask.Set(b, false);
|
||||
componentBytes = null;
|
||||
componentsArray = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -800,7 +843,7 @@ namespace Unity_Studio
|
||||
m_UV_Packed.m_BitSize = a_Stream.ReadByte();
|
||||
a_Stream.Position += 3; //4 byte alignment
|
||||
|
||||
if (m_UV_Packed.m_NumItems > 0)
|
||||
if (m_UV_Packed.m_NumItems > 0 && (bool)Properties.Settings.Default["exportUVs"])
|
||||
{
|
||||
uint[] m_UV_Unpacked = UnpackBitVector(m_UV_Packed);
|
||||
int bitmax = 0;
|
||||
@ -890,7 +933,7 @@ namespace Unity_Studio
|
||||
m_NormalSigns_packed.m_BitSize = a_Stream.ReadByte();
|
||||
a_Stream.Position += 3; //4 byte alignment
|
||||
|
||||
if (m_Normals_Packed.m_NumItems > 0)
|
||||
if (m_Normals_Packed.m_NumItems > 0 && (bool)Properties.Settings.Default["exportNormals"])
|
||||
{
|
||||
uint[] m_Normals_Unpacked = UnpackBitVector(m_Normals_Packed);
|
||||
uint[] m_NormalSigns = UnpackBitVector(m_NormalSigns_packed);
|
||||
@ -906,13 +949,29 @@ namespace Unity_Studio
|
||||
}
|
||||
}
|
||||
|
||||
PackedBitVector m_TangentSigns = new PackedBitVector();
|
||||
m_TangentSigns.m_NumItems = a_Stream.ReadUInt32();
|
||||
m_TangentSigns.m_Data = new byte[a_Stream.ReadInt32()];
|
||||
a_Stream.Read(m_TangentSigns.m_Data, 0, m_TangentSigns.m_Data.Length);
|
||||
PackedBitVector m_TangentSigns_packed = new PackedBitVector();
|
||||
m_TangentSigns_packed.m_NumItems = a_Stream.ReadUInt32();
|
||||
m_TangentSigns_packed.m_Data = new byte[a_Stream.ReadInt32()];
|
||||
a_Stream.Read(m_TangentSigns_packed.m_Data, 0, m_TangentSigns_packed.m_Data.Length);
|
||||
a_Stream.AlignStream(4);
|
||||
m_TangentSigns.m_BitSize = a_Stream.ReadByte();
|
||||
m_TangentSigns_packed.m_BitSize = a_Stream.ReadByte();
|
||||
a_Stream.Position += 3; //4 byte alignment
|
||||
|
||||
if (m_Tangents_Packed.m_NumItems > 0 && (bool)Properties.Settings.Default["exportTangents"])
|
||||
{
|
||||
uint[] m_Tangents_Unpacked = UnpackBitVector(m_Tangents_Packed);
|
||||
uint[] m_TangentSigns = UnpackBitVector(m_TangentSigns_packed);
|
||||
int bitmax = 0;
|
||||
for (int b = 0; b < m_Tangents_Packed.m_BitSize; b++) { bitmax |= (1 << b); }
|
||||
m_Tangents = new float[m_Tangents_Packed.m_NumItems / 2 * 3];
|
||||
for (int v = 0; v < m_Tangents_Packed.m_NumItems / 2; v++)
|
||||
{
|
||||
m_Tangents[v * 3] = (float)((double)m_Tangents_Unpacked[v * 2] / bitmax) * m_Tangents_Packed.m_Range + m_Tangents_Packed.m_Start;
|
||||
m_Tangents[v * 3 + 1] = (float)((double)m_Tangents_Unpacked[v * 2 + 1] / bitmax) * m_Tangents_Packed.m_Range + m_Tangents_Packed.m_Start;
|
||||
m_Tangents[v * 3 + 2] = (float)Math.Sqrt(1 - m_Tangents[v * 3] * m_Tangents[v * 3] - m_Tangents[v * 3 + 1] * m_Tangents[v * 3 + 1]);
|
||||
if (m_TangentSigns[v] == 0) { m_Tangents[v * 3 + 2] *= -1; }
|
||||
}
|
||||
}
|
||||
|
||||
if (version[0] >= 5)
|
||||
{
|
||||
@ -926,7 +985,7 @@ namespace Unity_Studio
|
||||
m_FloatColors.m_BitSize = a_Stream.ReadByte();
|
||||
a_Stream.Position += 3; //4 byte alignment
|
||||
|
||||
if (m_FloatColors.m_NumItems > 0)
|
||||
if (m_FloatColors.m_NumItems > 0 && (bool)Properties.Settings.Default["exportColors"])
|
||||
{
|
||||
uint[] m_FloatColors_Unpacked = UnpackBitVector(m_FloatColors);
|
||||
int bitmax = 0;
|
@ -15,6 +15,7 @@ namespace Unity_Studio
|
||||
public ushort m_LightmapIndexDynamic;
|
||||
public PPtr[] m_Materials;
|
||||
public PPtr m_Mesh;
|
||||
public PPtr[] m_Bones;
|
||||
|
||||
public SkinnedMeshRenderer(AssetPreloadData preloadData)
|
||||
{
|
||||
@ -98,28 +99,38 @@ namespace Unity_Studio
|
||||
|
||||
m_Mesh = sourceFile.ReadPPtr();
|
||||
|
||||
/*int m_Bones_size = a_Stream.ReadInt32();
|
||||
for (int b = 0; b < m_Bones_size; b++)
|
||||
m_Bones = new PPtr[a_Stream.ReadInt32()];
|
||||
for (int b = 0; b < m_Bones.Length; b++)
|
||||
{
|
||||
PPtr aBone = sourceFile.ReadPPtr();
|
||||
m_Bones[b] = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] < 3)
|
||||
{
|
||||
int m_BindPose_size = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BindPose_size * 16 * 4;//Matrix4x4f
|
||||
int m_BindPose = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BindPose * 16 * 4;//Matrix4x4f
|
||||
}
|
||||
else if (version[0] >= 3 && version[1] >= 4)
|
||||
else
|
||||
{
|
||||
if (version[1] >= 5)
|
||||
if (version[0] >= 4 || (version[0] == 4 && version[1] >= 3))
|
||||
{
|
||||
int m_BlendShapeWeights = a_Stream.ReadInt32();
|
||||
a_Stream.Position += m_BlendShapeWeights * 4; //floats
|
||||
}
|
||||
|
||||
if (version[0] >= 4 || (version[0] >= 3 && version[1] >= 5))
|
||||
{
|
||||
PPtr m_RootBone = sourceFile.ReadPPtr();
|
||||
}
|
||||
//AABB
|
||||
float[] m_Center = new float[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
float[] m_Extent = new float[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
bool m_DirtyAABB = a_Stream.ReadBoolean();
|
||||
}*/
|
||||
|
||||
if (version[0] >= 4 || (version[0] == 3 && version[1] >= 4))
|
||||
{
|
||||
//AABB
|
||||
float[] m_Center = new float[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
float[] m_Extent = new float[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
bool m_DirtyAABB = a_Stream.ReadBoolean();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -50,7 +50,7 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>unity.ico</ApplicationIcon>
|
||||
<ApplicationIcon>Resources\unity.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
@ -128,37 +128,37 @@
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="AssetPreloadData.cs" />
|
||||
<Compile Include="AudioClip.cs" />
|
||||
<Compile Include="BuildSettings.cs" />
|
||||
<Compile Include="Unity Classes\AudioClip.cs" />
|
||||
<Compile Include="Unity Classes\BuildSettings.cs" />
|
||||
<Compile Include="BundleFile.cs" />
|
||||
<Compile Include="ClassIDReference.cs" />
|
||||
<Compile Include="EndianStream.cs" />
|
||||
<Compile Include="FBXExport.cs">
|
||||
<Compile Include="ExportOptions.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FBXExport.Designer.cs">
|
||||
<DependentUpon>FBXExport.cs</DependentUpon>
|
||||
<Compile Include="ExportOptions.Designer.cs">
|
||||
<DependentUpon>ExportOptions.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FMOD Studio API\fmod.cs" />
|
||||
<Compile Include="FMOD Studio API\fmod_dsp.cs" />
|
||||
<Compile Include="FMOD Studio API\fmod_errors.cs" />
|
||||
<Compile Include="Font.cs" />
|
||||
<Compile Include="Unity Classes\Font.cs" />
|
||||
<Compile Include="GOHierarchy.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Lz4DecoderStream.cs" />
|
||||
<Compile Include="Material.cs" />
|
||||
<Compile Include="Mesh.cs" />
|
||||
<Compile Include="GameObject.cs" />
|
||||
<Compile Include="Unity Classes\Material.cs" />
|
||||
<Compile Include="Unity Classes\Mesh.cs" />
|
||||
<Compile Include="Unity Classes\GameObject.cs" />
|
||||
<Compile Include="helpers.cs" />
|
||||
<Compile Include="PlayerSettings.cs" />
|
||||
<Compile Include="RectTransform.cs" />
|
||||
<Compile Include="Renderer.cs" />
|
||||
<Compile Include="SkinnedMeshRenderer.cs" />
|
||||
<Compile Include="MeshFilter.cs" />
|
||||
<Compile Include="TextAsset.cs" />
|
||||
<Compile Include="Texture2D.cs" />
|
||||
<Compile Include="Transform.cs" />
|
||||
<Compile Include="Unity Classes\PlayerSettings.cs" />
|
||||
<Compile Include="Unity Classes\RectTransform.cs" />
|
||||
<Compile Include="Unity Classes\Renderer.cs" />
|
||||
<Compile Include="Unity Classes\SkinnedMeshRenderer.cs" />
|
||||
<Compile Include="Unity Classes\MeshFilter.cs" />
|
||||
<Compile Include="Unity Classes\TextAsset.cs" />
|
||||
<Compile Include="Unity Classes\Texture2D.cs" />
|
||||
<Compile Include="Unity Classes\Transform.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="AssetsFile.cs" />
|
||||
@ -172,8 +172,8 @@
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FBXExport.resx">
|
||||
<DependentUpon>FBXExport.cs</DependentUpon>
|
||||
<EmbeddedResource Include="ExportOptions.resx">
|
||||
<DependentUpon>ExportOptions.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
@ -219,7 +219,13 @@
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="unity.ico" />
|
||||
<Content Include="7zip\7z.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="FMOD Studio API\fmod.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Resources\unity.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -43,6 +43,12 @@
|
||||
<setting name="showExpOpt" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="exportDeformers" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="convertDummies" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
</Unity_Studio.Properties.Settings>
|
||||
</userSettings>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
||||
|
Loading…
Reference in New Issue
Block a user