Compare commits
71 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8906c856e8 | ||
|
|
dec672f9e2 | ||
|
|
0b111d5f79 | ||
|
|
4bcbdbc57d | ||
|
|
d5d937247e | ||
|
|
4ab513002f | ||
|
|
140a732046 | ||
|
|
e5104d5cc7 | ||
|
|
f87390cc2b | ||
|
|
a062905734 | ||
|
|
62206f8977 | ||
|
|
8891414f60 | ||
|
|
90dce1c17d | ||
|
|
a9f1bd320e | ||
|
|
c8393e165f | ||
|
|
9d7c3b9f64 | ||
|
|
aa653cd508 | ||
|
|
3d60c5a7f6 | ||
|
|
4ef160de34 | ||
|
|
8f7def379d | ||
|
|
351228e45c | ||
|
|
ee6c050330 | ||
|
|
b4ce12a9e8 | ||
|
|
8664531c47 | ||
|
|
40f6dbcc06 | ||
|
|
1f21a67610 | ||
|
|
929781a380 | ||
|
|
4d85c7f665 | ||
|
|
7e67f354e4 | ||
|
|
0cd8d51526 | ||
|
|
6f2c4521b2 | ||
|
|
738e7d3785 | ||
|
|
fc44ba373b | ||
|
|
468976db58 | ||
|
|
647ce56f81 | ||
|
|
db92daedf0 | ||
|
|
6969412385 | ||
|
|
8da4c4623f | ||
|
|
50265c1d57 | ||
|
|
c00da37267 | ||
|
|
17d2140909 | ||
|
|
40153f6f19 | ||
|
|
e75b9858da | ||
|
|
1f69f476f9 | ||
|
|
b2ecc65885 | ||
|
|
682ef4552e | ||
|
|
96c7aaabb0 | ||
|
|
38f1f068d2 | ||
|
|
0359169802 | ||
|
|
a49d409619 | ||
|
|
7e6ef31875 | ||
|
|
5dd9f31398 | ||
|
|
120c3e235d | ||
|
|
3a6ebf7ce6 | ||
|
|
9d505c8900 | ||
|
|
d0486d855a | ||
|
|
7ddbf3ce3e | ||
|
|
4666b378b3 | ||
|
|
2a7d40616d | ||
|
|
96b8732d91 | ||
|
|
e19ecf4770 | ||
|
|
df45fa9b8e | ||
|
|
bd7a43f0dc | ||
|
|
01f1d7c14e | ||
|
|
cc74130ad4 | ||
|
|
dc8990115a | ||
|
|
1c777aa1a8 | ||
|
|
6d019e6e8a | ||
|
|
2d7fd68ff5 | ||
|
|
cdfc9cf2e6 | ||
|
|
6e3c808799 |
49
AssetStudio.sln
Normal file
49
AssetStudio.sln
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27130.2024
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssetStudio", "AssetStudio\AssetStudio.csproj", "{24551E2D-E9B6-4CD6-8F2A-D9F4A13E7853}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssetStudio-x86", "AssetStudio\AssetStudio-x86.csproj", "{F5E07FB2-95E4-417F-943F-D439D9A03BBA}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AssetStudioFBX", "AssetStudioFBX\AssetStudioFBX.vcxproj", "{4F8EF5EF-732B-49CF-9EB3-B23E19AE6267}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssetStudioUtility", "AssetStudioUtility\AssetStudioUtility.csproj", "{9131C403-7FE8-444D-9AF5-5FE5DF76FF24}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AssetStudioFBX-x86", "AssetStudioFBX\AssetStudioFBX-x86.vcxproj", "{276DE52E-3FFE-4C3D-9076-62BCB7A5B991}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{24551E2D-E9B6-4CD6-8F2A-D9F4A13E7853}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{24551E2D-E9B6-4CD6-8F2A-D9F4A13E7853}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{24551E2D-E9B6-4CD6-8F2A-D9F4A13E7853}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{24551E2D-E9B6-4CD6-8F2A-D9F4A13E7853}.Release|Any CPU.Build.0 = Release|x64
|
||||
{F5E07FB2-95E4-417F-943F-D439D9A03BBA}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{F5E07FB2-95E4-417F-943F-D439D9A03BBA}.Debug|Any CPU.Build.0 = Debug|x86
|
||||
{F5E07FB2-95E4-417F-943F-D439D9A03BBA}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{F5E07FB2-95E4-417F-943F-D439D9A03BBA}.Release|Any CPU.Build.0 = Release|x86
|
||||
{4F8EF5EF-732B-49CF-9EB3-B23E19AE6267}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{4F8EF5EF-732B-49CF-9EB3-B23E19AE6267}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{4F8EF5EF-732B-49CF-9EB3-B23E19AE6267}.Release|Any CPU.ActiveCfg = Release|x64
|
||||
{4F8EF5EF-732B-49CF-9EB3-B23E19AE6267}.Release|Any CPU.Build.0 = Release|x64
|
||||
{9131C403-7FE8-444D-9AF5-5FE5DF76FF24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9131C403-7FE8-444D-9AF5-5FE5DF76FF24}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9131C403-7FE8-444D-9AF5-5FE5DF76FF24}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9131C403-7FE8-444D-9AF5-5FE5DF76FF24}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{276DE52E-3FFE-4C3D-9076-62BCB7A5B991}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{276DE52E-3FFE-4C3D-9076-62BCB7A5B991}.Debug|Any CPU.Build.0 = Debug|Win32
|
||||
{276DE52E-3FFE-4C3D-9076-62BCB7A5B991}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{276DE52E-3FFE-4C3D-9076-62BCB7A5B991}.Release|Any CPU.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F5C476A6-2B3B-416F-8BD5-6FE454FF3972}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -8,8 +8,8 @@
|
||||
<ProjectGuid>{F5E07FB2-95E4-417F-943F-D439D9A03BBA}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Unity_Studio</RootNamespace>
|
||||
<AssemblyName>Unity Studio</AssemblyName>
|
||||
<RootNamespace>AssetStudio</RootNamespace>
|
||||
<AssemblyName>AssetStudio</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
@@ -31,7 +31,8 @@
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\unity.ico</ApplicationIcon>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
@@ -55,21 +56,30 @@
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BrotliSharpLib, Version=0.2.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>Library\BrotliSharpLib.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>library\OpenTK.dll</HintPath>
|
||||
<HintPath>Library\OpenTK.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="OpenTK.GLControl, Version=1.1.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>library\OpenTK.GLControl.dll</HintPath>
|
||||
<HintPath>Library\OpenTK.GLControl.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.Mathematics">
|
||||
<HintPath>Library\SharpDX.Mathematics.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Half, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>library\System.Half.dll</HintPath>
|
||||
<HintPath>Library\System.Half.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Extensions" />
|
||||
@@ -130,30 +140,47 @@
|
||||
<Compile Include="7zip\SevenZipHelper.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.cs">
|
||||
<Compile Include="AssetStudioForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.Designer.cs">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
<Compile Include="AssetStudioForm.Designer.cs">
|
||||
<DependentUpon>AssetStudioForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Resource1.Designer.cs">
|
||||
<DependentUpon>Resource1.resx</DependentUpon>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<Compile Include="ShaderResource.Designer.cs">
|
||||
<Compile Include="Classes\Animation.cs" />
|
||||
<Compile Include="Classes\AnimationClip.cs" />
|
||||
<Compile Include="Classes\Animator.cs" />
|
||||
<Compile Include="Classes\AnimatorController.cs" />
|
||||
<Compile Include="Classes\AnimatorOverrideController.cs" />
|
||||
<Compile Include="Classes\Avatar.cs" />
|
||||
<Compile Include="OpenFolderDialog.cs" />
|
||||
<Compile Include="Classes\AssetBundle.cs" />
|
||||
<Compile Include="Classes\MovieTexture.cs" />
|
||||
<Compile Include="Classes\Sprite.cs" />
|
||||
<Compile Include="Classes\SpriteAtlas.cs" />
|
||||
<Compile Include="Classes\VideoClip.cs" />
|
||||
<Compile Include="StudioClasses\AssetPreloadData.cs" />
|
||||
<Compile Include="Classes\AudioClip.cs" />
|
||||
<Compile Include="Classes\BuildSettings.cs" />
|
||||
<Compile Include="StudioClasses\BinaryReaderExtensions.cs" />
|
||||
<Compile Include="StudioClasses\BinaryWriterExtensions.cs" />
|
||||
<Compile Include="StudioClasses\BundleFile.cs" />
|
||||
<Compile Include="StudioClasses\ClassStruct.cs" />
|
||||
<Compile Include="StudioClasses\FBXExporter.cs" />
|
||||
<Compile Include="StudioClasses\BuildTarget.cs" />
|
||||
<Compile Include="StudioClasses\ModelConverter.cs" />
|
||||
<Compile Include="StudioClasses\ShaderResource.Designer.cs">
|
||||
<DependentUpon>ShaderResource.resx</DependentUpon>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<Compile Include="Unity Classes\AssetBundle.cs" />
|
||||
<Compile Include="Unity Studio Classes\AssetPreloadData.cs" />
|
||||
<Compile Include="Unity Classes\AudioClip.cs" />
|
||||
<Compile Include="Unity Classes\BuildSettings.cs" />
|
||||
<Compile Include="Unity Studio Classes\BundleFile.cs" />
|
||||
<Compile Include="Unity Studio Classes\UnityStudio.cs" />
|
||||
<Compile Include="Unity Studio Classes\ClassIDReference.cs" />
|
||||
<Compile Include="Unity Studio Classes\EndianStream.cs" />
|
||||
<Compile Include="StudioClasses\SpriteHelper.cs" />
|
||||
<Compile Include="StudioClasses\StringExtensions.cs" />
|
||||
<Compile Include="StudioClasses\EndianBinaryReader.cs" />
|
||||
<Compile Include="Classes\Texture2D.Converter.cs" />
|
||||
<Compile Include="StudioClasses\Exporter.cs" />
|
||||
<Compile Include="StudioClasses\Importer.cs" />
|
||||
<Compile Include="StudioClasses\Studio.cs" />
|
||||
<Compile Include="StudioClasses\ClassIDReference.cs" />
|
||||
<Compile Include="ExportOptions.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -163,36 +190,31 @@
|
||||
<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="Unity Classes\Font.cs" />
|
||||
<Compile Include="Classes\Font.cs" />
|
||||
<Compile Include="GOHierarchy.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Unity Studio Classes\Lz4DecoderStream.cs" />
|
||||
<Compile Include="Unity Classes\Material.cs" />
|
||||
<Compile Include="Unity Classes\Mesh.cs" />
|
||||
<Compile Include="Unity Classes\GameObject.cs" />
|
||||
<Compile Include="Unity Studio Classes\helpers.cs" />
|
||||
<Compile Include="Unity Classes\MonoBehaviour.cs" />
|
||||
<Compile Include="Unity Classes\PlayerSettings.cs" />
|
||||
<Compile Include="Unity Classes\RectTransform.cs" />
|
||||
<Compile Include="Unity Classes\MeshRenderer.cs" />
|
||||
<Compile Include="Unity Classes\Shader.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="Lz4DecoderStream.cs" />
|
||||
<Compile Include="Classes\Material.cs" />
|
||||
<Compile Include="Classes\Mesh.cs" />
|
||||
<Compile Include="Classes\GameObject.cs" />
|
||||
<Compile Include="StudioClasses\PPtrHelpers.cs" />
|
||||
<Compile Include="Classes\MonoBehaviour.cs" />
|
||||
<Compile Include="Classes\PlayerSettings.cs" />
|
||||
<Compile Include="Classes\RectTransform.cs" />
|
||||
<Compile Include="Classes\MeshRenderer.cs" />
|
||||
<Compile Include="Classes\Shader.cs" />
|
||||
<Compile Include="Classes\SkinnedMeshRenderer.cs" />
|
||||
<Compile Include="Classes\MeshFilter.cs" />
|
||||
<Compile Include="Classes\TextAsset.cs" />
|
||||
<Compile Include="Classes\Texture2D.cs" />
|
||||
<Compile Include="Classes\Transform.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Unity Studio Classes\AssetsFile.cs" />
|
||||
<Compile Include="UnityStudioForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UnityStudioForm.Designer.cs">
|
||||
<DependentUpon>UnityStudioForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="AboutBox.resx">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
<Compile Include="StudioClasses\AssetsFile.cs" />
|
||||
<Compile Include="StudioClasses\WebFile.cs" />
|
||||
<EmbeddedResource Include="AssetStudioForm.resx">
|
||||
<DependentUpon>AssetStudioForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="ExportOptions.resx">
|
||||
@@ -208,18 +230,10 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Resource1.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resource1.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="ShaderResource.resx">
|
||||
<EmbeddedResource Include="StudioClasses\ShaderResource.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>ShaderResource.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UnityStudioForm.resx">
|
||||
<DependentUpon>UnityStudioForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<None Include="app.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
@@ -249,15 +263,22 @@
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\unity.ico" />
|
||||
<None Include="Resources\preview.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\preview.png" />
|
||||
<ProjectReference Include="..\AssetStudioFBX\AssetStudioFBX-x86.vcxproj">
|
||||
<Project>{276de52e-3ffe-4c3d-9076-62bcb7a5b991}</Project>
|
||||
<Name>AssetStudioFBX-x86</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\AssetStudioUtility\AssetStudioUtility.csproj">
|
||||
<Project>{9131c403-7fe8-444d-9af5-5fe5df76ff24}</Project>
|
||||
<Name>AssetStudioUtility</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>xcopy /y "$(ProjectDir)library" "$(TargetDir)"
|
||||
xcopy /y "$(ProjectDir)library\$(PlatformName)" "$(TargetDir)"</PostBuildEvent>
|
||||
<PostBuildEvent>xcopy /y "$(ProjectDir)Library" "$(TargetDir)"
|
||||
xcopy /y "$(ProjectDir)Library\$(PlatformName)" "$(TargetDir)"</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
@@ -8,8 +8,8 @@
|
||||
<ProjectGuid>{24551E2D-E9B6-4CD6-8F2A-D9F4A13E7853}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Unity_Studio</RootNamespace>
|
||||
<AssemblyName>Unity Studio</AssemblyName>
|
||||
<RootNamespace>AssetStudio</RootNamespace>
|
||||
<AssemblyName>AssetStudio</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
@@ -31,7 +31,8 @@
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\unity.ico</ApplicationIcon>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@@ -55,21 +56,30 @@
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BrotliSharpLib, Version=0.2.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>Library\BrotliSharpLib.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>library\OpenTK.dll</HintPath>
|
||||
<HintPath>Library\OpenTK.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="OpenTK.GLControl, Version=1.1.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>library\OpenTK.GLControl.dll</HintPath>
|
||||
<HintPath>Library\OpenTK.GLControl.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="SharpDX.Mathematics">
|
||||
<HintPath>Library\SharpDX.Mathematics.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Half, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>library\System.Half.dll</HintPath>
|
||||
<HintPath>Library\System.Half.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Extensions" />
|
||||
@@ -130,30 +140,40 @@
|
||||
<Compile Include="7zip\SevenZipHelper.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="AboutBox.Designer.cs">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Resource1.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resource1.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ShaderResource.Designer.cs">
|
||||
<Compile Include="Classes\Animation.cs" />
|
||||
<Compile Include="Classes\AnimationClip.cs" />
|
||||
<Compile Include="Classes\Animator.cs" />
|
||||
<Compile Include="Classes\AnimatorController.cs" />
|
||||
<Compile Include="Classes\AnimatorOverrideController.cs" />
|
||||
<Compile Include="Classes\Avatar.cs" />
|
||||
<Compile Include="OpenFolderDialog.cs" />
|
||||
<Compile Include="StudioClasses\BinaryReaderExtensions.cs" />
|
||||
<Compile Include="StudioClasses\BinaryWriterExtensions.cs" />
|
||||
<Compile Include="StudioClasses\BuildTarget.cs" />
|
||||
<Compile Include="StudioClasses\ClassIDReference.cs" />
|
||||
<Compile Include="StudioClasses\ShaderResource.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>ShaderResource.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Unity Classes\AssetBundle.cs" />
|
||||
<Compile Include="Unity Studio Classes\AssetPreloadData.cs" />
|
||||
<Compile Include="Unity Classes\AudioClip.cs" />
|
||||
<Compile Include="Unity Classes\BuildSettings.cs" />
|
||||
<Compile Include="Unity Studio Classes\BundleFile.cs" />
|
||||
<Compile Include="Unity Studio Classes\UnityStudio.cs" />
|
||||
<Compile Include="Unity Studio Classes\ClassIDReference.cs" />
|
||||
<Compile Include="Unity Studio Classes\EndianStream.cs" />
|
||||
<Compile Include="Classes\AssetBundle.cs" />
|
||||
<Compile Include="Classes\MovieTexture.cs" />
|
||||
<Compile Include="Classes\Sprite.cs" />
|
||||
<Compile Include="Classes\SpriteAtlas.cs" />
|
||||
<Compile Include="Classes\VideoClip.cs" />
|
||||
<Compile Include="StudioClasses\AssetPreloadData.cs" />
|
||||
<Compile Include="Classes\AudioClip.cs" />
|
||||
<Compile Include="Classes\BuildSettings.cs" />
|
||||
<Compile Include="StudioClasses\BundleFile.cs" />
|
||||
<Compile Include="StudioClasses\ClassStruct.cs" />
|
||||
<Compile Include="StudioClasses\FBXExporter.cs" />
|
||||
<Compile Include="StudioClasses\SpriteHelper.cs" />
|
||||
<Compile Include="StudioClasses\StringExtensions.cs" />
|
||||
<Compile Include="Classes\Texture2D.Converter.cs" />
|
||||
<Compile Include="StudioClasses\Exporter.cs" />
|
||||
<Compile Include="StudioClasses\Importer.cs" />
|
||||
<Compile Include="StudioClasses\Studio.cs" />
|
||||
<Compile Include="StudioClasses\EndianBinaryReader.cs" />
|
||||
<Compile Include="ExportOptions.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -163,38 +183,36 @@
|
||||
<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="Unity Classes\Font.cs" />
|
||||
<Compile Include="Classes\Font.cs" />
|
||||
<Compile Include="GOHierarchy.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Unity Studio Classes\Lz4DecoderStream.cs" />
|
||||
<Compile Include="Unity Classes\Material.cs" />
|
||||
<Compile Include="Unity Classes\Mesh.cs" />
|
||||
<Compile Include="Unity Classes\GameObject.cs" />
|
||||
<Compile Include="Unity Studio Classes\helpers.cs" />
|
||||
<Compile Include="Unity Classes\MonoBehaviour.cs" />
|
||||
<Compile Include="Unity Classes\PlayerSettings.cs" />
|
||||
<Compile Include="Unity Classes\RectTransform.cs" />
|
||||
<Compile Include="Unity Classes\MeshRenderer.cs" />
|
||||
<Compile Include="Unity Classes\Shader.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="Lz4DecoderStream.cs" />
|
||||
<Compile Include="Classes\Material.cs" />
|
||||
<Compile Include="Classes\Mesh.cs" />
|
||||
<Compile Include="Classes\GameObject.cs" />
|
||||
<Compile Include="StudioClasses\PPtrHelpers.cs" />
|
||||
<Compile Include="Classes\MonoBehaviour.cs" />
|
||||
<Compile Include="Classes\PlayerSettings.cs" />
|
||||
<Compile Include="Classes\RectTransform.cs" />
|
||||
<Compile Include="Classes\MeshRenderer.cs" />
|
||||
<Compile Include="Classes\Shader.cs" />
|
||||
<Compile Include="Classes\SkinnedMeshRenderer.cs" />
|
||||
<Compile Include="Classes\MeshFilter.cs" />
|
||||
<Compile Include="Classes\TextAsset.cs" />
|
||||
<Compile Include="Classes\Texture2D.cs" />
|
||||
<Compile Include="Classes\Transform.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Unity Studio Classes\AssetsFile.cs" />
|
||||
<Compile Include="UnityStudioForm.cs">
|
||||
<Compile Include="StudioClasses\AssetsFile.cs" />
|
||||
<Compile Include="StudioClasses\ModelConverter.cs" />
|
||||
<Compile Include="StudioClasses\WebFile.cs" />
|
||||
<Compile Include="AssetStudioForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UnityStudioForm.Designer.cs">
|
||||
<DependentUpon>UnityStudioForm.cs</DependentUpon>
|
||||
<Compile Include="AssetStudioForm.Designer.cs">
|
||||
<DependentUpon>AssetStudioForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="AboutBox.resx">
|
||||
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="ExportOptions.resx">
|
||||
<DependentUpon>ExportOptions.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -208,16 +226,12 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Resource1.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resource1.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="ShaderResource.resx">
|
||||
<EmbeddedResource Include="StudioClasses\ShaderResource.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>ShaderResource.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UnityStudioForm.resx">
|
||||
<DependentUpon>UnityStudioForm.cs</DependentUpon>
|
||||
<EmbeddedResource Include="AssetStudioForm.resx">
|
||||
<DependentUpon>AssetStudioForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<None Include="app.config" />
|
||||
@@ -249,15 +263,22 @@
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\unity.ico" />
|
||||
<None Include="Resources\preview.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\preview.png" />
|
||||
<ProjectReference Include="..\AssetStudioFBX\AssetStudioFBX.vcxproj">
|
||||
<Project>{4f8ef5ef-732b-49cf-9eb3-b23e19ae6267}</Project>
|
||||
<Name>AssetStudioFBX</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\AssetStudioUtility\AssetStudioUtility.csproj">
|
||||
<Project>{9131c403-7fe8-444d-9af5-5fe5df76ff24}</Project>
|
||||
<Name>AssetStudioUtility</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>xcopy /y "$(ProjectDir)library" "$(TargetDir)"
|
||||
xcopy /y "$(ProjectDir)library\$(PlatformName)" "$(TargetDir)"</PostBuildEvent>
|
||||
<PostBuildEvent>xcopy /y "$(ProjectDir)Library" "$(TargetDir)"
|
||||
xcopy /y "$(ProjectDir)Library\$(PlatformName)" "$(TargetDir)"</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
partial class UnityStudioForm
|
||||
partial class AssetStudioForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
@@ -29,7 +29,7 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UnityStudioForm));
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AssetStudioForm));
|
||||
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
||||
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.loadFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
@@ -52,15 +52,13 @@
|
||||
this.assetGroupOptions = new System.Windows.Forms.ToolStripComboBox();
|
||||
this.showExpOpt = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportAll3DMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.all3DObjectssplitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportSelected3DMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.exportAllAssetsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportSelectedAssetsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportFilteredAssetsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this._3DToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportAll3DMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.all3DObjectssplitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exportSelected3DMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
@@ -101,12 +99,12 @@
|
||||
this.timer = new System.Windows.Forms.Timer(this.components);
|
||||
this.timerOpenTK = new System.Windows.Forms.Timer(this.components);
|
||||
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
|
||||
this.openFolderDialog1 = new System.Windows.Forms.OpenFileDialog();
|
||||
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
|
||||
this.saveFolderDialog1 = new System.Windows.Forms.SaveFileDialog();
|
||||
this.treeTip = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.animatorWithAnimationClipToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
@@ -116,7 +114,6 @@
|
||||
this.tabPage1.SuspendLayout();
|
||||
this.tabPage2.SuspendLayout();
|
||||
this.progressbarPanel.SuspendLayout();
|
||||
this.glControl1.SuspendLayout();
|
||||
this.previewPanel.SuspendLayout();
|
||||
this.FMODpanel.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.FMODprogressBar)).BeginInit();
|
||||
@@ -134,10 +131,10 @@
|
||||
this.debugMenuItem,
|
||||
this.optionsToolStripMenuItem,
|
||||
this.exportToolStripMenuItem,
|
||||
this.helpToolStripMenuItem});
|
||||
this._3DToolStripMenuItem});
|
||||
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip1.Name = "menuStrip1";
|
||||
this.menuStrip1.Size = new System.Drawing.Size(1264, 24);
|
||||
this.menuStrip1.Size = new System.Drawing.Size(1264, 25);
|
||||
this.menuStrip1.TabIndex = 0;
|
||||
this.menuStrip1.Text = "menuStrip1";
|
||||
//
|
||||
@@ -150,40 +147,40 @@
|
||||
this.extractBundleToolStripMenuItem,
|
||||
this.extractFolderToolStripMenuItem});
|
||||
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
|
||||
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
|
||||
this.fileToolStripMenuItem.Size = new System.Drawing.Size(39, 21);
|
||||
this.fileToolStripMenuItem.Text = "File";
|
||||
//
|
||||
// loadFileToolStripMenuItem
|
||||
//
|
||||
this.loadFileToolStripMenuItem.Name = "loadFileToolStripMenuItem";
|
||||
this.loadFileToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
|
||||
this.loadFileToolStripMenuItem.Text = "Load file...";
|
||||
this.loadFileToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
|
||||
this.loadFileToolStripMenuItem.Text = "Load file";
|
||||
this.loadFileToolStripMenuItem.Click += new System.EventHandler(this.loadFile_Click);
|
||||
//
|
||||
// loadFolderToolStripMenuItem
|
||||
//
|
||||
this.loadFolderToolStripMenuItem.Name = "loadFolderToolStripMenuItem";
|
||||
this.loadFolderToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
|
||||
this.loadFolderToolStripMenuItem.Text = "Load folder...";
|
||||
this.loadFolderToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
|
||||
this.loadFolderToolStripMenuItem.Text = "Load folder";
|
||||
this.loadFolderToolStripMenuItem.Click += new System.EventHandler(this.loadFolder_Click);
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(155, 6);
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(156, 6);
|
||||
//
|
||||
// extractBundleToolStripMenuItem
|
||||
//
|
||||
this.extractBundleToolStripMenuItem.Name = "extractBundleToolStripMenuItem";
|
||||
this.extractBundleToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
|
||||
this.extractBundleToolStripMenuItem.Text = "Extract bundle...";
|
||||
this.extractBundleToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
|
||||
this.extractBundleToolStripMenuItem.Text = "Extract bundle";
|
||||
this.extractBundleToolStripMenuItem.Click += new System.EventHandler(this.extractBundleToolStripMenuItem_Click);
|
||||
//
|
||||
// extractFolderToolStripMenuItem
|
||||
//
|
||||
this.extractFolderToolStripMenuItem.Name = "extractFolderToolStripMenuItem";
|
||||
this.extractFolderToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
|
||||
this.extractFolderToolStripMenuItem.Text = "Extract folder...";
|
||||
this.extractFolderToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
|
||||
this.extractFolderToolStripMenuItem.Text = "Extract folder";
|
||||
this.extractFolderToolStripMenuItem.Click += new System.EventHandler(this.extractFolderToolStripMenuItem_Click);
|
||||
//
|
||||
// debugMenuItem
|
||||
@@ -195,7 +192,7 @@
|
||||
this.toolStripSeparator2,
|
||||
this.exportClassStructuresMenuItem});
|
||||
this.debugMenuItem.Name = "debugMenuItem";
|
||||
this.debugMenuItem.Size = new System.Drawing.Size(80, 20);
|
||||
this.debugMenuItem.Size = new System.Drawing.Size(87, 21);
|
||||
this.debugMenuItem.Text = "Diagnostics";
|
||||
this.debugMenuItem.Visible = false;
|
||||
//
|
||||
@@ -203,14 +200,14 @@
|
||||
//
|
||||
this.buildClassStructuresMenuItem.CheckOnClick = true;
|
||||
this.buildClassStructuresMenuItem.Name = "buildClassStructuresMenuItem";
|
||||
this.buildClassStructuresMenuItem.Size = new System.Drawing.Size(208, 22);
|
||||
this.buildClassStructuresMenuItem.Size = new System.Drawing.Size(224, 22);
|
||||
this.buildClassStructuresMenuItem.Text = "Build class structures";
|
||||
//
|
||||
// dontLoadAssetsMenuItem
|
||||
//
|
||||
this.dontLoadAssetsMenuItem.CheckOnClick = true;
|
||||
this.dontLoadAssetsMenuItem.Name = "dontLoadAssetsMenuItem";
|
||||
this.dontLoadAssetsMenuItem.Size = new System.Drawing.Size(208, 22);
|
||||
this.dontLoadAssetsMenuItem.Size = new System.Drawing.Size(224, 22);
|
||||
this.dontLoadAssetsMenuItem.Text = "Don\'t load assets";
|
||||
this.dontLoadAssetsMenuItem.CheckedChanged += new System.EventHandler(this.dontLoadAssetsMenuItem_CheckedChanged);
|
||||
//
|
||||
@@ -218,18 +215,18 @@
|
||||
//
|
||||
this.dontBuildHierarchyMenuItem.CheckOnClick = true;
|
||||
this.dontBuildHierarchyMenuItem.Name = "dontBuildHierarchyMenuItem";
|
||||
this.dontBuildHierarchyMenuItem.Size = new System.Drawing.Size(208, 22);
|
||||
this.dontBuildHierarchyMenuItem.Size = new System.Drawing.Size(224, 22);
|
||||
this.dontBuildHierarchyMenuItem.Text = "Don\'t build hierarchy tree";
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(205, 6);
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(221, 6);
|
||||
//
|
||||
// exportClassStructuresMenuItem
|
||||
//
|
||||
this.exportClassStructuresMenuItem.Name = "exportClassStructuresMenuItem";
|
||||
this.exportClassStructuresMenuItem.Size = new System.Drawing.Size(208, 22);
|
||||
this.exportClassStructuresMenuItem.Size = new System.Drawing.Size(224, 22);
|
||||
this.exportClassStructuresMenuItem.Text = "Export class structures";
|
||||
this.exportClassStructuresMenuItem.Click += new System.EventHandler(this.exportClassStructuresMenuItem_Click);
|
||||
//
|
||||
@@ -244,18 +241,9 @@
|
||||
this.assetGroupOptions,
|
||||
this.showExpOpt});
|
||||
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
|
||||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
|
||||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(66, 21);
|
||||
this.optionsToolStripMenuItem.Text = "Options";
|
||||
//
|
||||
// displayOriginalName
|
||||
//
|
||||
this.displayOriginalName.CheckOnClick = true;
|
||||
this.displayOriginalName.Name = "displayOriginalName";
|
||||
this.displayOriginalName.Size = new System.Drawing.Size(252, 22);
|
||||
this.displayOriginalName.Text = "Display asset original name";
|
||||
this.displayOriginalName.ToolTipText = "Check this option will use asset original name when display and export";
|
||||
this.displayOriginalName.CheckedChanged += new System.EventHandler(this.MenuItem_CheckedChanged);
|
||||
//
|
||||
// displayAll
|
||||
//
|
||||
this.displayAll.CheckOnClick = true;
|
||||
@@ -266,6 +254,15 @@
|
||||
"t the RAW file.";
|
||||
this.displayAll.CheckedChanged += new System.EventHandler(this.MenuItem_CheckedChanged);
|
||||
//
|
||||
// displayOriginalName
|
||||
//
|
||||
this.displayOriginalName.CheckOnClick = true;
|
||||
this.displayOriginalName.Name = "displayOriginalName";
|
||||
this.displayOriginalName.Size = new System.Drawing.Size(252, 22);
|
||||
this.displayOriginalName.Text = "Display asset original name";
|
||||
this.displayOriginalName.ToolTipText = "Check this option will use asset original name when display and export";
|
||||
this.displayOriginalName.CheckedChanged += new System.EventHandler(this.MenuItem_CheckedChanged);
|
||||
//
|
||||
// enablePreview
|
||||
//
|
||||
this.enablePreview.Checked = true;
|
||||
@@ -307,97 +304,86 @@
|
||||
"Group exported assets by source file",
|
||||
"Do not group exported assets"});
|
||||
this.assetGroupOptions.Name = "assetGroupOptions";
|
||||
this.assetGroupOptions.Size = new System.Drawing.Size(192, 23);
|
||||
this.assetGroupOptions.Size = new System.Drawing.Size(192, 25);
|
||||
this.assetGroupOptions.SelectedIndexChanged += new System.EventHandler(this.assetGroupOptions_SelectedIndexChanged);
|
||||
//
|
||||
// showExpOpt
|
||||
//
|
||||
this.showExpOpt.Name = "showExpOpt";
|
||||
this.showExpOpt.Size = new System.Drawing.Size(252, 22);
|
||||
this.showExpOpt.Text = "Export options...";
|
||||
this.showExpOpt.Text = "Export options";
|
||||
this.showExpOpt.Click += new System.EventHandler(this.showExpOpt_Click);
|
||||
//
|
||||
// exportToolStripMenuItem
|
||||
//
|
||||
this.exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.exportAll3DMenuItem,
|
||||
this.all3DObjectssplitToolStripMenuItem,
|
||||
this.exportSelected3DMenuItem,
|
||||
this.toolStripSeparator1,
|
||||
this.exportAllAssetsMenuItem,
|
||||
this.exportSelectedAssetsMenuItem,
|
||||
this.exportFilteredAssetsMenuItem});
|
||||
this.exportFilteredAssetsMenuItem,
|
||||
this.toolStripSeparator1,
|
||||
this.animatorWithAnimationClipToolStripMenuItem});
|
||||
this.exportToolStripMenuItem.Name = "exportToolStripMenuItem";
|
||||
this.exportToolStripMenuItem.Size = new System.Drawing.Size(52, 20);
|
||||
this.exportToolStripMenuItem.Size = new System.Drawing.Size(58, 21);
|
||||
this.exportToolStripMenuItem.Text = "Export";
|
||||
//
|
||||
// exportAll3DMenuItem
|
||||
//
|
||||
this.exportAll3DMenuItem.Name = "exportAll3DMenuItem";
|
||||
this.exportAll3DMenuItem.Size = new System.Drawing.Size(179, 22);
|
||||
this.exportAll3DMenuItem.Text = "All 3D objects";
|
||||
this.exportAll3DMenuItem.Click += new System.EventHandler(this.Export3DObjects_Click);
|
||||
//
|
||||
// all3DObjectssplitToolStripMenuItem
|
||||
//
|
||||
this.all3DObjectssplitToolStripMenuItem.Name = "all3DObjectssplitToolStripMenuItem";
|
||||
this.all3DObjectssplitToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
|
||||
this.all3DObjectssplitToolStripMenuItem.Text = "All 3D objects (split)";
|
||||
this.all3DObjectssplitToolStripMenuItem.Click += new System.EventHandler(this.all3DObjectssplitToolStripMenuItem_Click);
|
||||
//
|
||||
// exportSelected3DMenuItem
|
||||
//
|
||||
this.exportSelected3DMenuItem.Name = "exportSelected3DMenuItem";
|
||||
this.exportSelected3DMenuItem.Size = new System.Drawing.Size(179, 22);
|
||||
this.exportSelected3DMenuItem.Text = "Selected 3D objects";
|
||||
this.exportSelected3DMenuItem.Click += new System.EventHandler(this.Export3DObjects_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(176, 6);
|
||||
this.exportToolStripMenuItem.Visible = false;
|
||||
//
|
||||
// exportAllAssetsMenuItem
|
||||
//
|
||||
this.exportAllAssetsMenuItem.Name = "exportAllAssetsMenuItem";
|
||||
this.exportAllAssetsMenuItem.Size = new System.Drawing.Size(179, 22);
|
||||
this.exportAllAssetsMenuItem.Size = new System.Drawing.Size(165, 22);
|
||||
this.exportAllAssetsMenuItem.Text = "All assets";
|
||||
this.exportAllAssetsMenuItem.Click += new System.EventHandler(this.ExportAssets_Click);
|
||||
//
|
||||
// exportSelectedAssetsMenuItem
|
||||
//
|
||||
this.exportSelectedAssetsMenuItem.Name = "exportSelectedAssetsMenuItem";
|
||||
this.exportSelectedAssetsMenuItem.Size = new System.Drawing.Size(179, 22);
|
||||
this.exportSelectedAssetsMenuItem.Size = new System.Drawing.Size(165, 22);
|
||||
this.exportSelectedAssetsMenuItem.Text = "Selected assets";
|
||||
this.exportSelectedAssetsMenuItem.Click += new System.EventHandler(this.ExportAssets_Click);
|
||||
//
|
||||
// exportFilteredAssetsMenuItem
|
||||
//
|
||||
this.exportFilteredAssetsMenuItem.Name = "exportFilteredAssetsMenuItem";
|
||||
this.exportFilteredAssetsMenuItem.Size = new System.Drawing.Size(179, 22);
|
||||
this.exportFilteredAssetsMenuItem.Size = new System.Drawing.Size(165, 22);
|
||||
this.exportFilteredAssetsMenuItem.Text = "Filtered assets";
|
||||
this.exportFilteredAssetsMenuItem.Click += new System.EventHandler(this.ExportAssets_Click);
|
||||
//
|
||||
// helpToolStripMenuItem
|
||||
// _3DToolStripMenuItem
|
||||
//
|
||||
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.aboutToolStripMenuItem});
|
||||
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
|
||||
this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
|
||||
this.helpToolStripMenuItem.Text = "Help";
|
||||
this._3DToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.exportAll3DMenuItem,
|
||||
this.all3DObjectssplitToolStripMenuItem,
|
||||
this.exportSelected3DMenuItem});
|
||||
this._3DToolStripMenuItem.Name = "_3DToolStripMenuItem";
|
||||
this._3DToolStripMenuItem.Size = new System.Drawing.Size(78, 21);
|
||||
this._3DToolStripMenuItem.Text = "3D Model";
|
||||
//
|
||||
// aboutToolStripMenuItem
|
||||
// exportAll3DMenuItem
|
||||
//
|
||||
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
||||
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
|
||||
this.aboutToolStripMenuItem.Text = "About";
|
||||
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
|
||||
this.exportAll3DMenuItem.Name = "exportAll3DMenuItem";
|
||||
this.exportAll3DMenuItem.Size = new System.Drawing.Size(234, 22);
|
||||
this.exportAll3DMenuItem.Text = "Export All 3D objects";
|
||||
this.exportAll3DMenuItem.Click += new System.EventHandler(this.Export3DObjects_Click);
|
||||
//
|
||||
// all3DObjectssplitToolStripMenuItem
|
||||
//
|
||||
this.all3DObjectssplitToolStripMenuItem.Name = "all3DObjectssplitToolStripMenuItem";
|
||||
this.all3DObjectssplitToolStripMenuItem.Size = new System.Drawing.Size(234, 22);
|
||||
this.all3DObjectssplitToolStripMenuItem.Text = "Export All 3D objects (split)";
|
||||
this.all3DObjectssplitToolStripMenuItem.Click += new System.EventHandler(this.all3DObjectssplitToolStripMenuItem_Click);
|
||||
//
|
||||
// exportSelected3DMenuItem
|
||||
//
|
||||
this.exportSelected3DMenuItem.Name = "exportSelected3DMenuItem";
|
||||
this.exportSelected3DMenuItem.Size = new System.Drawing.Size(234, 22);
|
||||
this.exportSelected3DMenuItem.Text = "Export Selected 3D objects";
|
||||
this.exportSelected3DMenuItem.Click += new System.EventHandler(this.Export3DObjects_Click);
|
||||
//
|
||||
// splitContainer1
|
||||
//
|
||||
this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.splitContainer1.Location = new System.Drawing.Point(0, 24);
|
||||
this.splitContainer1.Location = new System.Drawing.Point(0, 25);
|
||||
this.splitContainer1.Name = "splitContainer1";
|
||||
//
|
||||
// splitContainer1.Panel1
|
||||
@@ -412,7 +398,7 @@
|
||||
this.splitContainer1.Panel2.Controls.Add(this.classPreviewPanel);
|
||||
this.splitContainer1.Panel2.Controls.Add(this.statusStrip1);
|
||||
this.splitContainer1.Panel2MinSize = 400;
|
||||
this.splitContainer1.Size = new System.Drawing.Size(1264, 659);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(1264, 656);
|
||||
this.splitContainer1.SplitterDistance = 420;
|
||||
this.splitContainer1.TabIndex = 2;
|
||||
this.splitContainer1.TabStop = false;
|
||||
@@ -426,7 +412,7 @@
|
||||
this.tabControl1.Name = "tabControl1";
|
||||
this.tabControl1.Padding = new System.Drawing.Point(17, 3);
|
||||
this.tabControl1.SelectedIndex = 0;
|
||||
this.tabControl1.Size = new System.Drawing.Size(418, 635);
|
||||
this.tabControl1.Size = new System.Drawing.Size(418, 634);
|
||||
this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
|
||||
this.tabControl1.TabIndex = 0;
|
||||
this.tabControl1.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabPageSelected);
|
||||
@@ -437,7 +423,7 @@
|
||||
this.tabPage1.Controls.Add(this.treeSearch);
|
||||
this.tabPage1.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.Size = new System.Drawing.Size(410, 557);
|
||||
this.tabPage1.Size = new System.Drawing.Size(410, 608);
|
||||
this.tabPage1.TabIndex = 0;
|
||||
this.tabPage1.Text = "Scene Hierarchy";
|
||||
this.tabPage1.UseVisualStyleBackColor = true;
|
||||
@@ -449,7 +435,7 @@
|
||||
this.sceneTreeView.HideSelection = false;
|
||||
this.sceneTreeView.Location = new System.Drawing.Point(0, 21);
|
||||
this.sceneTreeView.Name = "sceneTreeView";
|
||||
this.sceneTreeView.Size = new System.Drawing.Size(410, 536);
|
||||
this.sceneTreeView.Size = new System.Drawing.Size(410, 587);
|
||||
this.sceneTreeView.TabIndex = 1;
|
||||
this.sceneTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.sceneTreeView_AfterCheck);
|
||||
//
|
||||
@@ -459,7 +445,7 @@
|
||||
this.treeSearch.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.treeSearch.Location = new System.Drawing.Point(0, 0);
|
||||
this.treeSearch.Name = "treeSearch";
|
||||
this.treeSearch.Size = new System.Drawing.Size(410, 20);
|
||||
this.treeSearch.Size = new System.Drawing.Size(410, 21);
|
||||
this.treeSearch.TabIndex = 0;
|
||||
this.treeSearch.Text = " Search ";
|
||||
this.treeSearch.TextChanged += new System.EventHandler(this.treeSearch_TextChanged);
|
||||
@@ -474,7 +460,7 @@
|
||||
this.tabPage2.Controls.Add(this.listSearch);
|
||||
this.tabPage2.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.Size = new System.Drawing.Size(410, 609);
|
||||
this.tabPage2.Size = new System.Drawing.Size(410, 608);
|
||||
this.tabPage2.TabIndex = 1;
|
||||
this.tabPage2.Text = "Asset List";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
@@ -491,9 +477,9 @@
|
||||
this.assetListView.GridLines = true;
|
||||
this.assetListView.HideSelection = false;
|
||||
this.assetListView.LabelEdit = true;
|
||||
this.assetListView.Location = new System.Drawing.Point(0, 20);
|
||||
this.assetListView.Location = new System.Drawing.Point(0, 21);
|
||||
this.assetListView.Name = "assetListView";
|
||||
this.assetListView.Size = new System.Drawing.Size(410, 589);
|
||||
this.assetListView.Size = new System.Drawing.Size(410, 587);
|
||||
this.assetListView.TabIndex = 1;
|
||||
this.assetListView.UseCompatibleStateImageBehavior = false;
|
||||
this.assetListView.View = System.Windows.Forms.View.Details;
|
||||
@@ -524,7 +510,7 @@
|
||||
this.listSearch.ForeColor = System.Drawing.SystemColors.GrayText;
|
||||
this.listSearch.Location = new System.Drawing.Point(0, 0);
|
||||
this.listSearch.Name = "listSearch";
|
||||
this.listSearch.Size = new System.Drawing.Size(410, 20);
|
||||
this.listSearch.Size = new System.Drawing.Size(410, 21);
|
||||
this.listSearch.TabIndex = 0;
|
||||
this.listSearch.Text = " Filter ";
|
||||
this.listSearch.TextChanged += new System.EventHandler(this.ListSearchTextChanged);
|
||||
@@ -535,25 +521,25 @@
|
||||
//
|
||||
this.progressbarPanel.Controls.Add(this.progressBar1);
|
||||
this.progressbarPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.progressbarPanel.Location = new System.Drawing.Point(0, 635);
|
||||
this.progressbarPanel.Location = new System.Drawing.Point(0, 634);
|
||||
this.progressbarPanel.Name = "progressbarPanel";
|
||||
this.progressbarPanel.Padding = new System.Windows.Forms.Padding(1, 3, 1, 1);
|
||||
this.progressbarPanel.Size = new System.Drawing.Size(418, 22);
|
||||
this.progressbarPanel.Size = new System.Drawing.Size(418, 20);
|
||||
this.progressbarPanel.TabIndex = 2;
|
||||
//
|
||||
// progressBar1
|
||||
//
|
||||
this.progressBar1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.progressBar1.Location = new System.Drawing.Point(1, 3);
|
||||
this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.progressBar1.Location = new System.Drawing.Point(1, 2);
|
||||
this.progressBar1.Name = "progressBar1";
|
||||
this.progressBar1.Size = new System.Drawing.Size(416, 18);
|
||||
this.progressBar1.Size = new System.Drawing.Size(416, 17);
|
||||
this.progressBar1.Step = 1;
|
||||
this.progressBar1.TabIndex = 1;
|
||||
//
|
||||
// previewPanel
|
||||
//
|
||||
this.previewPanel.BackColor = System.Drawing.SystemColors.ControlDark;
|
||||
this.previewPanel.BackgroundImage = global::Unity_Studio.Properties.Resources.preview;
|
||||
this.previewPanel.BackgroundImage = global::AssetStudio.Properties.Resources.preview;
|
||||
this.previewPanel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
||||
this.previewPanel.Controls.Add(this.assetInfoLabel);
|
||||
this.previewPanel.Controls.Add(this.FMODpanel);
|
||||
@@ -563,7 +549,7 @@
|
||||
this.previewPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.previewPanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.previewPanel.Name = "previewPanel";
|
||||
this.previewPanel.Size = new System.Drawing.Size(838, 635);
|
||||
this.previewPanel.Size = new System.Drawing.Size(838, 632);
|
||||
this.previewPanel.TabIndex = 1;
|
||||
//
|
||||
// assetInfoLabel
|
||||
@@ -571,14 +557,13 @@
|
||||
this.assetInfoLabel.AutoSize = true;
|
||||
this.assetInfoLabel.BackColor = System.Drawing.Color.Transparent;
|
||||
this.assetInfoLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.assetInfoLabel.Location = new System.Drawing.Point(4, 8);
|
||||
this.assetInfoLabel.Location = new System.Drawing.Point(4, 7);
|
||||
this.assetInfoLabel.Name = "assetInfoLabel";
|
||||
this.assetInfoLabel.Size = new System.Drawing.Size(0, 13);
|
||||
this.assetInfoLabel.Size = new System.Drawing.Size(0, 12);
|
||||
this.assetInfoLabel.TabIndex = 0;
|
||||
//
|
||||
// FMODpanel
|
||||
//
|
||||
this.FMODpanel.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||
this.FMODpanel.BackColor = System.Drawing.SystemColors.ControlDark;
|
||||
this.FMODpanel.Controls.Add(this.FMODcopyright);
|
||||
this.FMODpanel.Controls.Add(this.FMODinfoLabel);
|
||||
@@ -590,9 +575,10 @@
|
||||
this.FMODpanel.Controls.Add(this.FMODstopButton);
|
||||
this.FMODpanel.Controls.Add(this.FMODpauseButton);
|
||||
this.FMODpanel.Controls.Add(this.FMODplayButton);
|
||||
this.FMODpanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.FMODpanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.FMODpanel.Name = "FMODpanel";
|
||||
this.FMODpanel.Size = new System.Drawing.Size(838, 635);
|
||||
this.FMODpanel.Size = new System.Drawing.Size(838, 632);
|
||||
this.FMODpanel.TabIndex = 2;
|
||||
this.FMODpanel.Visible = false;
|
||||
//
|
||||
@@ -600,26 +586,27 @@
|
||||
//
|
||||
this.FMODcopyright.AutoSize = true;
|
||||
this.FMODcopyright.ForeColor = System.Drawing.SystemColors.ControlLight;
|
||||
this.FMODcopyright.Location = new System.Drawing.Point(249, 380);
|
||||
this.FMODcopyright.Location = new System.Drawing.Point(249, 351);
|
||||
this.FMODcopyright.Name = "FMODcopyright";
|
||||
this.FMODcopyright.Size = new System.Drawing.Size(283, 13);
|
||||
this.FMODcopyright.Size = new System.Drawing.Size(341, 12);
|
||||
this.FMODcopyright.TabIndex = 9;
|
||||
this.FMODcopyright.Text = "Audio Engine supplied by FMOD by Firelight Technologies.";
|
||||
//
|
||||
// FMODinfoLabel
|
||||
//
|
||||
this.FMODinfoLabel.AutoSize = true;
|
||||
this.FMODinfoLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.FMODinfoLabel.Location = new System.Drawing.Point(305, 271);
|
||||
this.FMODinfoLabel.Location = new System.Drawing.Point(305, 250);
|
||||
this.FMODinfoLabel.Name = "FMODinfoLabel";
|
||||
this.FMODinfoLabel.Size = new System.Drawing.Size(176, 13);
|
||||
this.FMODinfoLabel.Size = new System.Drawing.Size(0, 12);
|
||||
this.FMODinfoLabel.TabIndex = 8;
|
||||
//
|
||||
// FMODtimerLabel
|
||||
//
|
||||
this.FMODtimerLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.FMODtimerLabel.Location = new System.Drawing.Point(435, 271);
|
||||
this.FMODtimerLabel.Location = new System.Drawing.Point(440, 250);
|
||||
this.FMODtimerLabel.Name = "FMODtimerLabel";
|
||||
this.FMODtimerLabel.Size = new System.Drawing.Size(158, 13);
|
||||
this.FMODtimerLabel.Size = new System.Drawing.Size(155, 12);
|
||||
this.FMODtimerLabel.TabIndex = 7;
|
||||
this.FMODtimerLabel.Text = "0:00.0 / 0:00.0";
|
||||
this.FMODtimerLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||
@@ -627,19 +614,19 @@
|
||||
// FMODstatusLabel
|
||||
//
|
||||
this.FMODstatusLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.FMODstatusLabel.Location = new System.Drawing.Point(249, 271);
|
||||
this.FMODstatusLabel.Location = new System.Drawing.Point(249, 250);
|
||||
this.FMODstatusLabel.Name = "FMODstatusLabel";
|
||||
this.FMODstatusLabel.Size = new System.Drawing.Size(50, 13);
|
||||
this.FMODstatusLabel.Size = new System.Drawing.Size(50, 12);
|
||||
this.FMODstatusLabel.TabIndex = 6;
|
||||
this.FMODstatusLabel.Text = "Stopped";
|
||||
//
|
||||
// FMODprogressBar
|
||||
//
|
||||
this.FMODprogressBar.AutoSize = false;
|
||||
this.FMODprogressBar.Location = new System.Drawing.Point(252, 290);
|
||||
this.FMODprogressBar.Location = new System.Drawing.Point(249, 268);
|
||||
this.FMODprogressBar.Maximum = 1000;
|
||||
this.FMODprogressBar.Name = "FMODprogressBar";
|
||||
this.FMODprogressBar.Size = new System.Drawing.Size(348, 24);
|
||||
this.FMODprogressBar.Size = new System.Drawing.Size(350, 22);
|
||||
this.FMODprogressBar.TabIndex = 5;
|
||||
this.FMODprogressBar.TickStyle = System.Windows.Forms.TickStyle.None;
|
||||
this.FMODprogressBar.Scroll += new System.EventHandler(this.FMODprogressBar_Scroll);
|
||||
@@ -649,7 +636,7 @@
|
||||
// FMODvolumeBar
|
||||
//
|
||||
this.FMODvolumeBar.LargeChange = 2;
|
||||
this.FMODvolumeBar.Location = new System.Drawing.Point(496, 320);
|
||||
this.FMODvolumeBar.Location = new System.Drawing.Point(496, 295);
|
||||
this.FMODvolumeBar.Name = "FMODvolumeBar";
|
||||
this.FMODvolumeBar.Size = new System.Drawing.Size(104, 45);
|
||||
this.FMODvolumeBar.TabIndex = 4;
|
||||
@@ -660,9 +647,9 @@
|
||||
// FMODloopButton
|
||||
//
|
||||
this.FMODloopButton.Appearance = System.Windows.Forms.Appearance.Button;
|
||||
this.FMODloopButton.Location = new System.Drawing.Point(435, 320);
|
||||
this.FMODloopButton.Location = new System.Drawing.Point(435, 295);
|
||||
this.FMODloopButton.Name = "FMODloopButton";
|
||||
this.FMODloopButton.Size = new System.Drawing.Size(55, 46);
|
||||
this.FMODloopButton.Size = new System.Drawing.Size(55, 42);
|
||||
this.FMODloopButton.TabIndex = 3;
|
||||
this.FMODloopButton.Text = "Loop";
|
||||
this.FMODloopButton.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
@@ -671,9 +658,9 @@
|
||||
//
|
||||
// FMODstopButton
|
||||
//
|
||||
this.FMODstopButton.Location = new System.Drawing.Point(374, 320);
|
||||
this.FMODstopButton.Location = new System.Drawing.Point(374, 295);
|
||||
this.FMODstopButton.Name = "FMODstopButton";
|
||||
this.FMODstopButton.Size = new System.Drawing.Size(55, 46);
|
||||
this.FMODstopButton.Size = new System.Drawing.Size(55, 42);
|
||||
this.FMODstopButton.TabIndex = 2;
|
||||
this.FMODstopButton.Text = "Stop";
|
||||
this.FMODstopButton.UseVisualStyleBackColor = true;
|
||||
@@ -681,9 +668,9 @@
|
||||
//
|
||||
// FMODpauseButton
|
||||
//
|
||||
this.FMODpauseButton.Location = new System.Drawing.Point(313, 320);
|
||||
this.FMODpauseButton.Location = new System.Drawing.Point(313, 295);
|
||||
this.FMODpauseButton.Name = "FMODpauseButton";
|
||||
this.FMODpauseButton.Size = new System.Drawing.Size(55, 46);
|
||||
this.FMODpauseButton.Size = new System.Drawing.Size(55, 42);
|
||||
this.FMODpauseButton.TabIndex = 1;
|
||||
this.FMODpauseButton.Text = "Pause";
|
||||
this.FMODpauseButton.UseVisualStyleBackColor = true;
|
||||
@@ -691,9 +678,9 @@
|
||||
//
|
||||
// FMODplayButton
|
||||
//
|
||||
this.FMODplayButton.Location = new System.Drawing.Point(252, 320);
|
||||
this.FMODplayButton.Location = new System.Drawing.Point(252, 295);
|
||||
this.FMODplayButton.Name = "FMODplayButton";
|
||||
this.FMODplayButton.Size = new System.Drawing.Size(55, 46);
|
||||
this.FMODplayButton.Size = new System.Drawing.Size(55, 42);
|
||||
this.FMODplayButton.TabIndex = 0;
|
||||
this.FMODplayButton.Text = "Play";
|
||||
this.FMODplayButton.UseVisualStyleBackColor = true;
|
||||
@@ -707,7 +694,7 @@
|
||||
this.fontPreviewBox.Name = "fontPreviewBox";
|
||||
this.fontPreviewBox.ReadOnly = true;
|
||||
this.fontPreviewBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
|
||||
this.fontPreviewBox.Size = new System.Drawing.Size(838, 635);
|
||||
this.fontPreviewBox.Size = new System.Drawing.Size(838, 632);
|
||||
this.fontPreviewBox.TabIndex = 0;
|
||||
this.fontPreviewBox.Text = resources.GetString("fontPreviewBox.Text");
|
||||
this.fontPreviewBox.Visible = false;
|
||||
@@ -722,7 +709,7 @@
|
||||
this.textPreviewBox.Name = "textPreviewBox";
|
||||
this.textPreviewBox.ReadOnly = true;
|
||||
this.textPreviewBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||
this.textPreviewBox.Size = new System.Drawing.Size(838, 635);
|
||||
this.textPreviewBox.Size = new System.Drawing.Size(838, 632);
|
||||
this.textPreviewBox.TabIndex = 2;
|
||||
this.textPreviewBox.Visible = false;
|
||||
this.textPreviewBox.WordWrap = false;
|
||||
@@ -733,10 +720,11 @@
|
||||
this.glControl1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.glControl1.Location = new System.Drawing.Point(0, 0);
|
||||
this.glControl1.Name = "glControl1";
|
||||
this.glControl1.Size = new System.Drawing.Size(838, 635);
|
||||
this.glControl1.Size = new System.Drawing.Size(838, 632);
|
||||
this.glControl1.TabIndex = 4;
|
||||
this.glControl1.VSync = false;
|
||||
this.glControl1.Paint += new System.Windows.Forms.PaintEventHandler(this.glControl1_Paint);
|
||||
this.glControl1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseWheel);
|
||||
//
|
||||
// classPreviewPanel
|
||||
//
|
||||
@@ -744,7 +732,7 @@
|
||||
this.classPreviewPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.classPreviewPanel.Location = new System.Drawing.Point(0, 0);
|
||||
this.classPreviewPanel.Name = "classPreviewPanel";
|
||||
this.classPreviewPanel.Size = new System.Drawing.Size(838, 635);
|
||||
this.classPreviewPanel.Size = new System.Drawing.Size(838, 632);
|
||||
this.classPreviewPanel.TabIndex = 3;
|
||||
this.classPreviewPanel.Visible = false;
|
||||
//
|
||||
@@ -756,7 +744,7 @@
|
||||
this.classTextBox.Name = "classTextBox";
|
||||
this.classTextBox.ReadOnly = true;
|
||||
this.classTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||
this.classTextBox.Size = new System.Drawing.Size(838, 635);
|
||||
this.classTextBox.Size = new System.Drawing.Size(838, 632);
|
||||
this.classTextBox.TabIndex = 3;
|
||||
this.classTextBox.WordWrap = false;
|
||||
//
|
||||
@@ -764,7 +752,7 @@
|
||||
//
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripStatusLabel1});
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 635);
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 632);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
this.statusStrip1.Size = new System.Drawing.Size(838, 22);
|
||||
this.statusStrip1.TabIndex = 2;
|
||||
@@ -820,71 +808,65 @@
|
||||
//
|
||||
this.timer.Interval = 10;
|
||||
this.timer.Tick += new System.EventHandler(this.timer_Tick);
|
||||
//
|
||||
//
|
||||
// timerOpenTK
|
||||
//
|
||||
this.timerOpenTK.Interval = 1000 / 6;
|
||||
//
|
||||
this.timerOpenTK.Interval = 166;
|
||||
this.timerOpenTK.Tick += new System.EventHandler(this.timerOpenTK_Tick);
|
||||
//
|
||||
// openFileDialog1
|
||||
//
|
||||
this.openFileDialog1.AddExtension = false;
|
||||
this.openFileDialog1.Filter = resources.GetString("openFileDialog1.Filter");
|
||||
this.openFileDialog1.Filter = "All types|*.*";
|
||||
this.openFileDialog1.Multiselect = true;
|
||||
this.openFileDialog1.RestoreDirectory = true;
|
||||
//
|
||||
// openFolderDialog1
|
||||
//
|
||||
this.openFolderDialog1.AddExtension = false;
|
||||
this.openFolderDialog1.CheckFileExists = false;
|
||||
this.openFolderDialog1.FileName = "Select folder";
|
||||
this.openFolderDialog1.Filter = "Folders|*.";
|
||||
this.openFolderDialog1.RestoreDirectory = true;
|
||||
this.openFolderDialog1.Title = "Browse for folder";
|
||||
//
|
||||
// saveFileDialog1
|
||||
//
|
||||
this.saveFileDialog1.Filter = "FBX file|*.fbx|Collada|*.dae";
|
||||
this.saveFileDialog1.Filter = "FBX file|*.fbx";
|
||||
this.saveFileDialog1.RestoreDirectory = true;
|
||||
//
|
||||
// saveFolderDialog1
|
||||
//
|
||||
this.saveFolderDialog1.AddExtension = false;
|
||||
this.saveFolderDialog1.FileName = "Select folder or write folder name to create";
|
||||
this.saveFolderDialog1.Filter = "Folders|*.";
|
||||
this.saveFolderDialog1.RestoreDirectory = true;
|
||||
this.saveFolderDialog1.Title = "Browse for folder";
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.showOriginalFileToolStripMenuItem});
|
||||
this.showOriginalFileToolStripMenuItem});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(202, 56);
|
||||
this.contextMenuStrip1.Size = new System.Drawing.Size(176, 26);
|
||||
//
|
||||
// showOriginalFileToolStripMenuItem
|
||||
//
|
||||
this.showOriginalFileToolStripMenuItem.Name = "showOriginalFileToolStripMenuItem";
|
||||
this.showOriginalFileToolStripMenuItem.Size = new System.Drawing.Size(201, 24);
|
||||
this.showOriginalFileToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
|
||||
this.showOriginalFileToolStripMenuItem.Text = "show original file";
|
||||
this.showOriginalFileToolStripMenuItem.Click += new System.EventHandler(this.showOriginalFileToolStripMenuItem_Click);
|
||||
//
|
||||
// UnityStudioForm
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6);
|
||||
//
|
||||
// animatorWithAnimationClipToolStripMenuItem
|
||||
//
|
||||
this.animatorWithAnimationClipToolStripMenuItem.Name = "animatorWithAnimationClipToolStripMenuItem";
|
||||
this.animatorWithAnimationClipToolStripMenuItem.Size = new System.Drawing.Size(240, 22);
|
||||
this.animatorWithAnimationClipToolStripMenuItem.Text = "Export Animator with AnimationClip";
|
||||
this.animatorWithAnimationClipToolStripMenuItem.Click += new System.EventHandler(this.ExportAnimatorwithAnimationClip_Click);
|
||||
//
|
||||
// AssetStudioForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1264, 683);
|
||||
this.ClientSize = new System.Drawing.Size(1264, 681);
|
||||
this.Controls.Add(this.splitContainer1);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.Icon = global::Unity_Studio.Properties.Resources.unity;
|
||||
this.KeyPreview = true;
|
||||
this.MainMenuStrip = this.menuStrip1;
|
||||
this.MinimumSize = new System.Drawing.Size(620, 400);
|
||||
this.Name = "UnityStudioForm";
|
||||
this.MinimumSize = new System.Drawing.Size(620, 372);
|
||||
this.Name = "AssetStudioForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Unity Studio";
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.UnityStudioForm_KeyDown);
|
||||
this.Text = "AssetStudio";
|
||||
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.AssetStudioForm_KeyDown);
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
this.splitContainer1.Panel1.ResumeLayout(false);
|
||||
@@ -898,7 +880,6 @@
|
||||
this.tabPage2.ResumeLayout(false);
|
||||
this.tabPage2.PerformLayout();
|
||||
this.progressbarPanel.ResumeLayout(false);
|
||||
this.glControl1.ResumeLayout(false);
|
||||
this.previewPanel.ResumeLayout(false);
|
||||
this.previewPanel.PerformLayout();
|
||||
this.FMODpanel.ResumeLayout(false);
|
||||
@@ -941,7 +922,7 @@
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
|
||||
private System.Windows.Forms.Panel progressbarPanel;
|
||||
private System.Windows.Forms.ToolStripMenuItem exportFilteredAssetsMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem _3DToolStripMenuItem;
|
||||
private System.Windows.Forms.Label assetInfoLabel;
|
||||
private System.Windows.Forms.TextBox textPreviewBox;
|
||||
private System.Windows.Forms.RichTextBox fontPreviewBox;
|
||||
@@ -957,7 +938,6 @@
|
||||
private System.Windows.Forms.Label FMODinfoLabel;
|
||||
private System.Windows.Forms.Timer timer;
|
||||
private System.Windows.Forms.Timer timerOpenTK;
|
||||
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem displayAll;
|
||||
private System.Windows.Forms.ToolStripMenuItem displayOriginalName;
|
||||
@@ -968,11 +948,8 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem extractFolderToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem exportAll3DMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem exportSelected3DMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.OpenFileDialog openFileDialog1;
|
||||
private System.Windows.Forms.OpenFileDialog openFolderDialog1;
|
||||
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
|
||||
private System.Windows.Forms.SaveFileDialog saveFolderDialog1;
|
||||
private System.Windows.Forms.ToolStripComboBox assetGroupOptions;
|
||||
private System.Windows.Forms.ToolStripMenuItem openAfterExport;
|
||||
private System.Windows.Forms.ToolStripMenuItem showExpOpt;
|
||||
@@ -995,6 +972,8 @@
|
||||
private OpenTK.GLControl glControl1;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem showOriginalFileToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem animatorWithAnimationClipToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -117,10 +117,9 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>325, 17</value>
|
||||
</data>
|
||||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>312, 17</value>
|
||||
</metadata>
|
||||
<data name="fontPreviewBox.Text" xml:space="preserve">
|
||||
<value>abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWYZ
|
||||
1234567890.:,;'\"(!?)+-*/=
|
||||
@@ -139,32 +138,28 @@ The quick brown fox jumps over the lazy dog. 1234567890
|
||||
|
||||
The quick brown fox jumps over the lazy dog. 1234567890</value>
|
||||
</data>
|
||||
<data name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>440, 17</value>
|
||||
</data>
|
||||
<data name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>556, 17</value>
|
||||
</data>
|
||||
<data name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>636, 17</value>
|
||||
</data>
|
||||
<data name="openFileDialog1.Filter" xml:space="preserve">
|
||||
<value>Unity asset files|*.*|Unity bundle files|*.*|Unity asset files|level*; globalgamemanagers; mainData; CustomAssetBundle-*; CAB-*; BuildPlayer-*; *.assets; *.sharedAssets|Unity bundle files|*.unity3d; *.unity3d.lz4; *.assetbundle; *.bundle; *.bytes</value>
|
||||
</data>
|
||||
<data name="openFolderDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>169, 17</value>
|
||||
</data>
|
||||
<data name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>776, 17</value>
|
||||
</data>
|
||||
<data name="saveFolderDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>432, 17</value>
|
||||
</metadata>
|
||||
<metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>553, 17</value>
|
||||
</metadata>
|
||||
<metadata name="timerOpenTK.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</data>
|
||||
<data name="treeTip.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>912, 17</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.TrayHeight" type="System.Int32, mscorlib">
|
||||
</metadata>
|
||||
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>636, 17</value>
|
||||
</metadata>
|
||||
<metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>784, 17</value>
|
||||
</metadata>
|
||||
<metadata name="treeTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>928, 17</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>147, 17</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>67</value>
|
||||
</data>
|
||||
</metadata>
|
||||
</root>
|
||||
31
AssetStudio/Classes/Animation.cs
Normal file
31
AssetStudio/Classes/Animation.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class Animation
|
||||
{
|
||||
public PPtr m_GameObject;
|
||||
public List<PPtr> m_Animations;
|
||||
|
||||
public Animation(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
reader.Position = preloadData.Offset;
|
||||
|
||||
m_GameObject = sourceFile.ReadPPtr();
|
||||
var m_Enabled = reader.ReadByte();
|
||||
reader.AlignStream(4);
|
||||
var m_Animation = sourceFile.ReadPPtr();
|
||||
int numAnimations = reader.ReadInt32();
|
||||
m_Animations = new List<PPtr>(numAnimations);
|
||||
for (int i = 0; i < numAnimations; i++)
|
||||
{
|
||||
m_Animations.Add(sourceFile.ReadPPtr());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
763
AssetStudio/Classes/AnimationClip.cs
Normal file
763
AssetStudio/Classes/AnimationClip.cs
Normal file
@@ -0,0 +1,763 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class Keyframe<T>
|
||||
{
|
||||
public float time { get; set; }
|
||||
public T value { get; set; }
|
||||
public T inSlope { get; set; }
|
||||
public T outSlope { get; set; }
|
||||
|
||||
public Keyframe(EndianBinaryReader reader, Func<T> readerFunc)
|
||||
{
|
||||
time = reader.ReadSingle();
|
||||
value = readerFunc();
|
||||
inSlope = readerFunc();
|
||||
outSlope = readerFunc();
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimationCurve<T>
|
||||
{
|
||||
public List<Keyframe<T>> m_Curve { get; set; }
|
||||
public int m_PreInfinity { get; set; }
|
||||
public int m_PostInfinity { get; set; }
|
||||
public int m_RotationOrder { get; set; }
|
||||
|
||||
public AnimationCurve(EndianBinaryReader reader, Func<T> readerFunc, int[] version)
|
||||
{
|
||||
int numCurves = reader.ReadInt32();
|
||||
m_Curve = new List<Keyframe<T>>(numCurves);
|
||||
for (int i = 0; i < numCurves; i++)
|
||||
{
|
||||
m_Curve.Add(new Keyframe<T>(reader, readerFunc));
|
||||
}
|
||||
|
||||
m_PreInfinity = reader.ReadInt32();
|
||||
m_PostInfinity = reader.ReadInt32();
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
{
|
||||
m_RotationOrder = reader.ReadInt32();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class QuaternionCurve
|
||||
{
|
||||
public AnimationCurve<Quaternion> curve { get; set; }
|
||||
public string path { get; set; }
|
||||
|
||||
public QuaternionCurve(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
curve = new AnimationCurve<Quaternion>(reader, reader.ReadQuaternion, version);
|
||||
path = reader.ReadAlignedString();
|
||||
}
|
||||
}
|
||||
|
||||
public class PackedBitVector
|
||||
{
|
||||
public uint m_NumItems { get; set; }
|
||||
public float m_Range { get; set; }
|
||||
public float m_Start { get; set; }
|
||||
public byte[] m_Data { get; set; }
|
||||
public byte m_BitSize { get; set; }
|
||||
|
||||
public PackedBitVector(EndianBinaryReader reader)
|
||||
{
|
||||
m_NumItems = reader.ReadUInt32();
|
||||
m_Range = reader.ReadSingle();
|
||||
m_Start = reader.ReadSingle();
|
||||
|
||||
int numData = reader.ReadInt32();
|
||||
m_Data = reader.ReadBytes(numData);
|
||||
reader.AlignStream(4);
|
||||
|
||||
m_BitSize = reader.ReadByte();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class PackedBitVector2
|
||||
{
|
||||
public uint m_NumItems { get; set; }
|
||||
public byte[] m_Data { get; set; }
|
||||
public byte m_BitSize { get; set; }
|
||||
|
||||
public PackedBitVector2(EndianBinaryReader reader)
|
||||
{
|
||||
m_NumItems = reader.ReadUInt32();
|
||||
|
||||
int numData = reader.ReadInt32();
|
||||
m_Data = reader.ReadBytes(numData);
|
||||
reader.AlignStream(4);
|
||||
|
||||
m_BitSize = reader.ReadByte();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class PackedBitVector3
|
||||
{
|
||||
public uint m_NumItems { get; set; }
|
||||
public byte[] m_Data { get; set; }
|
||||
|
||||
public PackedBitVector3(EndianBinaryReader reader)
|
||||
{
|
||||
m_NumItems = reader.ReadUInt32();
|
||||
|
||||
int numData = reader.ReadInt32();
|
||||
m_Data = reader.ReadBytes(numData);
|
||||
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class CompressedAnimationCurve
|
||||
{
|
||||
public string m_Path { get; set; }
|
||||
public PackedBitVector2 m_Times { get; set; }
|
||||
public PackedBitVector3 m_Values { get; set; }
|
||||
public PackedBitVector m_Slopes { get; set; }
|
||||
public int m_PreInfinity { get; set; }
|
||||
public int m_PostInfinity { get; set; }
|
||||
|
||||
public CompressedAnimationCurve(EndianBinaryReader reader)
|
||||
{
|
||||
m_Path = reader.ReadAlignedString();
|
||||
m_Times = new PackedBitVector2(reader);
|
||||
m_Values = new PackedBitVector3(reader);
|
||||
m_Slopes = new PackedBitVector(reader);
|
||||
m_PreInfinity = reader.ReadInt32();
|
||||
m_PostInfinity = reader.ReadInt32();
|
||||
}
|
||||
}
|
||||
|
||||
public class Vector3Curve
|
||||
{
|
||||
public AnimationCurve<Vector3> curve { get; set; }
|
||||
public string path { get; set; }
|
||||
|
||||
public Vector3Curve(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
curve = new AnimationCurve<Vector3>(reader, reader.ReadVector3, version);
|
||||
path = reader.ReadAlignedString();
|
||||
}
|
||||
}
|
||||
|
||||
public class FloatCurve
|
||||
{
|
||||
public AnimationCurve<float> curve { get; set; }
|
||||
public string attribute { get; set; }
|
||||
public string path { get; set; }
|
||||
public int classID { get; set; }
|
||||
public PPtr script { get; set; }
|
||||
|
||||
|
||||
public FloatCurve(AssetPreloadData preloadData)
|
||||
{
|
||||
var reader = preloadData.sourceFile.assetsFileReader;
|
||||
curve = new AnimationCurve<float>(reader, reader.ReadSingle, preloadData.sourceFile.version);
|
||||
attribute = reader.ReadAlignedString();
|
||||
path = reader.ReadAlignedString();
|
||||
classID = reader.ReadInt32();
|
||||
script = preloadData.sourceFile.ReadPPtr();
|
||||
}
|
||||
}
|
||||
|
||||
public class PPtrKeyframe
|
||||
{
|
||||
public float time { get; set; }
|
||||
public PPtr value { get; set; }
|
||||
|
||||
|
||||
public PPtrKeyframe(AssetPreloadData preloadData)
|
||||
{
|
||||
var reader = preloadData.sourceFile.assetsFileReader;
|
||||
time = reader.ReadSingle();
|
||||
value = preloadData.sourceFile.ReadPPtr();
|
||||
}
|
||||
}
|
||||
|
||||
public class PPtrCurve
|
||||
{
|
||||
public List<PPtrKeyframe> curve { get; set; }
|
||||
public string attribute { get; set; }
|
||||
public string path { get; set; }
|
||||
public int classID { get; set; }
|
||||
public PPtr script { get; set; }
|
||||
|
||||
|
||||
public PPtrCurve(AssetPreloadData preloadData)
|
||||
{
|
||||
var reader = preloadData.sourceFile.assetsFileReader;
|
||||
|
||||
int numCurves = reader.ReadInt32();
|
||||
curve = new List<PPtrKeyframe>(numCurves);
|
||||
for (int i = 0; i < numCurves; i++)
|
||||
{
|
||||
curve.Add(new PPtrKeyframe(preloadData));
|
||||
}
|
||||
|
||||
attribute = reader.ReadAlignedString();
|
||||
path = reader.ReadAlignedString();
|
||||
classID = reader.ReadInt32();
|
||||
script = preloadData.sourceFile.ReadPPtr();
|
||||
}
|
||||
}
|
||||
|
||||
public class AABB
|
||||
{
|
||||
public Vector3 m_Center { get; set; }
|
||||
public Vector3 m_Extend { get; set; }
|
||||
|
||||
public AABB(EndianBinaryReader reader)
|
||||
{
|
||||
m_Center = reader.ReadVector3();
|
||||
m_Extend = reader.ReadVector3();
|
||||
}
|
||||
}
|
||||
|
||||
public class xform
|
||||
{
|
||||
public object t { get; set; }
|
||||
public Quaternion q { get; set; }
|
||||
public object s { get; set; }
|
||||
|
||||
public xform(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
t = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||
q = reader.ReadQuaternion();
|
||||
s = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||
}
|
||||
}
|
||||
|
||||
public class HandPose
|
||||
{
|
||||
public xform m_GrabX { get; set; }
|
||||
public float[] m_DoFArray { get; set; }
|
||||
public float m_Override { get; set; }
|
||||
public float m_CloseOpen { get; set; }
|
||||
public float m_InOut { get; set; }
|
||||
public float m_Grab { get; set; }
|
||||
|
||||
public HandPose(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_GrabX = new xform(reader, version);
|
||||
|
||||
int numDoFs = reader.ReadInt32();
|
||||
m_DoFArray = reader.ReadSingleArray(numDoFs);
|
||||
|
||||
m_Override = reader.ReadSingle();
|
||||
m_CloseOpen = reader.ReadSingle();
|
||||
m_InOut = reader.ReadSingle();
|
||||
m_Grab = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
|
||||
public class HumanGoal
|
||||
{
|
||||
public xform m_X { get; set; }
|
||||
public float m_WeightT { get; set; }
|
||||
public float m_WeightR { get; set; }
|
||||
public object m_HintT { get; set; }
|
||||
public float m_HintWeightT { get; set; }
|
||||
|
||||
public HumanGoal(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_X = new xform(reader, version);
|
||||
m_WeightT = reader.ReadSingle();
|
||||
m_WeightR = reader.ReadSingle();
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
{
|
||||
m_HintT = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||
m_HintWeightT = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class HumanPose
|
||||
{
|
||||
public xform m_RootX { get; set; }
|
||||
public object m_LookAtPosition { get; set; }
|
||||
public Vector4 m_LookAtWeight { get; set; }
|
||||
public List<HumanGoal> m_GoalArray { get; set; }
|
||||
public HandPose m_LeftHandPose { get; set; }
|
||||
public HandPose m_RightHandPose { get; set; }
|
||||
public float[] m_DoFArray { get; set; }
|
||||
public object[] m_TDoFArray { get; set; }
|
||||
|
||||
public HumanPose(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_RootX = new xform(reader, version);
|
||||
m_LookAtPosition = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||
m_LookAtWeight = reader.ReadVector4();
|
||||
|
||||
int numGoals = reader.ReadInt32();
|
||||
m_GoalArray = new List<HumanGoal>(numGoals);
|
||||
for (int i = 0; i < numGoals; i++)
|
||||
{
|
||||
m_GoalArray.Add(new HumanGoal(reader, version));
|
||||
}
|
||||
|
||||
m_LeftHandPose = new HandPose(reader, version);
|
||||
m_RightHandPose = new HandPose(reader, version);
|
||||
|
||||
int numDoFs = reader.ReadInt32();
|
||||
m_DoFArray = reader.ReadSingleArray(numDoFs);
|
||||
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
{
|
||||
int numTDof = reader.ReadInt32();
|
||||
m_TDoFArray = new object[numTDof];
|
||||
for (int i = 0; i < numTDof; i++)
|
||||
{
|
||||
m_TDoFArray[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class StreamedClip
|
||||
{
|
||||
public uint[] data { get; set; }
|
||||
public uint curveCount { get; set; }
|
||||
|
||||
public StreamedClip(EndianBinaryReader reader)
|
||||
{
|
||||
int numData = reader.ReadInt32();
|
||||
data = reader.ReadUInt32Array(numData);
|
||||
curveCount = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public class StreamedCurveKey
|
||||
{
|
||||
public int index { get; set; }
|
||||
public Vector3 tcb { get; set; }
|
||||
public float value { get; set; }
|
||||
public StreamedCurveKey(BinaryReader reader)
|
||||
{
|
||||
index = reader.ReadInt32();
|
||||
tcb = reader.ReadVector3();
|
||||
value = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
|
||||
public class StreamedFrame
|
||||
{
|
||||
public float time { get; set; }
|
||||
public List<StreamedCurveKey> keyList { get; set; }
|
||||
|
||||
public StreamedFrame(BinaryReader reader)
|
||||
{
|
||||
time = reader.ReadSingle();
|
||||
|
||||
int numKeys = reader.ReadInt32();
|
||||
keyList = new List<StreamedCurveKey>(numKeys);
|
||||
for (int i = 0; i < numKeys; i++)
|
||||
{
|
||||
keyList.Add(new StreamedCurveKey(reader));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<StreamedFrame> ReadData()
|
||||
{
|
||||
List<StreamedFrame> frameList = new List<StreamedFrame>();
|
||||
using (Stream stream = new MemoryStream())
|
||||
{
|
||||
BinaryWriter writer = new BinaryWriter(stream);
|
||||
writer.Write(data);
|
||||
stream.Position = 0;
|
||||
while (stream.Position < stream.Length)
|
||||
{
|
||||
frameList.Add(new StreamedFrame(new BinaryReader(stream)));
|
||||
}
|
||||
}
|
||||
return frameList;
|
||||
}
|
||||
}
|
||||
|
||||
public class DenseClip
|
||||
{
|
||||
public int m_FrameCount { get; set; }
|
||||
public uint m_CurveCount { get; set; }
|
||||
public float m_SampleRate { get; set; }
|
||||
public float m_BeginTime { get; set; }
|
||||
public float[] m_SampleArray { get; set; }
|
||||
|
||||
public DenseClip(EndianBinaryReader reader)
|
||||
{
|
||||
m_FrameCount = reader.ReadInt32();
|
||||
m_CurveCount = reader.ReadUInt32();
|
||||
m_SampleRate = reader.ReadSingle();
|
||||
m_BeginTime = reader.ReadSingle();
|
||||
|
||||
int numSamples = reader.ReadInt32();
|
||||
m_SampleArray = reader.ReadSingleArray(numSamples);
|
||||
}
|
||||
}
|
||||
|
||||
public class ConstantClip
|
||||
{
|
||||
public float[] data { get; set; }
|
||||
|
||||
public ConstantClip(EndianBinaryReader reader)
|
||||
{
|
||||
int numData = reader.ReadInt32();
|
||||
data = reader.ReadSingleArray(numData);
|
||||
}
|
||||
}
|
||||
|
||||
public class ValueConstant
|
||||
{
|
||||
public uint m_ID { get; set; }
|
||||
public uint m_TypeID { get; set; }
|
||||
public uint m_Type { get; set; }
|
||||
public uint m_Index { get; set; }
|
||||
|
||||
public ValueConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_ID = reader.ReadUInt32();
|
||||
if (version[0] < 5 || (version[0] == 5 && version[1] < 5))//5.5 down
|
||||
{
|
||||
m_TypeID = reader.ReadUInt32();
|
||||
}
|
||||
m_Type = reader.ReadUInt32();
|
||||
m_Index = reader.ReadUInt32();
|
||||
}
|
||||
}
|
||||
|
||||
public class ValueArrayConstant
|
||||
{
|
||||
public List<ValueConstant> m_ValueArray { get; set; }
|
||||
|
||||
public ValueArrayConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
int numVals = reader.ReadInt32();
|
||||
m_ValueArray = new List<ValueConstant>(numVals);
|
||||
for (int i = 0; i < numVals; i++)
|
||||
{
|
||||
m_ValueArray.Add(new ValueConstant(reader, version));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Clip
|
||||
{
|
||||
public StreamedClip m_StreamedClip { get; set; }
|
||||
public DenseClip m_DenseClip { get; set; }
|
||||
public ConstantClip m_ConstantClip { get; set; }
|
||||
public ValueArrayConstant m_Binding { get; set; }
|
||||
|
||||
public Clip(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_StreamedClip = new StreamedClip(reader);
|
||||
m_DenseClip = new DenseClip(reader);
|
||||
m_ConstantClip = new ConstantClip(reader);
|
||||
m_Binding = new ValueArrayConstant(reader, version);
|
||||
}
|
||||
}
|
||||
|
||||
public class ValueDelta
|
||||
{
|
||||
public float m_Start { get; set; }
|
||||
public float m_Stop { get; set; }
|
||||
|
||||
public ValueDelta(EndianBinaryReader reader)
|
||||
{
|
||||
m_Start = reader.ReadSingle();
|
||||
m_Stop = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
|
||||
public class ClipMuscleConstant
|
||||
{
|
||||
public HumanPose m_DeltaPose { get; set; }
|
||||
public xform m_StartX { get; set; }
|
||||
public xform m_StopX { get; set; }
|
||||
public xform m_LeftFootStartX { get; set; }
|
||||
public xform m_RightFootStartX { get; set; }
|
||||
public xform m_MotionStartX { get; set; }
|
||||
public xform m_MotionStopX { get; set; }
|
||||
public object m_AverageSpeed { get; set; }
|
||||
public Clip m_Clip { get; set; }
|
||||
public float m_StartTime { get; set; }
|
||||
public float m_StopTime { get; set; }
|
||||
public float m_OrientationOffsetY { get; set; }
|
||||
public float m_Level { get; set; }
|
||||
public float m_CycleOffset { get; set; }
|
||||
public float m_AverageAngularSpeed { get; set; }
|
||||
public int[] m_IndexArray { get; set; }
|
||||
public List<ValueDelta> m_ValueArrayDelta { get; set; }
|
||||
public float[] m_ValueArrayReferencePose { get; set; }
|
||||
public bool m_Mirror { get; set; }
|
||||
public bool m_LoopTime { get; set; }
|
||||
public bool m_LoopBlend { get; set; }
|
||||
public bool m_LoopBlendOrientation { get; set; }
|
||||
public bool m_LoopBlendPositionY { get; set; }
|
||||
public bool m_LoopBlendPositionXZ { get; set; }
|
||||
public bool m_StartAtOrigin { get; set; }
|
||||
public bool m_KeepOriginalOrientation { get; set; }
|
||||
public bool m_KeepOriginalPositionY { get; set; }
|
||||
public bool m_KeepOriginalPositionXZ { get; set; }
|
||||
public bool m_HeightFromFeet { get; set; }
|
||||
|
||||
public ClipMuscleConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_DeltaPose = new HumanPose(reader, version);
|
||||
m_StartX = new xform(reader, version);
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
||||
{
|
||||
m_StopX = new xform(reader, version);
|
||||
}
|
||||
m_LeftFootStartX = new xform(reader, version);
|
||||
m_RightFootStartX = new xform(reader, version);
|
||||
if (version[0] < 5)//5.0 down
|
||||
{
|
||||
m_MotionStartX = new xform(reader, version);
|
||||
m_MotionStopX = new xform(reader, version);
|
||||
}
|
||||
m_AverageSpeed = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4();//5.4 and up
|
||||
m_Clip = new Clip(reader, version);
|
||||
m_StartTime = reader.ReadSingle();
|
||||
m_StopTime = reader.ReadSingle();
|
||||
m_OrientationOffsetY = reader.ReadSingle();
|
||||
m_Level = reader.ReadSingle();
|
||||
m_CycleOffset = reader.ReadSingle();
|
||||
m_AverageAngularSpeed = reader.ReadSingle();
|
||||
|
||||
int numIndices = reader.ReadInt32();
|
||||
m_IndexArray = reader.ReadInt32Array(numIndices);
|
||||
|
||||
int numDeltas = reader.ReadInt32();
|
||||
m_ValueArrayDelta = new List<ValueDelta>(numDeltas);
|
||||
for (int i = 0; i < numDeltas; i++)
|
||||
{
|
||||
m_ValueArrayDelta.Add(new ValueDelta(reader));
|
||||
}
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
{
|
||||
m_ValueArrayReferencePose = reader.ReadSingleArray(reader.ReadInt32());
|
||||
}
|
||||
|
||||
m_Mirror = reader.ReadBoolean();
|
||||
m_LoopTime = reader.ReadBoolean();
|
||||
m_LoopBlend = reader.ReadBoolean();
|
||||
m_LoopBlendOrientation = reader.ReadBoolean();
|
||||
m_LoopBlendPositionY = reader.ReadBoolean();
|
||||
m_LoopBlendPositionXZ = reader.ReadBoolean();
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5))//5.5 and up
|
||||
{
|
||||
m_StartAtOrigin = reader.ReadBoolean();
|
||||
}
|
||||
m_KeepOriginalOrientation = reader.ReadBoolean();
|
||||
m_KeepOriginalPositionY = reader.ReadBoolean();
|
||||
m_KeepOriginalPositionXZ = reader.ReadBoolean();
|
||||
m_HeightFromFeet = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class GenericBinding
|
||||
{
|
||||
public uint path { get; set; }
|
||||
public uint attribute { get; set; }
|
||||
public PPtr script { get; set; }
|
||||
public int typeID { get; set; }
|
||||
public byte customType { get; set; }
|
||||
public byte isPPtrCurve { get; set; }
|
||||
|
||||
public GenericBinding(AssetPreloadData preloadData)
|
||||
{
|
||||
var reader = preloadData.sourceFile.assetsFileReader;
|
||||
var version = preloadData.sourceFile.version;
|
||||
path = reader.ReadUInt32();
|
||||
attribute = reader.ReadUInt32();
|
||||
script = preloadData.sourceFile.ReadPPtr();
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
||||
{
|
||||
typeID = reader.ReadInt32();
|
||||
}
|
||||
else
|
||||
{
|
||||
typeID = reader.ReadUInt16();
|
||||
}
|
||||
customType = reader.ReadByte();
|
||||
isPPtrCurve = reader.ReadByte();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimationClipBindingConstant
|
||||
{
|
||||
public List<GenericBinding> genericBindings { get; set; }
|
||||
public List<PPtr> pptrCurveMapping { get; set; }
|
||||
|
||||
public AnimationClipBindingConstant(AssetPreloadData preloadData)
|
||||
{
|
||||
var reader = preloadData.sourceFile.assetsFileReader;
|
||||
int numBindings = reader.ReadInt32();
|
||||
genericBindings = new List<GenericBinding>(numBindings);
|
||||
for (int i = 0; i < numBindings; i++)
|
||||
{
|
||||
genericBindings.Add(new GenericBinding(preloadData));
|
||||
}
|
||||
|
||||
int numMappings = reader.ReadInt32();
|
||||
pptrCurveMapping = new List<PPtr>(numMappings);
|
||||
for (int i = 0; i < numMappings; i++)
|
||||
{
|
||||
pptrCurveMapping.Add(preloadData.sourceFile.ReadPPtr());
|
||||
}
|
||||
}
|
||||
|
||||
public GenericBinding FindBinding(int index)
|
||||
{
|
||||
int curves = 0;
|
||||
for (int i = 0; i < genericBindings.Count; i++)
|
||||
{
|
||||
GenericBinding b = genericBindings[i];
|
||||
curves += b.attribute == 2 ? 4 : b.attribute <= 4 ? 3 : 1;
|
||||
if (curves > index)
|
||||
{
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public GenericBinding FindBinding(uint path, uint attribute)
|
||||
{
|
||||
return genericBindings.Find
|
||||
(
|
||||
delegate (GenericBinding b)
|
||||
{
|
||||
return b.path == path && b.attribute == attribute;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimationClip
|
||||
{
|
||||
public string m_Name { get; set; }
|
||||
public int m_AnimationType { get; set; }
|
||||
public bool m_Legacy { get; set; }
|
||||
public bool m_Compressed { get; set; }
|
||||
public bool m_UseHighQualityCurve { get; set; }
|
||||
public List<QuaternionCurve> m_RotationCurves { get; set; }
|
||||
public List<CompressedAnimationCurve> m_CompressedRotationCurves { get; set; }
|
||||
public List<Vector3Curve> m_EulerCurves { get; set; }
|
||||
public List<Vector3Curve> m_PositionCurves { get; set; }
|
||||
public List<Vector3Curve> m_ScaleCurves { get; set; }
|
||||
public List<FloatCurve> m_FloatCurves { get; set; }
|
||||
public List<PPtrCurve> m_PPtrCurves { get; set; }
|
||||
public float m_SampleRate { get; set; }
|
||||
public int m_WrapMode { get; set; }
|
||||
public AABB m_Bounds { get; set; }
|
||||
public uint m_MuscleClipSize { get; set; }
|
||||
public ClipMuscleConstant m_MuscleClip { get; set; }
|
||||
public AnimationClipBindingConstant m_ClipBindingConstant { get; set; }
|
||||
//public List<AnimationEvent> m_Events { get; set; }
|
||||
|
||||
|
||||
public AnimationClip(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var version = sourceFile.version;
|
||||
var reader = preloadData.InitReader();
|
||||
reader.Position = preloadData.Offset;
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
{
|
||||
m_Legacy = reader.ReadBoolean();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_AnimationType = reader.ReadInt32();
|
||||
}
|
||||
m_Compressed = reader.ReadBoolean();
|
||||
m_UseHighQualityCurve = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
if (m_Compressed)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
int numRCurves = reader.ReadInt32();
|
||||
m_RotationCurves = new List<QuaternionCurve>(numRCurves);
|
||||
for (int i = 0; i < numRCurves; i++)
|
||||
{
|
||||
m_RotationCurves.Add(new QuaternionCurve(reader, version));
|
||||
}
|
||||
|
||||
int numCRCurves = reader.ReadInt32();
|
||||
m_CompressedRotationCurves = new List<CompressedAnimationCurve>(numCRCurves);
|
||||
for (int i = 0; i < numCRCurves; i++)
|
||||
{
|
||||
m_CompressedRotationCurves.Add(new CompressedAnimationCurve(reader));
|
||||
}
|
||||
|
||||
if (version[0] >= 5)//5.0 and up
|
||||
{
|
||||
int numEulerCurves = reader.ReadInt32();
|
||||
m_EulerCurves = new List<Vector3Curve>(numEulerCurves);
|
||||
for (int i = 0; i < numEulerCurves; i++)
|
||||
{
|
||||
m_EulerCurves.Add(new Vector3Curve(reader, version));
|
||||
}
|
||||
}
|
||||
|
||||
int numPCurves = reader.ReadInt32();
|
||||
m_PositionCurves = new List<Vector3Curve>(numPCurves);
|
||||
for (int i = 0; i < numPCurves; i++)
|
||||
{
|
||||
m_PositionCurves.Add(new Vector3Curve(reader, version));
|
||||
}
|
||||
|
||||
int numSCurves = reader.ReadInt32();
|
||||
m_ScaleCurves = new List<Vector3Curve>(numSCurves);
|
||||
for (int i = 0; i < numSCurves; i++)
|
||||
{
|
||||
m_ScaleCurves.Add(new Vector3Curve(reader, version));
|
||||
}
|
||||
|
||||
int numFCurves = reader.ReadInt32();
|
||||
m_FloatCurves = new List<FloatCurve>(numFCurves);
|
||||
for (int i = 0; i < numFCurves; i++)
|
||||
{
|
||||
m_FloatCurves.Add(new FloatCurve(preloadData));
|
||||
}
|
||||
|
||||
int numPtrCurves = reader.ReadInt32();
|
||||
m_PPtrCurves = new List<PPtrCurve>(numPtrCurves);
|
||||
for (int i = 0; i < numPtrCurves; i++)
|
||||
{
|
||||
m_PPtrCurves.Add(new PPtrCurve(preloadData));
|
||||
}
|
||||
|
||||
m_SampleRate = reader.ReadSingle();
|
||||
m_WrapMode = reader.ReadInt32();
|
||||
m_Bounds = new AABB(reader);
|
||||
m_MuscleClipSize = reader.ReadUInt32();
|
||||
m_MuscleClip = new ClipMuscleConstant(reader, version);
|
||||
m_ClipBindingConstant = new AnimationClipBindingConstant(preloadData);
|
||||
|
||||
/*int numEvents = reader.ReadInt32();
|
||||
m_Events = new List<AnimationEvent>(numEvents);
|
||||
for (int i = 0; i < numEvents; i++)
|
||||
{
|
||||
m_Events.Add(new AnimationEvent(stream, file.Version[0] - '0'));
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
27
AssetStudio/Classes/Animator.cs
Normal file
27
AssetStudio/Classes/Animator.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class Animator
|
||||
{
|
||||
public PPtr m_GameObject;
|
||||
public PPtr m_Avatar;
|
||||
public PPtr m_Controller;
|
||||
|
||||
public Animator(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
reader.Position = preloadData.Offset;
|
||||
|
||||
m_GameObject = sourceFile.ReadPPtr();
|
||||
var m_Enabled = reader.ReadByte();
|
||||
reader.AlignStream(4);
|
||||
m_Avatar = sourceFile.ReadPPtr();
|
||||
m_Controller = sourceFile.ReadPPtr();
|
||||
}
|
||||
}
|
||||
}
|
||||
560
AssetStudio/Classes/AnimatorController.cs
Normal file
560
AssetStudio/Classes/AnimatorController.cs
Normal file
@@ -0,0 +1,560 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class HumanPoseMask
|
||||
{
|
||||
public uint word0 { get; set; }
|
||||
public uint word1 { get; set; }
|
||||
public uint word2 { get; set; }
|
||||
|
||||
public HumanPoseMask(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
word0 = reader.ReadUInt32();
|
||||
word1 = reader.ReadUInt32();
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
word2 = reader.ReadUInt32();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SkeletonMaskElement
|
||||
{
|
||||
public uint m_PathHash { get; set; }
|
||||
public float m_Weight { get; set; }
|
||||
|
||||
public SkeletonMaskElement(EndianBinaryReader reader)
|
||||
{
|
||||
m_PathHash = reader.ReadUInt32();
|
||||
m_Weight = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
|
||||
public class SkeletonMask
|
||||
{
|
||||
public SkeletonMaskElement[] m_Data { get; set; }
|
||||
|
||||
public SkeletonMask(EndianBinaryReader reader)
|
||||
{
|
||||
int numElements = reader.ReadInt32();
|
||||
m_Data = new SkeletonMaskElement[numElements];
|
||||
for (int i = 0; i < numElements; i++)
|
||||
{
|
||||
m_Data[i] = new SkeletonMaskElement(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class LayerConstant
|
||||
{
|
||||
public uint m_StateMachineIndex { get; set; }
|
||||
public uint m_StateMachineMotionSetIndex { get; set; }
|
||||
public HumanPoseMask m_BodyMask { get; set; }
|
||||
public SkeletonMask m_SkeletonMask { get; set; }
|
||||
public uint m_Binding { get; set; }
|
||||
public int m_LayerBlendingMode { get; set; }
|
||||
public float m_DefaultWeight { get; set; }
|
||||
public bool m_IKPass { get; set; }
|
||||
public bool m_SyncedLayerAffectsTiming { get; set; }
|
||||
|
||||
public LayerConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_StateMachineIndex = reader.ReadUInt32();
|
||||
m_StateMachineMotionSetIndex = reader.ReadUInt32();
|
||||
m_BodyMask = new HumanPoseMask(reader, version);
|
||||
m_SkeletonMask = new SkeletonMask(reader);
|
||||
m_Binding = reader.ReadUInt32();
|
||||
m_LayerBlendingMode = reader.ReadInt32();
|
||||
m_DefaultWeight = reader.ReadSingle();
|
||||
m_IKPass = reader.ReadBoolean();
|
||||
m_SyncedLayerAffectsTiming = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class ConditionConstant
|
||||
{
|
||||
public uint m_ConditionMode { get; set; }
|
||||
public uint m_EventID { get; set; }
|
||||
public float m_EventThreshold { get; set; }
|
||||
public float m_ExitTime { get; set; }
|
||||
|
||||
public ConditionConstant(EndianBinaryReader reader)
|
||||
{
|
||||
m_ConditionMode = reader.ReadUInt32();
|
||||
m_EventID = reader.ReadUInt32();
|
||||
m_EventThreshold = reader.ReadSingle();
|
||||
m_ExitTime = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
|
||||
public class TransitionConstant
|
||||
{
|
||||
public ConditionConstant[] m_ConditionConstantArray { get; set; }
|
||||
public uint m_DestinationState { get; set; }
|
||||
public uint m_FullPathID { get; set; }
|
||||
public uint m_ID { get; set; }
|
||||
public uint m_UserID { get; set; }
|
||||
public float m_TransitionDuration { get; set; }
|
||||
public float m_TransitionOffset { get; set; }
|
||||
public float m_ExitTime { get; set; }
|
||||
public bool m_HasExitTime { get; set; }
|
||||
public bool m_HasFixedDuration { get; set; }
|
||||
public int m_InterruptionSource { get; set; }
|
||||
public bool m_OrderedInterruption { get; set; }
|
||||
public bool m_Atomic { get; set; }
|
||||
public bool m_CanTransitionToSelf { get; set; }
|
||||
|
||||
public TransitionConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
int numConditions = reader.ReadInt32();
|
||||
m_ConditionConstantArray = new ConditionConstant[numConditions];
|
||||
for (int i = 0; i < numConditions; i++)
|
||||
{
|
||||
m_ConditionConstantArray[i] = new ConditionConstant(reader);
|
||||
}
|
||||
|
||||
m_DestinationState = reader.ReadUInt32();
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
m_FullPathID = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
m_ID = reader.ReadUInt32();
|
||||
m_UserID = reader.ReadUInt32();
|
||||
m_TransitionDuration = reader.ReadSingle();
|
||||
m_TransitionOffset = reader.ReadSingle();
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
m_ExitTime = reader.ReadSingle();
|
||||
m_HasExitTime = reader.ReadBoolean();
|
||||
m_HasFixedDuration = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
m_InterruptionSource = reader.ReadInt32();
|
||||
m_OrderedInterruption = reader.ReadBoolean();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Atomic = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
m_CanTransitionToSelf = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class LeafInfoConstant
|
||||
{
|
||||
public uint[] m_IDArray { get; set; }
|
||||
public uint m_IndexOffset { get; set; }
|
||||
|
||||
public LeafInfoConstant(EndianBinaryReader reader)
|
||||
{
|
||||
m_IDArray = reader.ReadUInt32Array(reader.ReadInt32());
|
||||
m_IndexOffset = reader.ReadUInt32();
|
||||
}
|
||||
}
|
||||
|
||||
public class MotionNeighborList
|
||||
{
|
||||
public uint[] m_NeighborArray { get; set; }
|
||||
|
||||
public MotionNeighborList(EndianBinaryReader reader)
|
||||
{
|
||||
m_NeighborArray = reader.ReadUInt32Array(reader.ReadInt32());
|
||||
}
|
||||
}
|
||||
|
||||
public class Blend2dDataConstant
|
||||
{
|
||||
public Vector2[] m_ChildPositionArray { get; set; }
|
||||
public float[] m_ChildMagnitudeArray { get; set; }
|
||||
public Vector2[] m_ChildPairVectorArray { get; set; }
|
||||
public float[] m_ChildPairAvgMagInvArray { get; set; }
|
||||
public MotionNeighborList[] m_ChildNeighborListArray { get; set; }
|
||||
|
||||
public Blend2dDataConstant(EndianBinaryReader reader)
|
||||
{
|
||||
m_ChildPositionArray = reader.ReadVector2Array(reader.ReadInt32());
|
||||
m_ChildMagnitudeArray = reader.ReadSingleArray(reader.ReadInt32());
|
||||
m_ChildPairVectorArray = reader.ReadVector2Array(reader.ReadInt32());
|
||||
m_ChildPairAvgMagInvArray = reader.ReadSingleArray(reader.ReadInt32());
|
||||
|
||||
int numNeighbours = reader.ReadInt32();
|
||||
m_ChildNeighborListArray = new MotionNeighborList[numNeighbours];
|
||||
for (int i = 0; i < numNeighbours; i++)
|
||||
{
|
||||
m_ChildNeighborListArray[i] = new MotionNeighborList(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Blend1dDataConstant // wrong labeled
|
||||
{
|
||||
public float[] m_ChildThresholdArray { get; set; }
|
||||
|
||||
public Blend1dDataConstant(EndianBinaryReader reader)
|
||||
{
|
||||
m_ChildThresholdArray = reader.ReadSingleArray(reader.ReadInt32());
|
||||
}
|
||||
}
|
||||
|
||||
public class BlendDirectDataConstant
|
||||
{
|
||||
public uint[] m_ChildBlendEventIDArray { get; set; }
|
||||
public bool m_NormalizedBlendValues { get; set; }
|
||||
|
||||
public BlendDirectDataConstant(EndianBinaryReader reader)
|
||||
{
|
||||
m_ChildBlendEventIDArray = reader.ReadUInt32Array(reader.ReadInt32());
|
||||
m_NormalizedBlendValues = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class BlendTreeNodeConstant
|
||||
{
|
||||
public uint m_BlendType { get; set; }
|
||||
public uint m_BlendEventID { get; set; }
|
||||
public uint m_BlendEventYID { get; set; }
|
||||
public uint[] m_ChildIndices { get; set; }
|
||||
public Blend1dDataConstant m_Blend1dData { get; set; }
|
||||
public Blend2dDataConstant m_Blend2dData { get; set; }
|
||||
public BlendDirectDataConstant m_BlendDirectData { get; set; }
|
||||
public uint m_ClipID { get; set; }
|
||||
public uint m_ClipIndex { get; set; }
|
||||
public float m_Duration { get; set; }
|
||||
public float m_CycleOffset { get; set; }
|
||||
public bool m_Mirror { get; set; }
|
||||
|
||||
public BlendTreeNodeConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
m_BlendType = reader.ReadUInt32();
|
||||
m_BlendEventID = reader.ReadUInt32();
|
||||
m_BlendEventYID = reader.ReadUInt32();
|
||||
m_ChildIndices = reader.ReadUInt32Array(reader.ReadInt32());
|
||||
m_Blend1dData = new Blend1dDataConstant(reader);
|
||||
m_Blend2dData = new Blend2dDataConstant(reader);
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
m_BlendDirectData = new BlendDirectDataConstant(reader);
|
||||
}
|
||||
|
||||
m_ClipID = reader.ReadUInt32();
|
||||
if (version[0] < 5) //5.0 down
|
||||
{
|
||||
m_ClipIndex = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
m_Duration = reader.ReadSingle();
|
||||
m_CycleOffset = reader.ReadSingle();
|
||||
m_Mirror = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class BlendTreeConstant
|
||||
{
|
||||
public BlendTreeNodeConstant[] m_NodeArray { get; set; }
|
||||
|
||||
public BlendTreeConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
int numNodes = reader.ReadInt32();
|
||||
m_NodeArray = new BlendTreeNodeConstant[numNodes];
|
||||
for (int i = 0; i < numNodes; i++)
|
||||
{
|
||||
m_NodeArray[i] = new BlendTreeNodeConstant(reader, version);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class StateConstant
|
||||
{
|
||||
public TransitionConstant[] m_TransitionConstantArray { get; set; }
|
||||
public int[] m_BlendTreeConstantIndexArray { get; set; }
|
||||
public LeafInfoConstant[] m_LeafInfoArray { get; set; }
|
||||
public BlendTreeConstant[] m_BlendTreeConstantArray { get; set; }
|
||||
public uint m_NameID { get; set; }
|
||||
public uint m_PathID { get; set; }
|
||||
public uint m_FullPathID { get; set; }
|
||||
public uint m_TagID { get; set; }
|
||||
public uint m_SpeedParamID { get; set; }
|
||||
public uint m_MirrorParamID { get; set; }
|
||||
public uint m_CycleOffsetParamID { get; set; }
|
||||
public float m_Speed { get; set; }
|
||||
public float m_CycleOffset { get; set; }
|
||||
public bool m_IKOnFeet { get; set; }
|
||||
public bool m_WriteDefaultValues { get; set; }
|
||||
public bool m_Loop { get; set; }
|
||||
public bool m_Mirror { get; set; }
|
||||
|
||||
public StateConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
int numTransistions = reader.ReadInt32();
|
||||
m_TransitionConstantArray = new TransitionConstant[numTransistions];
|
||||
for (int i = 0; i < numTransistions; i++)
|
||||
{
|
||||
m_TransitionConstantArray[i] = new TransitionConstant(reader, version);
|
||||
}
|
||||
|
||||
int numBlendIndices = reader.ReadInt32();
|
||||
m_BlendTreeConstantIndexArray = new int[numBlendIndices];
|
||||
for (int i = 0; i < numBlendIndices; i++)
|
||||
{
|
||||
m_BlendTreeConstantIndexArray[i] = reader.ReadInt32();
|
||||
}
|
||||
|
||||
if (version[0] < 5) //5.0 down
|
||||
{
|
||||
int numInfos = reader.ReadInt32();
|
||||
m_LeafInfoArray = new LeafInfoConstant[numInfos];
|
||||
for (int i = 0; i < numInfos; i++)
|
||||
{
|
||||
m_LeafInfoArray[i] = new LeafInfoConstant(reader);
|
||||
}
|
||||
}
|
||||
|
||||
int numBlends = reader.ReadInt32();
|
||||
m_BlendTreeConstantArray = new BlendTreeConstant[numBlends];
|
||||
for (int i = 0; i < numBlends; i++)
|
||||
{
|
||||
m_BlendTreeConstantArray[i] = new BlendTreeConstant(reader, version);
|
||||
}
|
||||
|
||||
m_NameID = reader.ReadUInt32();
|
||||
m_PathID = reader.ReadUInt32();
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
m_FullPathID = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
m_TagID = reader.ReadUInt32();
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
m_SpeedParamID = reader.ReadUInt32();
|
||||
m_MirrorParamID = reader.ReadUInt32();
|
||||
m_CycleOffsetParamID = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 2)) //2017.2 and up
|
||||
{
|
||||
var m_TimeParamID = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
m_Speed = reader.ReadSingle();
|
||||
m_CycleOffset = reader.ReadSingle();
|
||||
m_IKOnFeet = reader.ReadBoolean();
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
m_WriteDefaultValues = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
m_Loop = reader.ReadBoolean();
|
||||
m_Mirror = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class SelectorTransitionConstant
|
||||
{
|
||||
public uint m_Destination { get; set; }
|
||||
public ConditionConstant[] m_ConditionConstantArray { get; set; }
|
||||
|
||||
public SelectorTransitionConstant(EndianBinaryReader reader)
|
||||
{
|
||||
m_Destination = reader.ReadUInt32();
|
||||
|
||||
int numConditions = reader.ReadInt32();
|
||||
m_ConditionConstantArray = new ConditionConstant[numConditions];
|
||||
for (int i = 0; i < numConditions; i++)
|
||||
{
|
||||
m_ConditionConstantArray[i] = new ConditionConstant(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SelectorStateConstant
|
||||
{
|
||||
public SelectorTransitionConstant[] m_TransitionConstantArray { get; set; }
|
||||
public uint m_FullPathID { get; set; }
|
||||
public bool m_isEntry { get; set; }
|
||||
|
||||
public SelectorStateConstant(EndianBinaryReader reader)
|
||||
{
|
||||
int numTransitions = reader.ReadInt32();
|
||||
m_TransitionConstantArray = new SelectorTransitionConstant[numTransitions];
|
||||
for (int i = 0; i < numTransitions; i++)
|
||||
{
|
||||
m_TransitionConstantArray[i] = new SelectorTransitionConstant(reader);
|
||||
}
|
||||
|
||||
m_FullPathID = reader.ReadUInt32();
|
||||
m_isEntry = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class StateMachineConstant
|
||||
{
|
||||
public StateConstant[] m_StateConstantArray { get; set; }
|
||||
public TransitionConstant[] m_AnyStateTransitionConstantArray { get; set; }
|
||||
public SelectorStateConstant[] m_SelectorStateConstantArray { get; set; }
|
||||
public uint m_DefaultState { get; set; }
|
||||
public uint m_MotionSetCount { get; set; }
|
||||
|
||||
public StateMachineConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
int numStates = reader.ReadInt32();
|
||||
m_StateConstantArray = new StateConstant[numStates];
|
||||
for (int i = 0; i < numStates; i++)
|
||||
{
|
||||
m_StateConstantArray[i] = new StateConstant(reader, version);
|
||||
}
|
||||
|
||||
int numAnyStates = reader.ReadInt32();
|
||||
m_AnyStateTransitionConstantArray = new TransitionConstant[numAnyStates];
|
||||
for (int i = 0; i < numAnyStates; i++)
|
||||
{
|
||||
m_AnyStateTransitionConstantArray[i] = new TransitionConstant(reader, version);
|
||||
}
|
||||
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
int numSelectors = reader.ReadInt32();
|
||||
m_SelectorStateConstantArray = new SelectorStateConstant[numSelectors];
|
||||
for (int i = 0; i < numSelectors; i++)
|
||||
{
|
||||
m_SelectorStateConstantArray[i] = new SelectorStateConstant(reader);
|
||||
}
|
||||
}
|
||||
|
||||
m_DefaultState = reader.ReadUInt32();
|
||||
m_MotionSetCount = reader.ReadUInt32();
|
||||
}
|
||||
}
|
||||
|
||||
public class ValueArray
|
||||
{
|
||||
public bool[] m_BoolValues { get; set; }
|
||||
public int[] m_IntValues { get; set; }
|
||||
public float[] m_FloatValues { get; set; }
|
||||
public object[] m_PositionValues { get; set; }
|
||||
public Vector4[] m_QuaternionValues { get; set; }
|
||||
public object[] m_ScaleValues { get; set; }
|
||||
|
||||
public ValueArray(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
if (version[0] < 5 || (version[0] == 5 && version[1] < 5)) //5.5 down
|
||||
{
|
||||
int numBools = reader.ReadInt32();
|
||||
m_BoolValues = new bool[numBools];
|
||||
for (int i = 0; i < numBools; i++)
|
||||
{
|
||||
m_BoolValues[i] = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
reader.AlignStream(4);
|
||||
|
||||
m_IntValues = reader.ReadInt32Array(reader.ReadInt32());
|
||||
m_FloatValues = reader.ReadSingleArray(reader.ReadInt32());
|
||||
}
|
||||
|
||||
int numPosValues = reader.ReadInt32();
|
||||
m_PositionValues = new object[numPosValues];
|
||||
for (int i = 0; i < numPosValues; i++)
|
||||
{
|
||||
m_PositionValues[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4(); //5.4 and up
|
||||
}
|
||||
|
||||
m_QuaternionValues = reader.ReadVector4Array(reader.ReadInt32());
|
||||
|
||||
int numScaleValues = reader.ReadInt32();
|
||||
m_ScaleValues = new object[numScaleValues];
|
||||
for (int i = 0; i < numScaleValues; i++)
|
||||
{
|
||||
m_ScaleValues[i] = version[0] > 5 || (version[0] == 5 && version[1] >= 4) ? (object)reader.ReadVector3() : (object)reader.ReadVector4(); //5.4 adn up
|
||||
}
|
||||
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 5)) //5.5 and up
|
||||
{
|
||||
m_FloatValues = reader.ReadSingleArray(reader.ReadInt32());
|
||||
m_IntValues = reader.ReadInt32Array(reader.ReadInt32());
|
||||
|
||||
int numBools = reader.ReadInt32();
|
||||
m_BoolValues = new bool[numBools];
|
||||
for (int i = 0; i < numBools; i++)
|
||||
{
|
||||
m_BoolValues[i] = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ControllerConstant
|
||||
{
|
||||
public LayerConstant[] m_LayerArray { get; set; }
|
||||
public StateMachineConstant[] m_StateMachineArray { get; set; }
|
||||
public ValueArrayConstant m_Values { get; set; }
|
||||
public ValueArray m_DefaultValues { get; set; }
|
||||
|
||||
public ControllerConstant(EndianBinaryReader reader, int[] version)
|
||||
{
|
||||
int numLayers = reader.ReadInt32();
|
||||
m_LayerArray = new LayerConstant[numLayers];
|
||||
for (int i = 0; i < numLayers; i++)
|
||||
{
|
||||
m_LayerArray[i] = new LayerConstant(reader, version);
|
||||
}
|
||||
|
||||
int numStates = reader.ReadInt32();
|
||||
m_StateMachineArray = new StateMachineConstant[numStates];
|
||||
for (int i = 0; i < numStates; i++)
|
||||
{
|
||||
m_StateMachineArray[i] = new StateMachineConstant(reader, version);
|
||||
}
|
||||
|
||||
m_Values = new ValueArrayConstant(reader, version);
|
||||
m_DefaultValues = new ValueArray(reader, version);
|
||||
}
|
||||
}
|
||||
|
||||
public class AnimatorController
|
||||
{
|
||||
public string m_Name;
|
||||
public PPtr[] m_AnimationClips;
|
||||
|
||||
public AnimatorController(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var version = preloadData.sourceFile.version;
|
||||
var reader = preloadData.InitReader();
|
||||
reader.Position = preloadData.Offset;
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
var m_ControllerSize = reader.ReadUInt32();
|
||||
var m_Controller = new ControllerConstant(reader, version);
|
||||
|
||||
int tosSize = reader.ReadInt32();
|
||||
var m_TOS = new List<KeyValuePair<uint, string>>(tosSize);
|
||||
for (int i = 0; i < tosSize; i++)
|
||||
{
|
||||
m_TOS.Add(new KeyValuePair<uint, string>(reader.ReadUInt32(), reader.ReadAlignedString()));
|
||||
}
|
||||
|
||||
int numClips = reader.ReadInt32();
|
||||
m_AnimationClips = new PPtr[numClips];
|
||||
for (int i = 0; i < numClips; i++)
|
||||
{
|
||||
m_AnimationClips[i] = sourceFile.ReadPPtr();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
AssetStudio/Classes/AnimatorOverrideController.cs
Normal file
33
AssetStudio/Classes/AnimatorOverrideController.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class AnimatorOverrideController
|
||||
{
|
||||
public string m_Name;
|
||||
public PPtr m_Controller;
|
||||
public PPtr[][] m_Clips;
|
||||
|
||||
public AnimatorOverrideController(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
reader.Position = preloadData.Offset;
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
m_Controller = sourceFile.ReadPPtr();
|
||||
|
||||
int numOverrides = reader.ReadInt32();
|
||||
m_Clips = new PPtr[numOverrides][];
|
||||
for (int i = 0; i < numOverrides; i++)
|
||||
{
|
||||
m_Clips[i] = new PPtr[2];
|
||||
m_Clips[i][0] = sourceFile.ReadPPtr();
|
||||
m_Clips[i][1] = sourceFile.ReadPPtr();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
|
||||
class AssetBundle
|
||||
@@ -27,23 +27,22 @@ namespace Unity_Studio
|
||||
public AssetBundle(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
var m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
var size = a_Stream.ReadInt32();
|
||||
var m_Name = reader.ReadAlignedString();
|
||||
var size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
sourceFile.ReadPPtr();
|
||||
}
|
||||
size = a_Stream.ReadInt32();
|
||||
size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
var temp = new ContainerData();
|
||||
temp.first = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
temp.first = reader.ReadAlignedString();
|
||||
temp.second = new AssetInfo();
|
||||
temp.second.preloadIndex = a_Stream.ReadInt32();
|
||||
temp.second.preloadSize = a_Stream.ReadInt32();
|
||||
temp.second.preloadIndex = reader.ReadInt32();
|
||||
temp.second.preloadSize = reader.ReadInt32();
|
||||
temp.second.asset = sourceFile.ReadPPtr();
|
||||
m_Container.Add(temp);
|
||||
}
|
||||
334
AssetStudio/Classes/AudioClip.cs
Normal file
334
AssetStudio/Classes/AudioClip.cs
Normal file
@@ -0,0 +1,334 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class AudioClip
|
||||
{
|
||||
public string m_Name;
|
||||
public int m_Format;
|
||||
public AudioType m_Type;
|
||||
public bool m_3D;
|
||||
public bool m_UseHardware;
|
||||
|
||||
//version 5
|
||||
public int m_LoadType;
|
||||
public int m_Channels;
|
||||
public int m_Frequency;
|
||||
public int m_BitsPerSample;
|
||||
public float m_Length;
|
||||
public bool m_IsTrackerFormat;
|
||||
public int m_SubsoundIndex;
|
||||
public bool m_PreloadAudioData;
|
||||
public bool m_LoadInBackground;
|
||||
public bool m_Legacy3D;
|
||||
public AudioCompressionFormat m_CompressionFormat;
|
||||
|
||||
public string m_Source;
|
||||
public long m_Offset;
|
||||
public long m_Size;
|
||||
public byte[] m_AudioData;
|
||||
|
||||
public bool version5;
|
||||
|
||||
public AudioClip(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
version5 = sourceFile.version[0] >= 5;
|
||||
if (sourceFile.version[0] < 5)
|
||||
{
|
||||
|
||||
m_Format = reader.ReadInt32(); //channels?
|
||||
m_Type = (AudioType)reader.ReadInt32();
|
||||
m_3D = reader.ReadBoolean();
|
||||
m_UseHardware = reader.ReadBoolean();
|
||||
reader.Position += 2; //4 byte alignment
|
||||
|
||||
if (sourceFile.version[0] >= 4 || (sourceFile.version[0] == 3 && sourceFile.version[1] >= 2)) //3.2.0 to 5
|
||||
{
|
||||
int m_Stream = reader.ReadInt32();
|
||||
m_Size = reader.ReadInt32();
|
||||
var tsize = m_Size % 4 != 0 ? m_Size + 4 - m_Size % 4 : m_Size;
|
||||
//TODO: Need more test
|
||||
if (preloadData.Size + preloadData.Offset - reader.Position != tsize)
|
||||
{
|
||||
m_Offset = reader.ReadInt32();
|
||||
m_Source = sourceFile.filePath + ".resS";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Size = reader.ReadInt32();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_LoadType = reader.ReadInt32(); //Decompress on load, Compressed in memory, Streaming
|
||||
m_Channels = reader.ReadInt32();
|
||||
m_Frequency = reader.ReadInt32();
|
||||
m_BitsPerSample = reader.ReadInt32();
|
||||
m_Length = reader.ReadSingle();
|
||||
m_IsTrackerFormat = reader.ReadBoolean();
|
||||
reader.Position += 3;
|
||||
m_SubsoundIndex = reader.ReadInt32();
|
||||
m_PreloadAudioData = reader.ReadBoolean();
|
||||
m_LoadInBackground = reader.ReadBoolean();
|
||||
m_Legacy3D = reader.ReadBoolean();
|
||||
reader.Position += 1;
|
||||
m_3D = m_Legacy3D;
|
||||
|
||||
m_Source = reader.ReadAlignedString();
|
||||
m_Offset = reader.ReadInt64();
|
||||
m_Size = reader.ReadInt64();
|
||||
m_CompressionFormat = (AudioCompressionFormat)reader.ReadInt32();
|
||||
}
|
||||
|
||||
if (readSwitch)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(m_Source))
|
||||
{
|
||||
var resourceFileName = Path.GetFileName(m_Source);
|
||||
var resourceFilePath = Path.GetDirectoryName(sourceFile.filePath) + "\\" + resourceFileName;
|
||||
if (!File.Exists(resourceFilePath))
|
||||
{
|
||||
var findFiles = Directory.GetFiles(Path.GetDirectoryName(sourceFile.filePath), resourceFileName, SearchOption.AllDirectories);
|
||||
if (findFiles.Length > 0)
|
||||
{
|
||||
resourceFilePath = findFiles[0];
|
||||
}
|
||||
}
|
||||
if (File.Exists(resourceFilePath))
|
||||
{
|
||||
using (var resourceReader = new BinaryReader(File.OpenRead(resourceFilePath)))
|
||||
{
|
||||
resourceReader.BaseStream.Position = m_Offset;
|
||||
m_AudioData = resourceReader.ReadBytes((int)m_Size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Studio.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var resourceReader))
|
||||
{
|
||||
resourceReader.Position = m_Offset;
|
||||
m_AudioData = resourceReader.ReadBytes((int)m_Size);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show($"can't find the resource file {resourceFileName}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Size > 0)
|
||||
m_AudioData = reader.ReadBytes((int)m_Size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
preloadData.InfoText = "Compression format: ";
|
||||
|
||||
if (sourceFile.version[0] < 5)
|
||||
{
|
||||
switch (m_Type)
|
||||
{
|
||||
case AudioType.ACC:
|
||||
preloadData.extension = ".m4a";
|
||||
preloadData.InfoText += "Acc";
|
||||
break;
|
||||
case AudioType.AIFF:
|
||||
preloadData.extension = ".aif";
|
||||
preloadData.InfoText += "AIFF";
|
||||
break;
|
||||
case AudioType.IT:
|
||||
preloadData.extension = ".it";
|
||||
preloadData.InfoText += "Impulse tracker";
|
||||
break;
|
||||
case AudioType.MOD:
|
||||
preloadData.extension = ".mod";
|
||||
preloadData.InfoText += "Protracker / Fasttracker MOD";
|
||||
break;
|
||||
case AudioType.MPEG:
|
||||
preloadData.extension = ".mp3";
|
||||
preloadData.InfoText += "MP2/MP3 MPEG";
|
||||
break;
|
||||
case AudioType.OGGVORBIS:
|
||||
preloadData.extension = ".ogg";
|
||||
preloadData.InfoText += "Ogg vorbis";
|
||||
break;
|
||||
case AudioType.S3M:
|
||||
preloadData.extension = ".s3m";
|
||||
preloadData.InfoText += "ScreamTracker 3";
|
||||
break;
|
||||
case AudioType.WAV:
|
||||
preloadData.extension = ".wav";
|
||||
preloadData.InfoText += "Microsoft WAV";
|
||||
break;
|
||||
case AudioType.XM:
|
||||
preloadData.extension = ".xm";
|
||||
preloadData.InfoText += "FastTracker 2 XM";
|
||||
break;
|
||||
case AudioType.XMA:
|
||||
preloadData.extension = ".wav";
|
||||
preloadData.InfoText += "Xbox360 XMA";
|
||||
break;
|
||||
case AudioType.VAG:
|
||||
preloadData.extension = ".vag";
|
||||
preloadData.InfoText += "PlayStation Portable ADPCM";
|
||||
break;
|
||||
case AudioType.AUDIOQUEUE:
|
||||
preloadData.extension = ".fsb";
|
||||
preloadData.InfoText += "iPhone";
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (m_CompressionFormat)
|
||||
{
|
||||
case AudioCompressionFormat.PCM:
|
||||
preloadData.extension = ".fsb";
|
||||
preloadData.InfoText += "PCM";
|
||||
break;
|
||||
case AudioCompressionFormat.Vorbis:
|
||||
preloadData.extension = ".fsb";
|
||||
preloadData.InfoText += "Vorbis";
|
||||
break;
|
||||
case AudioCompressionFormat.ADPCM:
|
||||
preloadData.extension = ".fsb";
|
||||
preloadData.InfoText += "ADPCM";
|
||||
break;
|
||||
case AudioCompressionFormat.MP3:
|
||||
preloadData.extension = ".fsb";
|
||||
preloadData.InfoText += "MP3";
|
||||
break;
|
||||
case AudioCompressionFormat.VAG:
|
||||
preloadData.extension = ".vag";
|
||||
preloadData.InfoText += "PlayStation Portable ADPCM";
|
||||
break;
|
||||
case AudioCompressionFormat.HEVAG:
|
||||
preloadData.extension = ".vag";
|
||||
preloadData.InfoText += "PSVita ADPCM";
|
||||
break;
|
||||
case AudioCompressionFormat.XMA:
|
||||
preloadData.extension = ".wav";
|
||||
preloadData.InfoText += "Xbox360 XMA";
|
||||
break;
|
||||
case AudioCompressionFormat.AAC:
|
||||
preloadData.extension = ".m4a";
|
||||
preloadData.InfoText += "AAC";
|
||||
break;
|
||||
case AudioCompressionFormat.GCADPCM:
|
||||
preloadData.extension = ".fsb";
|
||||
preloadData.InfoText += "Nintendo 3DS/Wii DSP";
|
||||
break;
|
||||
case AudioCompressionFormat.ATRAC9:
|
||||
preloadData.extension = ".at9";
|
||||
preloadData.InfoText += "PSVita ATRAC9";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (preloadData.extension == null)
|
||||
{
|
||||
preloadData.extension = ".AudioClip";
|
||||
preloadData.InfoText += "Unknown";
|
||||
}
|
||||
|
||||
preloadData.InfoText += "\n3D: " + m_3D;
|
||||
|
||||
preloadData.Text = m_Name;
|
||||
if (m_Source != null)
|
||||
preloadData.fullSize = preloadData.Size + (int)m_Size;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsFMODSupport
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!version5)
|
||||
{
|
||||
switch (m_Type)
|
||||
{
|
||||
case AudioType.AIFF:
|
||||
case AudioType.IT:
|
||||
case AudioType.MOD:
|
||||
case AudioType.S3M:
|
||||
case AudioType.XM:
|
||||
case AudioType.XMA:
|
||||
case AudioType.VAG:
|
||||
case AudioType.AUDIOQUEUE:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (m_CompressionFormat)
|
||||
{
|
||||
case AudioCompressionFormat.PCM:
|
||||
case AudioCompressionFormat.Vorbis:
|
||||
case AudioCompressionFormat.ADPCM:
|
||||
case AudioCompressionFormat.MP3:
|
||||
case AudioCompressionFormat.VAG:
|
||||
case AudioCompressionFormat.HEVAG:
|
||||
case AudioCompressionFormat.XMA:
|
||||
case AudioCompressionFormat.GCADPCM:
|
||||
case AudioCompressionFormat.ATRAC9:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum AudioType
|
||||
{
|
||||
UNKNOWN,
|
||||
ACC,
|
||||
AIFF,
|
||||
IT = 10,
|
||||
MOD = 12,
|
||||
MPEG,
|
||||
OGGVORBIS,
|
||||
S3M = 17,
|
||||
WAV = 20,
|
||||
XM,
|
||||
XMA,
|
||||
VAG,
|
||||
AUDIOQUEUE
|
||||
}
|
||||
|
||||
public enum AudioCompressionFormat
|
||||
{
|
||||
PCM,
|
||||
Vorbis,
|
||||
ADPCM,
|
||||
MP3,
|
||||
VAG,
|
||||
HEVAG,
|
||||
XMA,
|
||||
AAC,
|
||||
GCADPCM,
|
||||
ATRAC9
|
||||
}
|
||||
}
|
||||
251
AssetStudio/Classes/Avatar.cs
Normal file
251
AssetStudio/Classes/Avatar.cs
Normal file
@@ -0,0 +1,251 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class Avatar
|
||||
{
|
||||
public string m_Name;
|
||||
private List<KeyValuePair<uint, string>> m_TOS;
|
||||
|
||||
public Avatar(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var version = sourceFile.version;
|
||||
var reader = preloadData.InitReader();
|
||||
reader.Position = preloadData.Offset;
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
var m_AvatarSize = reader.ReadUInt32();
|
||||
//AvatarConstant m_Avatar
|
||||
//- OffsetPtr m_AvatarSkeleton
|
||||
//-- Skeleton data
|
||||
//--- vector m_Node
|
||||
var numNodes = reader.ReadInt32();
|
||||
for (int i = 0; i < numNodes; i++)
|
||||
{
|
||||
reader.Position += 8;
|
||||
}
|
||||
//--- vector m_ID
|
||||
int numIDs = reader.ReadInt32();
|
||||
for (int i = 0; i < numIDs; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- vector m_AxesArray
|
||||
int numAxes = reader.ReadInt32();
|
||||
for (int i = 0; i < numAxes; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 76;
|
||||
else
|
||||
reader.Position += 88;
|
||||
}
|
||||
//- OffsetPtr m_AvatarSkeletonPose
|
||||
//-- SkeletonPose data
|
||||
int numXforms = reader.ReadInt32();
|
||||
for (int i = 0; i < numXforms; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 40;
|
||||
else
|
||||
reader.Position += 48;
|
||||
}
|
||||
//- OffsetPtr m_DefaultPose
|
||||
//-- SkeletonPose data
|
||||
numXforms = reader.ReadInt32();
|
||||
for (int i = 0; i < numXforms; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 40;
|
||||
else
|
||||
reader.Position += 48;
|
||||
}
|
||||
//- vector m_SkeletonNameIDArray
|
||||
numIDs = reader.ReadInt32();
|
||||
for (int i = 0; i < numIDs; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//- OffsetPtr m_Human
|
||||
//-- Human data
|
||||
//--- xform m_RootX
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 40;
|
||||
else
|
||||
reader.Position += 48;
|
||||
//--- OffsetPtr m_Skeleton
|
||||
//---- Skeleton data
|
||||
numNodes = reader.ReadInt32();
|
||||
for (int i = 0; i < numNodes; i++)
|
||||
{
|
||||
reader.Position += 8;
|
||||
}
|
||||
//--- vector m_ID
|
||||
numIDs = reader.ReadInt32();
|
||||
for (int i = 0; i < numIDs; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- vector m_AxesArray
|
||||
numAxes = reader.ReadInt32();
|
||||
for (int i = 0; i < numAxes; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 76;
|
||||
else
|
||||
reader.Position += 88;
|
||||
}
|
||||
//--- OffsetPtr m_SkeletonPose
|
||||
//---- SkeletonPose data
|
||||
numXforms = reader.ReadInt32();
|
||||
for (int i = 0; i < numXforms; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 40;
|
||||
else
|
||||
reader.Position += 48;
|
||||
}
|
||||
//--- OffsetPtr m_LeftHand
|
||||
//---- Hand data
|
||||
//----- staticvector m_HandBoneIndex
|
||||
int numIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- OffsetPtr m_RightHand
|
||||
numIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- vector m_Handles
|
||||
int numHandles = reader.ReadInt32();
|
||||
for (int i = 0; i < numHandles; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 48;
|
||||
else
|
||||
reader.Position += 56;
|
||||
}
|
||||
//--- vector m_ColliderArray
|
||||
int numColliders = reader.ReadInt32();
|
||||
for (int i = 0; i < numColliders; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 72;
|
||||
else
|
||||
reader.Position += 80;
|
||||
}
|
||||
//--- staticvector m_HumanBoneIndex
|
||||
numIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- staticvector m_HumanBoneMass
|
||||
int numMasses = reader.ReadInt32();
|
||||
for (int i = 0; i < numMasses; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- staticvector m_ColliderIndex
|
||||
int numColliderIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numColliderIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
var m_Scale = reader.ReadSingle();
|
||||
var m_ArmTwist = reader.ReadSingle();
|
||||
var m_ForeArmTwist = reader.ReadSingle();
|
||||
var m_UpperLegTwist = reader.ReadSingle();
|
||||
var m_LegTwist = reader.ReadSingle();
|
||||
var m_ArmStretch = reader.ReadSingle();
|
||||
var m_LegStretch = reader.ReadSingle();
|
||||
var m_FeetSpacing = reader.ReadSingle();
|
||||
var m_HasLeftHand = reader.ReadBoolean();
|
||||
var m_HasRightHand = reader.ReadBoolean();
|
||||
var m_HasTDoF = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
//- vector m_HumanSkeletonIndexArray
|
||||
numIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//- vector m_HumanSkeletonReverseIndexArray
|
||||
int numReverseIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numReverseIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
var m_RootMotionBoneIndex = reader.ReadInt32();
|
||||
//- xform m_RootMotionBoneX
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 40;
|
||||
else
|
||||
reader.Position += 48;
|
||||
//- OffsetPtr m_RootMotionSkeleton
|
||||
//-- Skeleton data
|
||||
//--- vector m_Node
|
||||
numNodes = reader.ReadInt32();
|
||||
for (int i = 0; i < numNodes; i++)
|
||||
{
|
||||
reader.Position += 8;
|
||||
}
|
||||
//--- vector m_ID
|
||||
numIDs = reader.ReadInt32();
|
||||
for (int i = 0; i < numIDs; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//--- vector m_AxesArray
|
||||
numAxes = reader.ReadInt32();
|
||||
for (int i = 0; i < numAxes; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 76;
|
||||
else
|
||||
reader.Position += 88;
|
||||
}
|
||||
//- OffsetPtr m_RootMotionSkeletonPose
|
||||
//-- SkeletonPose data
|
||||
numXforms = reader.ReadInt32();
|
||||
for (int i = 0; i < numXforms; i++)
|
||||
{
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
||||
reader.Position += 40;
|
||||
else
|
||||
reader.Position += 48;
|
||||
}
|
||||
//- vector m_RootMotionSkeletonIndexArray
|
||||
int numMotionIndexes = reader.ReadInt32();
|
||||
for (int i = 0; i < numMotionIndexes; i++)
|
||||
{
|
||||
reader.Position += 4;
|
||||
}
|
||||
//map m_TOS
|
||||
int numTOS = reader.ReadInt32();
|
||||
m_TOS = new List<KeyValuePair<uint, string>>(numTOS);
|
||||
for (int i = 0; i < numTOS; i++)
|
||||
{
|
||||
m_TOS.Add(new KeyValuePair<uint, string>(reader.ReadUInt32(), reader.ReadAlignedString()));
|
||||
}
|
||||
}
|
||||
|
||||
public string FindBoneName(uint hash)
|
||||
{
|
||||
foreach (var pair in m_TOS)
|
||||
{
|
||||
if (pair.Key == hash)
|
||||
{
|
||||
return pair.Value.Substring(pair.Value.LastIndexOf('/') + 1);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
37
AssetStudio/Classes/BuildSettings.cs
Normal file
37
AssetStudio/Classes/BuildSettings.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class BuildSettings
|
||||
{
|
||||
public string m_Version;
|
||||
|
||||
public BuildSettings(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
int levels = reader.ReadInt32();
|
||||
for (int l = 0; l < levels; l++) { string level = reader.ReadAlignedString(); }
|
||||
|
||||
if (sourceFile.version[0] == 5)
|
||||
{
|
||||
int preloadedPlugins = reader.ReadInt32();
|
||||
for (int l = 0; l < preloadedPlugins; l++) { string preloadedPlugin = reader.ReadAlignedString(); }
|
||||
}
|
||||
|
||||
reader.Position += 4; //bool flags
|
||||
if (sourceFile.fileGen >= 8) { reader.Position += 4; } //bool flags
|
||||
if (sourceFile.fileGen >= 9) { reader.Position += 4; } //bool flags
|
||||
if (sourceFile.version[0] == 5 ||
|
||||
(sourceFile.version[0] == 4 && (sourceFile.version[1] >= 3 ||
|
||||
(sourceFile.version[1] == 2 && sourceFile.buildType[0] != "a"))))
|
||||
{ reader.Position += 4; } //bool flags
|
||||
|
||||
m_Version = reader.ReadAlignedString();
|
||||
}
|
||||
}
|
||||
}
|
||||
190
AssetStudio/Classes/Font.cs
Normal file
190
AssetStudio/Classes/Font.cs
Normal file
@@ -0,0 +1,190 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class UFont
|
||||
{
|
||||
public string m_Name;
|
||||
public byte[] m_FontData;
|
||||
|
||||
public UFont(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
|
||||
if (readSwitch)
|
||||
{
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)
|
||||
{
|
||||
var m_LineSpacing = reader.ReadSingle();
|
||||
var m_DefaultMaterial = sourceFile.ReadPPtr();
|
||||
var m_FontSize = reader.ReadSingle();
|
||||
var m_Texture = sourceFile.ReadPPtr();
|
||||
int m_AsciiStartOffset = reader.ReadInt32();
|
||||
var m_Tracking = reader.ReadSingle();
|
||||
var m_CharacterSpacing = reader.ReadInt32();
|
||||
var m_CharacterPadding = reader.ReadInt32();
|
||||
var m_ConvertCase = reader.ReadInt32();
|
||||
int m_CharacterRects_size = reader.ReadInt32();
|
||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
||||
{
|
||||
int index = reader.ReadInt32();
|
||||
//Rectf uv
|
||||
float uvx = reader.ReadSingle();
|
||||
float uvy = reader.ReadSingle();
|
||||
float uvwidth = reader.ReadSingle();
|
||||
float uvheight = reader.ReadSingle();
|
||||
//Rectf vert
|
||||
float vertx = reader.ReadSingle();
|
||||
float verty = reader.ReadSingle();
|
||||
float vertwidth = reader.ReadSingle();
|
||||
float vertheight = reader.ReadSingle();
|
||||
float width = reader.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
bool flipped = reader.ReadBoolean();
|
||||
reader.Position += 3;
|
||||
}
|
||||
}
|
||||
int m_KerningValues_size = reader.ReadInt32();
|
||||
for (int i = 0; i < m_KerningValues_size; i++)
|
||||
{
|
||||
int pairfirst = reader.ReadInt16();
|
||||
int pairsecond = reader.ReadInt16();
|
||||
float second = reader.ReadSingle();
|
||||
}
|
||||
var m_PixelScale = reader.ReadSingle();
|
||||
int m_FontData_size = reader.ReadInt32();
|
||||
if (m_FontData_size > 0)
|
||||
{
|
||||
m_FontData = reader.ReadBytes(m_FontData_size);
|
||||
|
||||
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
|
||||
{ preloadData.extension = ".otf"; }
|
||||
else { preloadData.extension = ".ttf"; }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_AsciiStartOffset = reader.ReadInt32();
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
int m_FontCountX = reader.ReadInt32();
|
||||
int m_FontCountY = reader.ReadInt32();
|
||||
}
|
||||
|
||||
float m_Kerning = reader.ReadSingle();
|
||||
float m_LineSpacing = reader.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
int m_PerCharacterKerning_size = reader.ReadInt32();
|
||||
for (int i = 0; i < m_PerCharacterKerning_size; i++)
|
||||
{
|
||||
int first = reader.ReadInt32();
|
||||
float second = reader.ReadSingle();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_CharacterSpacing = reader.ReadInt32();
|
||||
int m_CharacterPadding = reader.ReadInt32();
|
||||
}
|
||||
|
||||
int m_ConvertCase = reader.ReadInt32();
|
||||
PPtr m_DefaultMaterial = sourceFile.ReadPPtr();
|
||||
|
||||
int m_CharacterRects_size = reader.ReadInt32();
|
||||
for (int i = 0; i < m_CharacterRects_size; i++)
|
||||
{
|
||||
int index = reader.ReadInt32();
|
||||
//Rectf uv
|
||||
float uvx = reader.ReadSingle();
|
||||
float uvy = reader.ReadSingle();
|
||||
float uvwidth = reader.ReadSingle();
|
||||
float uvheight = reader.ReadSingle();
|
||||
//Rectf vert
|
||||
float vertx = reader.ReadSingle();
|
||||
float verty = reader.ReadSingle();
|
||||
float vertwidth = reader.ReadSingle();
|
||||
float vertheight = reader.ReadSingle();
|
||||
float width = reader.ReadSingle();
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
bool flipped = reader.ReadBoolean();
|
||||
reader.Position += 3;
|
||||
}
|
||||
}
|
||||
|
||||
PPtr m_Texture = sourceFile.ReadPPtr();
|
||||
|
||||
int m_KerningValues_size = reader.ReadInt32();
|
||||
for (int i = 0; i < m_KerningValues_size; i++)
|
||||
{
|
||||
int pairfirst = reader.ReadInt16();
|
||||
int pairsecond = reader.ReadInt16();
|
||||
float second = reader.ReadSingle();
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] <= 3)
|
||||
{
|
||||
bool m_GridFont = reader.ReadBoolean();
|
||||
reader.Position += 3; //4 byte alignment
|
||||
}
|
||||
else { float m_PixelScale = reader.ReadSingle(); }
|
||||
|
||||
int m_FontData_size = reader.ReadInt32();
|
||||
if (m_FontData_size > 0)
|
||||
{
|
||||
m_FontData = reader.ReadBytes(m_FontData_size);
|
||||
|
||||
if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
|
||||
{ preloadData.extension = ".otf"; }
|
||||
else { preloadData.extension = ".ttf"; }
|
||||
|
||||
}
|
||||
|
||||
float m_FontSize = reader.ReadSingle();//problem here in minifootball
|
||||
float m_Ascent = reader.ReadSingle();
|
||||
uint m_DefaultStyle = reader.ReadUInt32();
|
||||
|
||||
int m_FontNames = reader.ReadInt32();
|
||||
for (int i = 0; i < m_FontNames; i++)
|
||||
{
|
||||
string m_FontName = reader.ReadAlignedString();
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] >= 4)
|
||||
{
|
||||
int m_FallbackFonts = reader.ReadInt32();
|
||||
for (int i = 0; i < m_FallbackFonts; i++)
|
||||
{
|
||||
PPtr m_FallbackFont = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
int m_FontRenderingMode = reader.ReadInt32();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,11 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class GameObject : TreeNode
|
||||
{
|
||||
public AssetPreloadData asset;
|
||||
public List<PPtr> m_Components = new List<PPtr>();
|
||||
public PPtr m_Transform;
|
||||
public PPtr m_MeshRenderer;
|
||||
@@ -24,20 +25,20 @@ namespace Unity_Studio
|
||||
{
|
||||
if (preloadData != null)
|
||||
{
|
||||
asset = preloadData;
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
uniqueID = preloadData.uniqueID;
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
int m_Component_size = a_Stream.ReadInt32();
|
||||
int m_Component_size = reader.ReadInt32();
|
||||
for (int j = 0; j < m_Component_size; j++)
|
||||
{
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
|
||||
@@ -46,17 +47,16 @@ namespace Unity_Studio
|
||||
}
|
||||
else
|
||||
{
|
||||
int first = a_Stream.ReadInt32();
|
||||
int first = reader.ReadInt32();
|
||||
m_Components.Add(sourceFile.ReadPPtr());
|
||||
}
|
||||
}
|
||||
|
||||
m_Layer = a_Stream.ReadInt32();
|
||||
int namesize = a_Stream.ReadInt32();
|
||||
m_Name = a_Stream.ReadAlignedString(namesize);
|
||||
m_Layer = reader.ReadInt32();
|
||||
m_Name = reader.ReadAlignedString();
|
||||
if (m_Name == "") { m_Name = "GameObject #" + uniqueID; }
|
||||
m_Tag = a_Stream.ReadUInt16();
|
||||
m_IsActive = a_Stream.ReadBoolean();
|
||||
m_Tag = reader.ReadUInt16();
|
||||
m_IsActive = reader.ReadBoolean();
|
||||
|
||||
Text = m_Name;
|
||||
preloadData.Text = m_Name;
|
||||
@@ -3,11 +3,30 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
class TexEnv
|
||||
{
|
||||
public string name;
|
||||
public PPtr m_Texture;
|
||||
public float[] m_Scale;
|
||||
public float[] m_Offset;
|
||||
}
|
||||
|
||||
class strFloatPair
|
||||
{
|
||||
public string first;
|
||||
public float second;
|
||||
}
|
||||
|
||||
class strColorPair
|
||||
{
|
||||
public string first;
|
||||
public float[] second;
|
||||
}
|
||||
|
||||
class Material
|
||||
{
|
||||
|
||||
public string m_Name;
|
||||
public PPtr m_Shader;
|
||||
public string[] m_ShaderKeywords;
|
||||
@@ -19,90 +38,89 @@ namespace Unity_Studio
|
||||
public Material(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
m_Name = reader.ReadAlignedString();
|
||||
m_Shader = sourceFile.ReadPPtr();
|
||||
|
||||
if (sourceFile.version[0] == 4 && (sourceFile.version[1] >= 2 || (sourceFile.version[1] == 1 && sourceFile.buildType[0] != "a")))
|
||||
{
|
||||
m_ShaderKeywords = new string[a_Stream.ReadInt32()];
|
||||
m_ShaderKeywords = new string[reader.ReadInt32()];
|
||||
for (int i = 0; i < m_ShaderKeywords.Length; i++)
|
||||
{
|
||||
m_ShaderKeywords[i] = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
m_ShaderKeywords[i] = reader.ReadAlignedString();
|
||||
}
|
||||
}
|
||||
else if (sourceFile.version[0] >= 5)//5.0 and up
|
||||
{
|
||||
m_ShaderKeywords = new string[1] { a_Stream.ReadAlignedString(a_Stream.ReadInt32()) };
|
||||
uint m_LightmapFlags = a_Stream.ReadUInt32();
|
||||
m_ShaderKeywords = new[] { reader.ReadAlignedString() };
|
||||
uint m_LightmapFlags = reader.ReadUInt32();
|
||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 6 || sourceFile.version[0] > 5)//5.6.0 and up
|
||||
{
|
||||
var m_EnableInstancingVariants = a_Stream.ReadBoolean();
|
||||
var m_EnableInstancingVariants = reader.ReadBoolean();
|
||||
//var m_DoubleSidedGI = a_Stream.ReadBoolean();//2017.x
|
||||
a_Stream.AlignStream(4);
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] > 4 || sourceFile.version[0] == 4 && sourceFile.version[1] >= 3) { m_CustomRenderQueue = a_Stream.ReadInt32(); }
|
||||
if (sourceFile.version[0] > 4 || sourceFile.version[0] == 4 && sourceFile.version[1] >= 3) { m_CustomRenderQueue = reader.ReadInt32(); }
|
||||
|
||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 1 || sourceFile.version[0] > 5)//5.1 and up
|
||||
{
|
||||
string[][] stringTagMap = new string[a_Stream.ReadInt32()][];
|
||||
string[][] stringTagMap = new string[reader.ReadInt32()][];
|
||||
for (int i = 0; i < stringTagMap.Length; i++)
|
||||
{
|
||||
stringTagMap[i] = new string[2] { a_Stream.ReadAlignedString(a_Stream.ReadInt32()), a_Stream.ReadAlignedString(a_Stream.ReadInt32()) };
|
||||
stringTagMap[i] = new[] { reader.ReadAlignedString(), reader.ReadAlignedString() };
|
||||
}
|
||||
}
|
||||
//disabledShaderPasses
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 6) || sourceFile.version[0] > 5)//5.6.0 and up
|
||||
{
|
||||
var size = a_Stream.ReadInt32();
|
||||
var size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
reader.ReadAlignedString();
|
||||
}
|
||||
}
|
||||
//m_SavedProperties
|
||||
m_TexEnvs = new TexEnv[a_Stream.ReadInt32()];
|
||||
m_TexEnvs = new TexEnv[reader.ReadInt32()];
|
||||
for (int i = 0; i < m_TexEnvs.Length; i++)
|
||||
{
|
||||
TexEnv m_TexEnv = new TexEnv()
|
||||
{
|
||||
name = a_Stream.ReadAlignedString(a_Stream.ReadInt32()),
|
||||
name = reader.ReadAlignedString(),
|
||||
m_Texture = sourceFile.ReadPPtr(),
|
||||
m_Scale = new float[2] { a_Stream.ReadSingle(), a_Stream.ReadSingle() },
|
||||
m_Offset = new float[2] { a_Stream.ReadSingle(), a_Stream.ReadSingle() }
|
||||
m_Scale = new[] { reader.ReadSingle(), reader.ReadSingle() },
|
||||
m_Offset = new[] { reader.ReadSingle(), reader.ReadSingle() }
|
||||
};
|
||||
m_TexEnvs[i] = m_TexEnv;
|
||||
}
|
||||
|
||||
m_Floats = new strFloatPair[a_Stream.ReadInt32()];
|
||||
m_Floats = new strFloatPair[reader.ReadInt32()];
|
||||
for (int i = 0; i < m_Floats.Length; i++)
|
||||
{
|
||||
strFloatPair m_Float = new strFloatPair()
|
||||
{
|
||||
first = a_Stream.ReadAlignedString(a_Stream.ReadInt32()),
|
||||
second = a_Stream.ReadSingle()
|
||||
first = reader.ReadAlignedString(),
|
||||
second = reader.ReadSingle()
|
||||
};
|
||||
m_Floats[i] = m_Float;
|
||||
}
|
||||
|
||||
m_Colors = new strColorPair[a_Stream.ReadInt32()];
|
||||
m_Colors = new strColorPair[reader.ReadInt32()];
|
||||
for (int i = 0; i < m_Colors.Length; i++)
|
||||
{
|
||||
strColorPair m_Color = new strColorPair()
|
||||
{
|
||||
first = a_Stream.ReadAlignedString(a_Stream.ReadInt32()),
|
||||
second = new float[4] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() }
|
||||
first = reader.ReadAlignedString(),
|
||||
second = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() }
|
||||
};
|
||||
m_Colors[i] = m_Color;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class MeshFilter
|
||||
{
|
||||
@@ -14,12 +14,11 @@ namespace Unity_Studio
|
||||
public MeshFilter(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
64
AssetStudio/Classes/MeshRenderer.cs
Normal file
64
AssetStudio/Classes/MeshRenderer.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class MeshRenderer
|
||||
{
|
||||
public PPtr m_GameObject;
|
||||
public bool m_Enabled;
|
||||
public byte m_CastShadows; //bool prior to version 5
|
||||
public bool m_ReceiveShadows;
|
||||
public ushort m_LightmapIndex;
|
||||
public ushort m_LightmapIndexDynamic;
|
||||
public PPtr[] m_Materials;
|
||||
|
||||
protected MeshRenderer() { }
|
||||
|
||||
public MeshRenderer(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_GameObject = sourceFile.ReadPPtr();
|
||||
|
||||
if (sourceFile.version[0] < 5)
|
||||
{
|
||||
m_Enabled = reader.ReadBoolean();
|
||||
m_CastShadows = reader.ReadByte();
|
||||
m_ReceiveShadows = reader.ReadBoolean();
|
||||
m_LightmapIndex = reader.ReadByte();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Enabled = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
m_CastShadows = reader.ReadByte();
|
||||
m_ReceiveShadows = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
|
||||
m_LightmapIndex = reader.ReadUInt16();
|
||||
m_LightmapIndexDynamic = reader.ReadUInt16();
|
||||
}
|
||||
|
||||
if (sourceFile.version[0] >= 3) { reader.Position += 16; } //Vector4f m_LightmapTilingOffset
|
||||
if (sourceFile.version[0] >= 5) { reader.Position += 16; } //Vector4f m_LightmapTilingOffsetDynamic
|
||||
|
||||
m_Materials = new PPtr[reader.ReadInt32()];
|
||||
for (int m = 0; m < m_Materials.Length; m++)
|
||||
{
|
||||
m_Materials[m] = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
class MonoBehaviour
|
||||
{
|
||||
@@ -12,17 +12,15 @@ namespace Unity_Studio
|
||||
public MonoBehaviour(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
var m_GameObject = sourceFile.ReadPPtr();
|
||||
var m_Enabled = a_Stream.ReadByte();
|
||||
a_Stream.AlignStream(4);
|
||||
var m_Enabled = reader.ReadByte();
|
||||
reader.AlignStream(4);
|
||||
var m_Script = sourceFile.ReadPPtr();
|
||||
var m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
var m_Name = reader.ReadAlignedString();
|
||||
if (readSwitch)
|
||||
{
|
||||
preloadData.extension = ".txt";
|
||||
if ((serializedText = preloadData.ViewStruct()) == null)
|
||||
{
|
||||
var str = "PPtr<GameObject> m_GameObject\r\n";
|
||||
@@ -38,15 +36,8 @@ namespace Unity_Studio
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Name != "")
|
||||
{
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID;
|
||||
}
|
||||
preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
|
||||
preloadData.extension = ".txt";
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
36
AssetStudio/Classes/MovieTexture.cs
Normal file
36
AssetStudio/Classes/MovieTexture.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class MovieTexture
|
||||
{
|
||||
public string m_Name;
|
||||
public byte[] m_MovieData;
|
||||
|
||||
public MovieTexture(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
if (readSwitch)
|
||||
{
|
||||
var m_Loop = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
//PPtr<AudioClip>
|
||||
sourceFile.ReadPPtr();
|
||||
var size = reader.ReadInt32();
|
||||
m_MovieData = reader.ReadBytes(size);
|
||||
var m_ColorSpace = reader.ReadInt32();
|
||||
}
|
||||
else
|
||||
{
|
||||
preloadData.extension = ".ogv";
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
56
AssetStudio/Classes/PlayerSettings.cs
Normal file
56
AssetStudio/Classes/PlayerSettings.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class PlayerSettings
|
||||
{
|
||||
public string companyName;
|
||||
public string productName;
|
||||
|
||||
public PlayerSettings(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 4) || sourceFile.version[0] > 5)//5.4.0 nad up
|
||||
{
|
||||
//productGUID
|
||||
reader.ReadInt32();
|
||||
reader.ReadInt32();
|
||||
reader.ReadInt32();
|
||||
reader.ReadInt32();
|
||||
}
|
||||
if (sourceFile.version[0] >= 3)
|
||||
{
|
||||
if (sourceFile.version[0] == 3 && sourceFile.version[1] < 2) { string AndroidLicensePublicKey = reader.ReadAlignedString(); }
|
||||
else { bool AndroidProfiler = reader.ReadBoolean(); reader.AlignStream(4); }
|
||||
|
||||
int defaultScreenOrientation = reader.ReadInt32();
|
||||
int targetDevice = reader.ReadInt32();
|
||||
|
||||
if (sourceFile.version[0] < 5 || (sourceFile.version[0] == 5 && sourceFile.version[1] < 1))
|
||||
{ int targetGlesGraphics = reader.ReadInt32(); }
|
||||
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] < 1) || (sourceFile.version[0] == 4 && sourceFile.version[1] == 6 && sourceFile.version[2] >= 3))
|
||||
{ int targetIOSGraphics = reader.ReadInt32(); }
|
||||
|
||||
if (sourceFile.version[0] >= 5 || sourceFile.version[0] == 5 && (sourceFile.version[1] > 2 || (sourceFile.version[1] == 2 && sourceFile.version[2] >= 1)))
|
||||
{ bool useOnDemandResources = reader.ReadBoolean(); reader.AlignStream(4); }
|
||||
|
||||
if (sourceFile.version[0] < 5 || (sourceFile.version[0] == 5 && sourceFile.version[1] < 3))
|
||||
{ int targetResolution = reader.ReadInt32(); }
|
||||
|
||||
if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 1) { bool OverrideIPodMusic = reader.ReadBoolean(); reader.AlignStream(4); }
|
||||
else if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 4) { }
|
||||
else { int accelerometerFrequency = reader.ReadInt32(); }//3.5.0 and up
|
||||
}
|
||||
//fail in version 5 beta
|
||||
companyName = reader.ReadAlignedString();
|
||||
productName = reader.ReadAlignedString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class RectTransform
|
||||
{
|
||||
@@ -6,7 +6,7 @@ using System.Text;
|
||||
using System.Web.Script.Serialization;
|
||||
using Lz4;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
class Shader
|
||||
{
|
||||
@@ -16,43 +16,53 @@ namespace Unity_Studio
|
||||
public Shader(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
preloadData.extension = ".txt";
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
m_Name = reader.ReadAlignedString();
|
||||
|
||||
if (readSwitch)
|
||||
{
|
||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 5 || sourceFile.version[0] > 5)//5.5.0 and up
|
||||
{
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var str = (string)ShaderResource.ResourceManager.GetObject($"Shader{sourceFile.version[0]}{sourceFile.version[1]}");
|
||||
var members = new JavaScriptSerializer().Deserialize<List<ClassMember>>(str);
|
||||
m_Script = ReadSerializedShader(members, a_Stream);
|
||||
if (str == null)
|
||||
{
|
||||
str = preloadData.ViewStruct();
|
||||
if (str == null)
|
||||
m_Script = Encoding.UTF8.GetBytes("Serialized Shader can't be read");
|
||||
else
|
||||
m_Script = Encoding.UTF8.GetBytes(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Position = preloadData.Offset;
|
||||
var sb = new StringBuilder();
|
||||
var members = new JavaScriptSerializer().Deserialize<List<ClassMember>>(str);
|
||||
ClassStructHelper.ReadClassStruct(sb, members, reader);
|
||||
m_Script = Encoding.UTF8.GetBytes(sb.ToString());
|
||||
//m_Script = ReadSerializedShader(members, a_Stream);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Script = a_Stream.ReadBytes(a_Stream.ReadInt32());
|
||||
m_Script = reader.ReadBytes(reader.ReadInt32());
|
||||
if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 3) //5.3 - 5.4
|
||||
{
|
||||
a_Stream.AlignStream(4);
|
||||
a_Stream.ReadAlignedString(a_Stream.ReadInt32());//m_PathName
|
||||
var decompressedSize = a_Stream.ReadUInt32();
|
||||
var m_SubProgramBlob = a_Stream.ReadBytes(a_Stream.ReadInt32());
|
||||
reader.AlignStream(4);
|
||||
reader.ReadAlignedString();//m_PathName
|
||||
var decompressedSize = reader.ReadUInt32();
|
||||
var m_SubProgramBlob = reader.ReadBytes(reader.ReadInt32());
|
||||
var decompressedBytes = new byte[decompressedSize];
|
||||
using (var mstream = new MemoryStream(m_SubProgramBlob))
|
||||
using (var decoder = new Lz4DecoderStream(new MemoryStream(m_SubProgramBlob)))
|
||||
{
|
||||
var decoder = new Lz4DecoderStream(mstream);
|
||||
decoder.Read(decompressedBytes, 0, (int)decompressedSize);
|
||||
decoder.Dispose();
|
||||
}
|
||||
m_Script = m_Script.Concat(decompressedBytes.ToArray()).ToArray();
|
||||
}
|
||||
@@ -60,13 +70,12 @@ namespace Unity_Studio
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Name != "") { preloadData.Text = m_Name; }
|
||||
else { preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID; }
|
||||
preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
|
||||
preloadData.extension = ".txt";
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] ReadSerializedShader(List<ClassMember> members, EndianStream a_Stream)
|
||||
/*private static byte[] ReadSerializedShader(List<ClassMember> members, EndianBinaryReader a_Stream)
|
||||
{
|
||||
var offsets = new List<uint>();
|
||||
var compressedLengths = new List<uint>();
|
||||
@@ -112,6 +121,8 @@ namespace Unity_Studio
|
||||
return decompressedBlob;
|
||||
}
|
||||
var align = (member.Flag & 0x4000) != 0;
|
||||
if (member.alignBefore)
|
||||
a_Stream.AlignStream(4);
|
||||
if (varTypeStr == "SInt8")//sbyte
|
||||
{
|
||||
a_Stream.ReadSByte();
|
||||
@@ -132,7 +143,7 @@ namespace Unity_Studio
|
||||
{
|
||||
a_Stream.ReadInt32();
|
||||
}
|
||||
else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int")//UInt32
|
||||
else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int" || varTypeStr == "Type*")//UInt32
|
||||
{
|
||||
a_Stream.ReadUInt32();
|
||||
}
|
||||
@@ -166,7 +177,7 @@ namespace Unity_Studio
|
||||
if ((members[i - 1].Flag & 0x4000) != 0)
|
||||
align = true;
|
||||
var size = a_Stream.ReadInt32();
|
||||
var array = AssetPreloadData.ReadArray(members, level, i);
|
||||
var array = ClassStructHelper.ReadArray(members, level, i);
|
||||
for (int j = 0; j < size; j++)
|
||||
{
|
||||
ReadSerializedShader(array, a_Stream);
|
||||
@@ -175,12 +186,16 @@ namespace Unity_Studio
|
||||
}
|
||||
else
|
||||
{
|
||||
align = false;
|
||||
if (align)
|
||||
{
|
||||
align = false;
|
||||
ClassStructHelper.SetAlignBefore(members, level, i + 1);
|
||||
}
|
||||
}
|
||||
if (align)
|
||||
a_Stream.AlignStream(4);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
148
AssetStudio/Classes/SkinnedMeshRenderer.cs
Normal file
148
AssetStudio/Classes/SkinnedMeshRenderer.cs
Normal file
@@ -0,0 +1,148 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class SkinnedMeshRenderer : MeshRenderer
|
||||
{
|
||||
public PPtr m_Mesh;
|
||||
public PPtr[] m_Bones;
|
||||
public List<float> m_BlendShapeWeights;
|
||||
|
||||
public SkinnedMeshRenderer(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var version = preloadData.sourceFile.version;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_GameObject = sourceFile.ReadPPtr();
|
||||
if (sourceFile.version[0] < 5)
|
||||
{
|
||||
m_Enabled = reader.ReadBoolean();
|
||||
m_CastShadows = reader.ReadByte();//bool
|
||||
m_ReceiveShadows = reader.ReadBoolean();
|
||||
m_LightmapIndex = reader.ReadByte();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Enabled = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
m_CastShadows = reader.ReadByte();
|
||||
m_ReceiveShadows = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
|
||||
m_LightmapIndex = reader.ReadUInt16();
|
||||
m_LightmapIndexDynamic = reader.ReadUInt16();
|
||||
}
|
||||
|
||||
if (version[0] >= 3) { reader.Position += 16; } //m_LightmapTilingOffset vector4d
|
||||
if (sourceFile.version[0] >= 5) { reader.Position += 16; } //Vector4f m_LightmapTilingOffsetDynamic
|
||||
|
||||
m_Materials = new PPtr[reader.ReadInt32()];
|
||||
for (int m = 0; m < m_Materials.Length; m++)
|
||||
{
|
||||
m_Materials[m] = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] < 3)
|
||||
{
|
||||
reader.Position += 16;//m_LightmapTilingOffset vector4d
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
|
||||
{
|
||||
reader.Position += 4;//m_StaticBatchInfo
|
||||
}
|
||||
else
|
||||
{
|
||||
int m_SubsetIndices_size = reader.ReadInt32();
|
||||
reader.Position += m_SubsetIndices_size * 4;
|
||||
}
|
||||
PPtr m_StaticBatchRoot = sourceFile.ReadPPtr();
|
||||
|
||||
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 4) || sourceFile.version[0] > 5)//5.4.0 and up
|
||||
{
|
||||
PPtr m_ProbeAnchor = sourceFile.ReadPPtr();
|
||||
PPtr m_LightProbeVolumeOverride = sourceFile.ReadPPtr();
|
||||
}
|
||||
else if (version[0] >= 4 || (version[0] == 3 && version[1] >= 5))
|
||||
{
|
||||
bool m_UseLightProbes = reader.ReadBoolean();
|
||||
reader.Position += 3; //alignment
|
||||
if (version[0] == 5) { int m_ReflectionProbeUsage = reader.ReadInt32(); }
|
||||
//did I ever check if the anchor is conditioned by the bool?
|
||||
PPtr m_LightProbeAnchor = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] >= 5 || (version[0] == 4 && version[1] >= 3))
|
||||
{
|
||||
if (version[0] == 4 && version[1] <= 3) { int m_SortingLayer = reader.ReadInt16(); }
|
||||
else { int m_SortingLayer = reader.ReadInt32(); }
|
||||
|
||||
int m_SortingOrder = reader.ReadInt16();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
}
|
||||
|
||||
int m_Quality = reader.ReadInt32();
|
||||
bool m_UpdateWhenOffscreen = reader.ReadBoolean();
|
||||
bool m_SkinNormals = reader.ReadBoolean(); //3.1.0 and below
|
||||
reader.Position += 2;
|
||||
|
||||
if (version[0] == 2 && version[1] < 6)
|
||||
{
|
||||
//this would be the only error if mainVersion is not read in time for a version 2.x game
|
||||
PPtr m_DisableAnimationWhenOffscreen = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Mesh = sourceFile.ReadPPtr();
|
||||
|
||||
m_Bones = new PPtr[reader.ReadInt32()];
|
||||
for (int b = 0; b < m_Bones.Length; b++)
|
||||
{
|
||||
m_Bones[b] = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] < 3)
|
||||
{
|
||||
int m_BindPose = reader.ReadInt32();
|
||||
reader.Position += m_BindPose * 16 * 4;//Matrix4x4f
|
||||
}
|
||||
else
|
||||
{
|
||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up
|
||||
{
|
||||
int numBSWeights = reader.ReadInt32();
|
||||
m_BlendShapeWeights = new List<float>(numBSWeights);
|
||||
for (int i = 0; i < numBSWeights; i++)
|
||||
{
|
||||
m_BlendShapeWeights.Add(reader.ReadSingle());
|
||||
}
|
||||
}
|
||||
|
||||
/*if (version[0] > 4 || (version[0] >= 3 && version[1] >= 5))
|
||||
{
|
||||
PPtr m_RootBone = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] > 4 || (version[0] == 3 && version[1] >= 4))
|
||||
{
|
||||
//AABB
|
||||
float[] m_Center = { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||
float[] m_Extent = { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||
bool m_DirtyAABB = reader.ReadBoolean();
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
169
AssetStudio/Classes/Sprite.cs
Normal file
169
AssetStudio/Classes/Sprite.cs
Normal file
@@ -0,0 +1,169 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class Sprite
|
||||
{
|
||||
public string m_Name;
|
||||
public RectangleF m_Rect;
|
||||
public float m_PixelsToUnits;
|
||||
public PointF m_Pivot;
|
||||
public Guid first;
|
||||
public PPtr texture;
|
||||
public PPtr m_SpriteAtlas;
|
||||
public RectangleF textureRect;
|
||||
public PointF[][] m_PhysicsShape;
|
||||
|
||||
public Sprite(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
var version = sourceFile.version;
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
if (readSwitch)
|
||||
{
|
||||
//Rectf m_Rect
|
||||
m_Rect = new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
//Vector2f m_Offset
|
||||
reader.Position += 8;
|
||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up
|
||||
{
|
||||
//Vector4f m_Border
|
||||
reader.Position += 16;
|
||||
}
|
||||
|
||||
m_PixelsToUnits = reader.ReadSingle();
|
||||
if (version[0] > 5
|
||||
|| (version[0] == 5 && version[1] > 4)
|
||||
|| (version[0] == 5 && version[1] == 4 && version[2] >= 2)) //5.4.2 and up
|
||||
{
|
||||
//Vector2f m_Pivot
|
||||
m_Pivot = new PointF(reader.ReadSingle(), reader.ReadSingle());
|
||||
}
|
||||
|
||||
var m_Extrude = reader.ReadUInt32();
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 3)) //5.3 and up TODO need more test
|
||||
{
|
||||
var m_IsPolygon = reader.ReadBoolean();
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
|
||||
if (version[0] >= 2017) //2017 and up
|
||||
{
|
||||
//pair m_RenderDataKey
|
||||
first = new Guid(reader.ReadBytes(16));
|
||||
var second = reader.ReadInt64();
|
||||
//vector m_AtlasTags
|
||||
var size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
var data = reader.ReadAlignedString();
|
||||
}
|
||||
|
||||
//PPtr<SpriteAtlas> m_SpriteAtlas
|
||||
m_SpriteAtlas = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
//SpriteRenderData m_RD
|
||||
// PPtr<Texture2D> texture
|
||||
texture = sourceFile.ReadPPtr();
|
||||
// PPtr<Texture2D> alphaTexture
|
||||
if (version[0] >= 5) //5.0 and up
|
||||
{
|
||||
var alphaTexture = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
||||
{
|
||||
// vector m_SubMeshes
|
||||
var size = reader.ReadInt32();
|
||||
// SubMesh data
|
||||
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up
|
||||
{
|
||||
reader.Position += 48 * size;
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Position += 44 * size;
|
||||
}
|
||||
|
||||
// vector m_IndexBuffer
|
||||
size = reader.ReadInt32();
|
||||
reader.Position += size; //UInt8 data
|
||||
reader.AlignStream(4);
|
||||
// VertexData m_VertexData
|
||||
var m_CurrentChannels = reader.ReadInt32();
|
||||
var m_VertexCount = reader.ReadUInt32();
|
||||
// vector m_Channels
|
||||
size = reader.ReadInt32();
|
||||
reader.Position += size * 4; //ChannelInfo data
|
||||
// TypelessData m_DataSize
|
||||
size = reader.ReadInt32();
|
||||
reader.Position += size; //UInt8 data
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
else
|
||||
{
|
||||
// vector vertices
|
||||
var size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
//SpriteVertex data
|
||||
reader.Position += 12; //Vector3f pos
|
||||
if (version[0] < 4 || (version[0] == 4 && version[1] <= 3)) //4.3 and down
|
||||
reader.Position += 8; //Vector2f uv
|
||||
}
|
||||
|
||||
// vector indices
|
||||
size = reader.ReadInt32();
|
||||
reader.Position += 2 * size; //UInt16 data
|
||||
reader.AlignStream(4);
|
||||
}
|
||||
|
||||
// Rectf textureRect
|
||||
textureRect = new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
|
||||
// Vector2f textureRectOffset
|
||||
reader.Position += 8;
|
||||
// Vector2f atlasRectOffset - 5.6 and up
|
||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
|
||||
{
|
||||
reader.Position += 8;
|
||||
}
|
||||
// unsigned int settingsRaw
|
||||
reader.Position += 4;
|
||||
// Vector4f uvTransform - 4.5 and up
|
||||
if (version[0] > 4 || (version[0] == 4 && version[1] >= 5)) //4.5 and up
|
||||
{
|
||||
reader.Position += 16;
|
||||
}
|
||||
if (version[0] >= 2017) //2017 and up
|
||||
{
|
||||
// float downscaleMultiplier - 2017 and up
|
||||
reader.Position += 4;
|
||||
//vector m_PhysicsShape - 2017 and up
|
||||
var m_PhysicsShape_size = reader.ReadInt32();
|
||||
m_PhysicsShape = new PointF[m_PhysicsShape_size][];
|
||||
for (int i = 0; i < m_PhysicsShape_size; i++)
|
||||
{
|
||||
var data_size = reader.ReadInt32();
|
||||
//Vector2f
|
||||
m_PhysicsShape[i] = new PointF[data_size];
|
||||
for (int j = 0; j < data_size; j++)
|
||||
{
|
||||
m_PhysicsShape[i][j] = new PointF(reader.ReadSingle(), reader.ReadSingle());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
65
AssetStudio/Classes/SpriteAtlas.cs
Normal file
65
AssetStudio/Classes/SpriteAtlas.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class SpriteAtlas
|
||||
{
|
||||
public List<PPtr> textures = new List<PPtr>();
|
||||
public List<RectangleF> textureRects = new List<RectangleF>();
|
||||
public List<Guid> guids = new List<Guid>();
|
||||
|
||||
|
||||
public SpriteAtlas(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
var m_Name = reader.ReadAlignedString();
|
||||
//vector m_PackedSprites
|
||||
var size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
//PPtr<Sprite> data
|
||||
sourceFile.ReadPPtr();
|
||||
}
|
||||
//vector m_PackedSpriteNamesToIndex
|
||||
size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
var data = reader.ReadAlignedString();
|
||||
}
|
||||
//map m_RenderDataMap
|
||||
size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
//pair first
|
||||
guids.Add(new Guid(reader.ReadBytes(16)));
|
||||
var second = reader.ReadInt64();
|
||||
//SpriteAtlasData second
|
||||
// PPtr<Texture2D> texture
|
||||
textures.Add(sourceFile.ReadPPtr());
|
||||
// PPtr<Texture2D> alphaTexture
|
||||
var alphaTexture = sourceFile.ReadPPtr();
|
||||
// Rectf textureRect
|
||||
textureRects.Add(new RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
|
||||
// Vector2f textureRectOffset
|
||||
reader.Position += 8;
|
||||
if (sourceFile.version[0] > 2017 || (sourceFile.version[0] == 2017 && sourceFile.version[1] >= 2))//2017.2 and up
|
||||
{
|
||||
// Vector2f atlasRectOffset
|
||||
reader.Position += 8;
|
||||
}
|
||||
// Vector4f uvTransform
|
||||
// float downscaleMultiplier
|
||||
// unsigned int settingsRaw
|
||||
reader.Position += 24;
|
||||
}
|
||||
//string m_Tag
|
||||
//bool m_IsVariant
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
class TextAsset
|
||||
{
|
||||
@@ -14,28 +14,25 @@ namespace Unity_Studio
|
||||
public TextAsset(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
preloadData.extension = ".txt";
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
|
||||
m_Name = reader.ReadAlignedString();
|
||||
|
||||
if (readSwitch)
|
||||
{
|
||||
m_Script = a_Stream.ReadBytes(a_Stream.ReadInt32());
|
||||
m_Script = reader.ReadBytes(reader.ReadInt32());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Name != "") { preloadData.Text = m_Name; }
|
||||
else { preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID; }
|
||||
preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
|
||||
preloadData.extension = ".txt";
|
||||
preloadData.Text = m_Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
540
AssetStudio/Classes/Texture2D.Converter.cs
Normal file
540
AssetStudio/Classes/Texture2D.Converter.cs
Normal file
@@ -0,0 +1,540 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
partial class Texture2D
|
||||
{
|
||||
[DllImport("PVRTexLibWrapper.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool DecompressPVR(byte[] buffer, IntPtr bmp, int len);
|
||||
|
||||
[DllImport("TextureConverterWrapper.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool Ponvert(byte[] buffer, IntPtr bmp, int nWidth, int nHeight, int len, int type, int bmpsize, bool fixAlpha);
|
||||
|
||||
[DllImport("crunch.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool DecompressCRN(byte[] pSrc_file_data, int src_file_size, out IntPtr uncompressedData, out int uncompressedSize);
|
||||
|
||||
[DllImport("crunchunity.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern bool DecompressUnityCRN(byte[] pSrc_file_data, int src_file_size, out IntPtr uncompressedData, out int uncompressedSize);
|
||||
|
||||
[DllImport("texgenpack.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern void texgenpackdecode(int texturetype, byte[] texturedata, int width, int height, IntPtr bmp, bool fixAlpha);
|
||||
|
||||
|
||||
public byte[] ConvertToContainer()
|
||||
{
|
||||
if (image_data == null || image_data.Length == 0)
|
||||
return null;
|
||||
switch (m_TextureFormat)
|
||||
{
|
||||
case TextureFormat.Alpha8:
|
||||
case TextureFormat.ARGB4444:
|
||||
case TextureFormat.RGB24:
|
||||
case TextureFormat.RGBA32:
|
||||
case TextureFormat.ARGB32:
|
||||
case TextureFormat.RGB565:
|
||||
case TextureFormat.R16:
|
||||
case TextureFormat.DXT1:
|
||||
case TextureFormat.DXT5:
|
||||
case TextureFormat.RGBA4444:
|
||||
case TextureFormat.BGRA32:
|
||||
case TextureFormat.RG16:
|
||||
case TextureFormat.R8:
|
||||
return ConvertToDDS();
|
||||
case TextureFormat.YUY2:
|
||||
case TextureFormat.PVRTC_RGB2:
|
||||
case TextureFormat.PVRTC_RGBA2:
|
||||
case TextureFormat.PVRTC_RGB4:
|
||||
case TextureFormat.PVRTC_RGBA4:
|
||||
case TextureFormat.ETC_RGB4:
|
||||
case TextureFormat.ETC2_RGB:
|
||||
case TextureFormat.ETC2_RGBA1:
|
||||
case TextureFormat.ETC2_RGBA8:
|
||||
case TextureFormat.ASTC_RGB_4x4:
|
||||
case TextureFormat.ASTC_RGB_5x5:
|
||||
case TextureFormat.ASTC_RGB_6x6:
|
||||
case TextureFormat.ASTC_RGB_8x8:
|
||||
case TextureFormat.ASTC_RGB_10x10:
|
||||
case TextureFormat.ASTC_RGB_12x12:
|
||||
case TextureFormat.ASTC_RGBA_4x4:
|
||||
case TextureFormat.ASTC_RGBA_5x5:
|
||||
case TextureFormat.ASTC_RGBA_6x6:
|
||||
case TextureFormat.ASTC_RGBA_8x8:
|
||||
case TextureFormat.ASTC_RGBA_10x10:
|
||||
case TextureFormat.ASTC_RGBA_12x12:
|
||||
case TextureFormat.ETC_RGB4_3DS:
|
||||
case TextureFormat.ETC_RGBA8_3DS:
|
||||
return ConvertToPVR();
|
||||
case TextureFormat.RHalf:
|
||||
case TextureFormat.RGHalf:
|
||||
case TextureFormat.RGBAHalf:
|
||||
case TextureFormat.RFloat:
|
||||
case TextureFormat.RGFloat:
|
||||
case TextureFormat.RGBAFloat:
|
||||
case TextureFormat.BC4:
|
||||
case TextureFormat.BC5:
|
||||
case TextureFormat.BC6H:
|
||||
case TextureFormat.BC7:
|
||||
case TextureFormat.ATC_RGB4:
|
||||
case TextureFormat.ATC_RGBA8:
|
||||
case TextureFormat.EAC_R:
|
||||
case TextureFormat.EAC_R_SIGNED:
|
||||
case TextureFormat.EAC_RG:
|
||||
case TextureFormat.EAC_RG_SIGNED:
|
||||
return ConvertToKTX();
|
||||
default:
|
||||
return image_data;
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] ConvertToDDS()
|
||||
{
|
||||
var imageBuffer = new byte[128 + image_data_size];
|
||||
dwMagic.CopyTo(imageBuffer, 0);
|
||||
BitConverter.GetBytes(dwFlags).CopyTo(imageBuffer, 8);
|
||||
BitConverter.GetBytes(m_Height).CopyTo(imageBuffer, 12);
|
||||
BitConverter.GetBytes(m_Width).CopyTo(imageBuffer, 16);
|
||||
BitConverter.GetBytes(dwPitchOrLinearSize).CopyTo(imageBuffer, 20);
|
||||
BitConverter.GetBytes(dwMipMapCount).CopyTo(imageBuffer, 28);
|
||||
BitConverter.GetBytes(dwSize).CopyTo(imageBuffer, 76);
|
||||
BitConverter.GetBytes(dwFlags2).CopyTo(imageBuffer, 80);
|
||||
BitConverter.GetBytes(dwFourCC).CopyTo(imageBuffer, 84);
|
||||
BitConverter.GetBytes(dwRGBBitCount).CopyTo(imageBuffer, 88);
|
||||
BitConverter.GetBytes(dwRBitMask).CopyTo(imageBuffer, 92);
|
||||
BitConverter.GetBytes(dwGBitMask).CopyTo(imageBuffer, 96);
|
||||
BitConverter.GetBytes(dwBBitMask).CopyTo(imageBuffer, 100);
|
||||
BitConverter.GetBytes(dwABitMask).CopyTo(imageBuffer, 104);
|
||||
BitConverter.GetBytes(dwCaps).CopyTo(imageBuffer, 108);
|
||||
BitConverter.GetBytes(dwCaps2).CopyTo(imageBuffer, 112);
|
||||
image_data.CopyTo(imageBuffer, 128);
|
||||
return imageBuffer;
|
||||
}
|
||||
|
||||
private byte[] ConvertToPVR()
|
||||
{
|
||||
var mstream = new MemoryStream();
|
||||
using (var writer = new BinaryWriter(mstream))
|
||||
{
|
||||
writer.Write(pvrVersion);
|
||||
writer.Write(pvrFlags);
|
||||
writer.Write(pvrPixelFormat);
|
||||
writer.Write(pvrColourSpace);
|
||||
writer.Write(pvrChannelType);
|
||||
writer.Write(m_Height);
|
||||
writer.Write(m_Width);
|
||||
writer.Write(pvrDepth);
|
||||
writer.Write(pvrNumSurfaces);
|
||||
writer.Write(pvrNumFaces);
|
||||
writer.Write(dwMipMapCount);
|
||||
writer.Write(pvrMetaDataSize);
|
||||
writer.Write(image_data);
|
||||
return mstream.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] ConvertToKTX()
|
||||
{
|
||||
var mstream = new MemoryStream();
|
||||
using (var writer = new BinaryWriter(mstream))
|
||||
{
|
||||
writer.Write(KTXHeader.IDENTIFIER);
|
||||
writer.Write(KTXHeader.ENDIANESS_LE);
|
||||
writer.Write(glType);
|
||||
writer.Write(glTypeSize);
|
||||
writer.Write(glFormat);
|
||||
writer.Write(glInternalFormat);
|
||||
writer.Write(glBaseInternalFormat);
|
||||
writer.Write(m_Width);
|
||||
writer.Write(m_Height);
|
||||
writer.Write(pixelDepth);
|
||||
writer.Write(numberOfArrayElements);
|
||||
writer.Write(numberOfFaces);
|
||||
writer.Write(numberOfMipmapLevels);
|
||||
writer.Write(bytesOfKeyValueData);
|
||||
writer.Write(image_data_size);
|
||||
writer.Write(image_data);
|
||||
return mstream.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public Bitmap ConvertToBitmap(bool flip)
|
||||
{
|
||||
if (image_data == null || image_data.Length == 0)
|
||||
return null;
|
||||
Bitmap bitmap;
|
||||
switch (m_TextureFormat)
|
||||
{
|
||||
case TextureFormat.Alpha8:
|
||||
case TextureFormat.ARGB4444:
|
||||
case TextureFormat.RGB24:
|
||||
case TextureFormat.RGBA32:
|
||||
case TextureFormat.ARGB32:
|
||||
case TextureFormat.R16:
|
||||
case TextureFormat.RGBA4444:
|
||||
case TextureFormat.BGRA32:
|
||||
case TextureFormat.RG16:
|
||||
case TextureFormat.R8:
|
||||
bitmap = BGRA32ToBitmap();
|
||||
break;
|
||||
case TextureFormat.RGB565:
|
||||
bitmap = RGB565ToBitmap();
|
||||
break;
|
||||
case TextureFormat.YUY2:
|
||||
case TextureFormat.PVRTC_RGB2:
|
||||
case TextureFormat.PVRTC_RGBA2:
|
||||
case TextureFormat.PVRTC_RGB4:
|
||||
case TextureFormat.PVRTC_RGBA4:
|
||||
case TextureFormat.ETC_RGB4:
|
||||
case TextureFormat.ETC2_RGB:
|
||||
case TextureFormat.ETC2_RGBA1:
|
||||
case TextureFormat.ETC2_RGBA8:
|
||||
case TextureFormat.ASTC_RGB_4x4:
|
||||
case TextureFormat.ASTC_RGB_5x5:
|
||||
case TextureFormat.ASTC_RGB_6x6:
|
||||
case TextureFormat.ASTC_RGB_8x8:
|
||||
case TextureFormat.ASTC_RGB_10x10:
|
||||
case TextureFormat.ASTC_RGB_12x12:
|
||||
case TextureFormat.ASTC_RGBA_4x4:
|
||||
case TextureFormat.ASTC_RGBA_5x5:
|
||||
case TextureFormat.ASTC_RGBA_6x6:
|
||||
case TextureFormat.ASTC_RGBA_8x8:
|
||||
case TextureFormat.ASTC_RGBA_10x10:
|
||||
case TextureFormat.ASTC_RGBA_12x12:
|
||||
case TextureFormat.ETC_RGB4_3DS:
|
||||
case TextureFormat.ETC_RGBA8_3DS:
|
||||
bitmap = PVRToBitmap(ConvertToPVR());
|
||||
break;
|
||||
case TextureFormat.DXT1:
|
||||
case TextureFormat.DXT5:
|
||||
case TextureFormat.RHalf:
|
||||
case TextureFormat.RGHalf:
|
||||
case TextureFormat.RGBAHalf:
|
||||
case TextureFormat.RFloat:
|
||||
case TextureFormat.RGFloat:
|
||||
case TextureFormat.RGBAFloat:
|
||||
case TextureFormat.RGB9e5Float:
|
||||
case TextureFormat.ATC_RGB4:
|
||||
case TextureFormat.ATC_RGBA8:
|
||||
case TextureFormat.EAC_R:
|
||||
case TextureFormat.EAC_R_SIGNED:
|
||||
case TextureFormat.EAC_RG:
|
||||
case TextureFormat.EAC_RG_SIGNED:
|
||||
bitmap = TextureConverter();
|
||||
break;
|
||||
case TextureFormat.BC4:
|
||||
case TextureFormat.BC5:
|
||||
case TextureFormat.BC6H:
|
||||
case TextureFormat.BC7:
|
||||
bitmap = Texgenpack();
|
||||
break;
|
||||
case TextureFormat.DXT1Crunched:
|
||||
case TextureFormat.DXT5Crunched:
|
||||
DecompressCRN();
|
||||
bitmap = TextureConverter();
|
||||
break;
|
||||
case TextureFormat.ETC_RGB4Crunched:
|
||||
case TextureFormat.ETC2_RGBA8Crunched:
|
||||
DecompressCRN();
|
||||
bitmap = PVRToBitmap(ConvertToPVR());
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
if (bitmap != null && flip)
|
||||
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
private Bitmap BGRA32ToBitmap()
|
||||
{
|
||||
var hObject = GCHandle.Alloc(image_data, GCHandleType.Pinned);
|
||||
var pObject = hObject.AddrOfPinnedObject();
|
||||
var bitmap = new Bitmap(m_Width, m_Height, m_Width * 4, PixelFormat.Format32bppArgb, pObject);
|
||||
hObject.Free();
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
private Bitmap RGB565ToBitmap()
|
||||
{
|
||||
//stride = m_Width * 2 + m_Width * 2 % 4
|
||||
//所以m_Width * 2不为4的倍数时,需要在每行补上相应的像素
|
||||
byte[] buff;
|
||||
var padding = m_Width * 2 % 4;
|
||||
var stride = m_Width * 2 + padding;
|
||||
if (padding != 0)
|
||||
{
|
||||
buff = new byte[stride * m_Height];
|
||||
for (int i = 0; i < m_Height; i++)
|
||||
{
|
||||
Array.Copy(image_data, i * m_Width * 2, buff, i * stride, m_Width * 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buff = image_data;
|
||||
}
|
||||
var hObject = GCHandle.Alloc(buff, GCHandleType.Pinned);
|
||||
var pObject = hObject.AddrOfPinnedObject();
|
||||
var bitmap = new Bitmap(m_Width, m_Height, stride, PixelFormat.Format16bppRgb565, pObject);
|
||||
hObject.Free();
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
private Bitmap PVRToBitmap(byte[] pvrdata)
|
||||
{
|
||||
var bitmap = new Bitmap(m_Width, m_Height);
|
||||
var rect = new Rectangle(0, 0, m_Width, m_Height);
|
||||
var bmd = bitmap.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
||||
var len = Math.Abs(bmd.Stride) * bmd.Height;
|
||||
if (!DecompressPVR(pvrdata, bmd.Scan0, len))
|
||||
{
|
||||
bitmap.UnlockBits(bmd);
|
||||
bitmap.Dispose();
|
||||
return null;
|
||||
}
|
||||
bitmap.UnlockBits(bmd);
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
private Bitmap TextureConverter()
|
||||
{
|
||||
var bitmap = new Bitmap(m_Width, m_Height);
|
||||
var rect = new Rectangle(0, 0, m_Width, m_Height);
|
||||
var bmd = bitmap.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
||||
var len = Math.Abs(bmd.Stride) * bmd.Height;
|
||||
var fixAlpha = glBaseInternalFormat == KTXHeader.GL_RED || glBaseInternalFormat == KTXHeader.GL_RG;
|
||||
if (!Ponvert(image_data, bmd.Scan0, m_Width, m_Height, image_data_size, (int)q_format, len, fixAlpha))
|
||||
{
|
||||
bitmap.UnlockBits(bmd);
|
||||
bitmap.Dispose();
|
||||
return null;
|
||||
}
|
||||
bitmap.UnlockBits(bmd);
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
private void DecompressCRN()
|
||||
{
|
||||
IntPtr uncompressedData;
|
||||
int uncompressedSize;
|
||||
bool result;
|
||||
if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up
|
||||
{
|
||||
result = DecompressUnityCRN(image_data, image_data_size, out uncompressedData, out uncompressedSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = DecompressCRN(image_data, image_data_size, out uncompressedData, out uncompressedSize);
|
||||
}
|
||||
|
||||
if (result)
|
||||
{
|
||||
var uncompressedBytes = new byte[uncompressedSize];
|
||||
Marshal.Copy(uncompressedData, uncompressedBytes, 0, uncompressedSize);
|
||||
Marshal.FreeHGlobal(uncompressedData);
|
||||
image_data = uncompressedBytes;
|
||||
image_data_size = uncompressedSize;
|
||||
}
|
||||
}
|
||||
|
||||
private Bitmap Texgenpack()
|
||||
{
|
||||
var bitmap = new Bitmap(m_Width, m_Height);
|
||||
var rect = new Rectangle(0, 0, m_Width, m_Height);
|
||||
var bmd = bitmap.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
||||
var fixAlpha = glBaseInternalFormat == KTXHeader.GL_RED || glBaseInternalFormat == KTXHeader.GL_RG;
|
||||
texgenpackdecode((int)texturetype, image_data, m_Width, m_Height, bmd.Scan0, fixAlpha);
|
||||
bitmap.UnlockBits(bmd);
|
||||
return bitmap;
|
||||
}
|
||||
}
|
||||
|
||||
public static class KTXHeader
|
||||
{
|
||||
public static byte[] IDENTIFIER = { 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A };
|
||||
public static byte[] ENDIANESS_LE = { 1, 2, 3, 4 };
|
||||
public static byte[] ENDIANESS_BE = { 4, 3, 2, 1 };
|
||||
|
||||
// constants for glInternalFormat
|
||||
public static int GL_ETC1_RGB8_OES = 0x8D64;
|
||||
|
||||
public static int GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00;
|
||||
public static int GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01;
|
||||
public static int GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02;
|
||||
public static int GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03;
|
||||
|
||||
public static int GL_ATC_RGB_AMD = 0x8C92;
|
||||
public static int GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 0x8C93;
|
||||
public static int GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE;
|
||||
|
||||
public static int GL_COMPRESSED_RGB8_ETC2 = 0x9274;
|
||||
public static int GL_COMPRESSED_SRGB8_ETC2 = 0x9275;
|
||||
public static int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
|
||||
public static int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
|
||||
public static int GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
|
||||
public static int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
|
||||
public static int GL_COMPRESSED_R11_EAC = 0x9270;
|
||||
public static int GL_COMPRESSED_SIGNED_R11_EAC = 0x9271;
|
||||
public static int GL_COMPRESSED_RG11_EAC = 0x9272;
|
||||
public static int GL_COMPRESSED_SIGNED_RG11_EAC = 0x9273;
|
||||
|
||||
public static int GL_COMPRESSED_RED_RGTC1 = 0x8DBB;
|
||||
public static int GL_COMPRESSED_RG_RGTC2 = 0x8DBD;
|
||||
public static int GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F;
|
||||
public static int GL_COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C;
|
||||
|
||||
public static int GL_R16F = 0x822D;
|
||||
public static int GL_RG16F = 0x822F;
|
||||
public static int GL_RGBA16F = 0x881A;
|
||||
public static int GL_R32F = 0x822E;
|
||||
public static int GL_RG32F = 0x8230;
|
||||
public static int GL_RGBA32F = 0x8814;
|
||||
|
||||
// constants for glBaseInternalFormat
|
||||
public static int GL_RED = 0x1903;
|
||||
public static int GL_GREEN = 0x1904;
|
||||
public static int GL_BLUE = 0x1905;
|
||||
public static int GL_ALPHA = 0x1906;
|
||||
public static int GL_RGB = 0x1907;
|
||||
public static int GL_RGBA = 0x1908;
|
||||
public static int GL_RG = 0x8227;
|
||||
}
|
||||
|
||||
//from TextureConverter.h
|
||||
public enum QFORMAT
|
||||
{
|
||||
// General formats
|
||||
Q_FORMAT_RGBA_8UI = 1,
|
||||
Q_FORMAT_RGBA_8I,
|
||||
Q_FORMAT_RGB5_A1UI,
|
||||
Q_FORMAT_RGBA_4444,
|
||||
Q_FORMAT_RGBA_16UI,
|
||||
Q_FORMAT_RGBA_16I,
|
||||
Q_FORMAT_RGBA_32UI,
|
||||
Q_FORMAT_RGBA_32I,
|
||||
|
||||
Q_FORMAT_PALETTE_8_RGBA_8888,
|
||||
Q_FORMAT_PALETTE_8_RGBA_5551,
|
||||
Q_FORMAT_PALETTE_8_RGBA_4444,
|
||||
Q_FORMAT_PALETTE_4_RGBA_8888,
|
||||
Q_FORMAT_PALETTE_4_RGBA_5551,
|
||||
Q_FORMAT_PALETTE_4_RGBA_4444,
|
||||
Q_FORMAT_PALETTE_1_RGBA_8888,
|
||||
Q_FORMAT_PALETTE_8_RGB_888,
|
||||
Q_FORMAT_PALETTE_8_RGB_565,
|
||||
Q_FORMAT_PALETTE_4_RGB_888,
|
||||
Q_FORMAT_PALETTE_4_RGB_565,
|
||||
|
||||
Q_FORMAT_R2_GBA10UI,
|
||||
Q_FORMAT_RGB10_A2UI,
|
||||
Q_FORMAT_RGB10_A2I,
|
||||
Q_FORMAT_RGBA_F,
|
||||
Q_FORMAT_RGBA_HF,
|
||||
|
||||
Q_FORMAT_RGB9_E5, // Last five bits are exponent bits (Read following section in GLES3 spec: "3.8.17 Shared Exponent Texture Color Conversion")
|
||||
Q_FORMAT_RGB_8UI,
|
||||
Q_FORMAT_RGB_8I,
|
||||
Q_FORMAT_RGB_565,
|
||||
Q_FORMAT_RGB_16UI,
|
||||
Q_FORMAT_RGB_16I,
|
||||
Q_FORMAT_RGB_32UI,
|
||||
Q_FORMAT_RGB_32I,
|
||||
|
||||
Q_FORMAT_RGB_F,
|
||||
Q_FORMAT_RGB_HF,
|
||||
Q_FORMAT_RGB_11_11_10_F,
|
||||
|
||||
Q_FORMAT_RG_F,
|
||||
Q_FORMAT_RG_HF,
|
||||
Q_FORMAT_RG_32UI,
|
||||
Q_FORMAT_RG_32I,
|
||||
Q_FORMAT_RG_16I,
|
||||
Q_FORMAT_RG_16UI,
|
||||
Q_FORMAT_RG_8I,
|
||||
Q_FORMAT_RG_8UI,
|
||||
Q_FORMAT_RG_S88,
|
||||
|
||||
Q_FORMAT_R_32UI,
|
||||
Q_FORMAT_R_32I,
|
||||
Q_FORMAT_R_F,
|
||||
Q_FORMAT_R_16F,
|
||||
Q_FORMAT_R_16I,
|
||||
Q_FORMAT_R_16UI,
|
||||
Q_FORMAT_R_8I,
|
||||
Q_FORMAT_R_8UI,
|
||||
|
||||
Q_FORMAT_LUMINANCE_ALPHA_88,
|
||||
Q_FORMAT_LUMINANCE_8,
|
||||
Q_FORMAT_ALPHA_8,
|
||||
|
||||
Q_FORMAT_LUMINANCE_ALPHA_F,
|
||||
Q_FORMAT_LUMINANCE_F,
|
||||
Q_FORMAT_ALPHA_F,
|
||||
Q_FORMAT_LUMINANCE_ALPHA_HF,
|
||||
Q_FORMAT_LUMINANCE_HF,
|
||||
Q_FORMAT_ALPHA_HF,
|
||||
Q_FORMAT_DEPTH_16,
|
||||
Q_FORMAT_DEPTH_24,
|
||||
Q_FORMAT_DEPTH_24_STENCIL_8,
|
||||
Q_FORMAT_DEPTH_32,
|
||||
|
||||
Q_FORMAT_BGR_565,
|
||||
Q_FORMAT_BGRA_8888,
|
||||
Q_FORMAT_BGRA_5551,
|
||||
Q_FORMAT_BGRX_8888,
|
||||
Q_FORMAT_BGRA_4444,
|
||||
// Compressed formats
|
||||
Q_FORMAT_ATITC_RGBA,
|
||||
Q_FORMAT_ATC_RGBA_EXPLICIT_ALPHA = Q_FORMAT_ATITC_RGBA,
|
||||
Q_FORMAT_ATITC_RGB,
|
||||
Q_FORMAT_ATC_RGB = Q_FORMAT_ATITC_RGB,
|
||||
Q_FORMAT_ATC_RGBA_INTERPOLATED_ALPHA,
|
||||
Q_FORMAT_ETC1_RGB8,
|
||||
Q_FORMAT_3DC_X,
|
||||
Q_FORMAT_3DC_XY,
|
||||
|
||||
Q_FORMAT_ETC2_RGB8,
|
||||
Q_FORMAT_ETC2_RGBA8,
|
||||
Q_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1,
|
||||
Q_FORMAT_ETC2_SRGB8,
|
||||
Q_FORMAT_ETC2_SRGB8_ALPHA8,
|
||||
Q_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1,
|
||||
Q_FORMAT_EAC_R_SIGNED,
|
||||
Q_FORMAT_EAC_R_UNSIGNED,
|
||||
Q_FORMAT_EAC_RG_SIGNED,
|
||||
Q_FORMAT_EAC_RG_UNSIGNED,
|
||||
|
||||
Q_FORMAT_S3TC_DXT1_RGB,
|
||||
Q_FORMAT_S3TC_DXT1_RGBA,
|
||||
Q_FORMAT_S3TC_DXT3_RGBA,
|
||||
Q_FORMAT_S3TC_DXT5_RGBA,
|
||||
|
||||
// YUV formats
|
||||
Q_FORMAT_AYUV_32,
|
||||
Q_FORMAT_I444_24,
|
||||
Q_FORMAT_YUYV_16,
|
||||
Q_FORMAT_UYVY_16,
|
||||
Q_FORMAT_I420_12,
|
||||
Q_FORMAT_YV12_12,
|
||||
Q_FORMAT_NV21_12,
|
||||
Q_FORMAT_NV12_12,
|
||||
|
||||
// ASTC Format
|
||||
Q_FORMAT_ASTC_8,
|
||||
Q_FORMAT_ASTC_16,
|
||||
};
|
||||
|
||||
public enum texgenpack_texturetype
|
||||
{
|
||||
RGTC1,
|
||||
RGTC2,
|
||||
BPTC_FLOAT,
|
||||
BPTC
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class Transform
|
||||
{
|
||||
@@ -17,21 +17,20 @@ namespace Unity_Studio
|
||||
public Transform(AssetPreloadData preloadData)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var a_Stream = preloadData.sourceFile.a_Stream;
|
||||
a_Stream.Position = preloadData.Offset;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
if (sourceFile.platform == -2)
|
||||
{
|
||||
uint m_ObjectHideFlags = a_Stream.ReadUInt32();
|
||||
uint m_ObjectHideFlags = reader.ReadUInt32();
|
||||
PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
|
||||
PPtr m_PrefabInternal = sourceFile.ReadPPtr();
|
||||
}
|
||||
|
||||
m_GameObject = sourceFile.ReadPPtr();
|
||||
m_LocalRotation = new[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
m_LocalPosition = new[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
m_LocalScale = new[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||
int m_ChildrenCount = a_Stream.ReadInt32();
|
||||
m_LocalRotation = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||
m_LocalPosition = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||
m_LocalScale = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
|
||||
int m_ChildrenCount = reader.ReadInt32();
|
||||
for (int j = 0; j < m_ChildrenCount; j++)
|
||||
{
|
||||
m_Children.Add(sourceFile.ReadPPtr());
|
||||
102
AssetStudio/Classes/VideoClip.cs
Normal file
102
AssetStudio/Classes/VideoClip.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class VideoClip
|
||||
{
|
||||
public string m_Name;
|
||||
public byte[] m_VideoData;
|
||||
|
||||
public VideoClip(AssetPreloadData preloadData, bool readSwitch)
|
||||
{
|
||||
var sourceFile = preloadData.sourceFile;
|
||||
var reader = preloadData.InitReader();
|
||||
|
||||
m_Name = reader.ReadAlignedString();
|
||||
var m_OriginalPath = reader.ReadAlignedString();
|
||||
var m_ProxyWidth = reader.ReadUInt32();
|
||||
var m_ProxyHeight = reader.ReadUInt32();
|
||||
var Width = reader.ReadUInt32();
|
||||
var Height = reader.ReadUInt32();
|
||||
if (sourceFile.version[0] >= 2017)//2017.x and up
|
||||
{
|
||||
var m_PixelAspecRatioNum = reader.ReadUInt32();
|
||||
var m_PixelAspecRatioDen = reader.ReadUInt32();
|
||||
}
|
||||
var m_FrameRate = reader.ReadDouble();
|
||||
var m_FrameCount = reader.ReadUInt64();
|
||||
var m_Format = reader.ReadInt32();
|
||||
//m_AudioChannelCount
|
||||
var size = reader.ReadInt32();
|
||||
reader.Position += size * 2;
|
||||
reader.AlignStream(4);
|
||||
//m_AudioSampleRate
|
||||
size = reader.ReadInt32();
|
||||
reader.Position += size * 4;
|
||||
//m_AudioLanguage
|
||||
size = reader.ReadInt32();
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
reader.ReadAlignedString();
|
||||
}
|
||||
//StreamedResource m_ExternalResources
|
||||
var m_Source = reader.ReadAlignedString();
|
||||
var m_Offset = reader.ReadUInt64();
|
||||
var m_Size = reader.ReadUInt64();
|
||||
var m_HasSplitAlpha = reader.ReadBoolean();
|
||||
|
||||
if (readSwitch)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(m_Source))
|
||||
{
|
||||
var resourceFileName = Path.GetFileName(m_Source);
|
||||
var resourceFilePath = Path.GetDirectoryName(sourceFile.filePath) + "\\" + resourceFileName;
|
||||
if (!File.Exists(resourceFilePath))
|
||||
{
|
||||
var findFiles = Directory.GetFiles(Path.GetDirectoryName(sourceFile.filePath), resourceFileName, SearchOption.AllDirectories);
|
||||
if (findFiles.Length > 0)
|
||||
{
|
||||
resourceFilePath = findFiles[0];
|
||||
}
|
||||
}
|
||||
if (File.Exists(resourceFilePath))
|
||||
{
|
||||
using (var resourceReader = new BinaryReader(File.OpenRead(resourceFilePath)))
|
||||
{
|
||||
resourceReader.BaseStream.Position = (long)m_Offset;
|
||||
m_VideoData = resourceReader.ReadBytes((int)m_Size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Studio.resourceFileReaders.TryGetValue(resourceFileName.ToUpper(), out var resourceReader))
|
||||
{
|
||||
resourceReader.Position = (long)m_Offset;
|
||||
m_VideoData = resourceReader.ReadBytes((int)m_Size);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show($"can't find the resource file {resourceFileName}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Size > 0)
|
||||
m_VideoData = reader.ReadBytes((int)m_Size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
preloadData.extension = Path.GetExtension(m_OriginalPath);
|
||||
preloadData.Text = m_Name;
|
||||
preloadData.fullSize = preloadData.Size + (int)m_Size;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
partial class ExportOptions
|
||||
{
|
||||
@@ -46,21 +46,34 @@
|
||||
this.scaleLabel = new System.Windows.Forms.Label();
|
||||
this.fbxOKbutton = new System.Windows.Forms.Button();
|
||||
this.fbxCancel = new System.Windows.Forms.Button();
|
||||
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
|
||||
this.showExpOpt = new System.Windows.Forms.CheckBox();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.convertfsb = new System.Windows.Forms.CheckBox();
|
||||
this.convertAudio = new System.Windows.Forms.CheckBox();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.tojpg = new System.Windows.Forms.RadioButton();
|
||||
this.topng = new System.Windows.Forms.RadioButton();
|
||||
this.tobmp = new System.Windows.Forms.RadioButton();
|
||||
this.converttexture = new System.Windows.Forms.CheckBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.compatibility = new System.Windows.Forms.CheckBox();
|
||||
this.flatInbetween = new System.Windows.Forms.CheckBox();
|
||||
this.boneSize = new System.Windows.Forms.NumericUpDown();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.skins = new System.Windows.Forms.CheckBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.filterPrecision = new System.Windows.Forms.NumericUpDown();
|
||||
this.allBones = new System.Windows.Forms.CheckBox();
|
||||
this.allFrames = new System.Windows.Forms.CheckBox();
|
||||
this.EulerFilter = new System.Windows.Forms.CheckBox();
|
||||
this.includeBox.SuspendLayout();
|
||||
this.geometryBox.SuspendLayout();
|
||||
this.advancedBox.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.scaleFactor)).BeginInit();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.boneSize)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.filterPrecision)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// includeBox
|
||||
@@ -72,11 +85,9 @@
|
||||
this.includeBox.Controls.Add(this.camerasBox);
|
||||
this.includeBox.Controls.Add(this.exportDeformers);
|
||||
this.includeBox.Controls.Add(this.geometryBox);
|
||||
this.includeBox.Location = new System.Drawing.Point(16, 15);
|
||||
this.includeBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.includeBox.Location = new System.Drawing.Point(12, 12);
|
||||
this.includeBox.Name = "includeBox";
|
||||
this.includeBox.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.includeBox.Size = new System.Drawing.Size(332, 334);
|
||||
this.includeBox.Size = new System.Drawing.Size(249, 267);
|
||||
this.includeBox.TabIndex = 0;
|
||||
this.includeBox.TabStop = false;
|
||||
this.includeBox.Text = "Include";
|
||||
@@ -84,10 +95,9 @@
|
||||
// convertDummies
|
||||
//
|
||||
this.convertDummies.AutoSize = true;
|
||||
this.convertDummies.Location = new System.Drawing.Point(19, 205);
|
||||
this.convertDummies.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.convertDummies.Location = new System.Drawing.Point(14, 164);
|
||||
this.convertDummies.Name = "convertDummies";
|
||||
this.convertDummies.Size = new System.Drawing.Size(302, 20);
|
||||
this.convertDummies.Size = new System.Drawing.Size(228, 16);
|
||||
this.convertDummies.TabIndex = 5;
|
||||
this.convertDummies.Text = "Convert Deforming Dummies to Bones";
|
||||
this.convertDummies.UseVisualStyleBackColor = true;
|
||||
@@ -97,10 +107,9 @@
|
||||
//
|
||||
this.embedBox.AutoSize = true;
|
||||
this.embedBox.Enabled = false;
|
||||
this.embedBox.Location = new System.Drawing.Point(19, 288);
|
||||
this.embedBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.embedBox.Location = new System.Drawing.Point(14, 230);
|
||||
this.embedBox.Name = "embedBox";
|
||||
this.embedBox.Size = new System.Drawing.Size(118, 20);
|
||||
this.embedBox.Size = new System.Drawing.Size(90, 16);
|
||||
this.embedBox.TabIndex = 4;
|
||||
this.embedBox.Text = "Embed Media";
|
||||
this.embedBox.UseVisualStyleBackColor = true;
|
||||
@@ -109,10 +118,9 @@
|
||||
//
|
||||
this.lightsBox.AutoSize = true;
|
||||
this.lightsBox.Enabled = false;
|
||||
this.lightsBox.Location = new System.Drawing.Point(19, 260);
|
||||
this.lightsBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.lightsBox.Location = new System.Drawing.Point(14, 208);
|
||||
this.lightsBox.Name = "lightsBox";
|
||||
this.lightsBox.Size = new System.Drawing.Size(78, 20);
|
||||
this.lightsBox.Size = new System.Drawing.Size(60, 16);
|
||||
this.lightsBox.TabIndex = 3;
|
||||
this.lightsBox.Text = "Lights";
|
||||
this.lightsBox.UseVisualStyleBackColor = true;
|
||||
@@ -121,10 +129,9 @@
|
||||
//
|
||||
this.camerasBox.AutoSize = true;
|
||||
this.camerasBox.Enabled = false;
|
||||
this.camerasBox.Location = new System.Drawing.Point(19, 232);
|
||||
this.camerasBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.camerasBox.Location = new System.Drawing.Point(14, 186);
|
||||
this.camerasBox.Name = "camerasBox";
|
||||
this.camerasBox.Size = new System.Drawing.Size(86, 20);
|
||||
this.camerasBox.Size = new System.Drawing.Size(66, 16);
|
||||
this.camerasBox.TabIndex = 2;
|
||||
this.camerasBox.Text = "Cameras";
|
||||
this.camerasBox.UseVisualStyleBackColor = true;
|
||||
@@ -132,10 +139,9 @@
|
||||
// exportDeformers
|
||||
//
|
||||
this.exportDeformers.AutoSize = true;
|
||||
this.exportDeformers.Location = new System.Drawing.Point(19, 178);
|
||||
this.exportDeformers.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.exportDeformers.Location = new System.Drawing.Point(14, 142);
|
||||
this.exportDeformers.Name = "exportDeformers";
|
||||
this.exportDeformers.Size = new System.Drawing.Size(142, 20);
|
||||
this.exportDeformers.Size = new System.Drawing.Size(108, 16);
|
||||
this.exportDeformers.TabIndex = 1;
|
||||
this.exportDeformers.Text = "Skin Deformers";
|
||||
this.exportDeformers.UseVisualStyleBackColor = true;
|
||||
@@ -148,11 +154,9 @@
|
||||
this.geometryBox.Controls.Add(this.exportUVs);
|
||||
this.geometryBox.Controls.Add(this.exportTangents);
|
||||
this.geometryBox.Controls.Add(this.exportNormals);
|
||||
this.geometryBox.Location = new System.Drawing.Point(9, 22);
|
||||
this.geometryBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.geometryBox.Location = new System.Drawing.Point(7, 18);
|
||||
this.geometryBox.Name = "geometryBox";
|
||||
this.geometryBox.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.geometryBox.Size = new System.Drawing.Size(313, 152);
|
||||
this.geometryBox.Size = new System.Drawing.Size(235, 122);
|
||||
this.geometryBox.TabIndex = 0;
|
||||
this.geometryBox.TabStop = false;
|
||||
this.geometryBox.Text = "Geometry";
|
||||
@@ -162,10 +166,9 @@
|
||||
this.exportColors.AutoSize = true;
|
||||
this.exportColors.Checked = true;
|
||||
this.exportColors.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.exportColors.Location = new System.Drawing.Point(9, 106);
|
||||
this.exportColors.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.exportColors.Location = new System.Drawing.Point(7, 85);
|
||||
this.exportColors.Name = "exportColors";
|
||||
this.exportColors.Size = new System.Drawing.Size(134, 20);
|
||||
this.exportColors.Size = new System.Drawing.Size(102, 16);
|
||||
this.exportColors.TabIndex = 3;
|
||||
this.exportColors.Text = "Vertex Colors";
|
||||
this.exportColors.UseVisualStyleBackColor = true;
|
||||
@@ -176,10 +179,9 @@
|
||||
this.exportUVs.AutoSize = true;
|
||||
this.exportUVs.Checked = true;
|
||||
this.exportUVs.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.exportUVs.Location = new System.Drawing.Point(9, 79);
|
||||
this.exportUVs.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.exportUVs.Location = new System.Drawing.Point(7, 63);
|
||||
this.exportUVs.Name = "exportUVs";
|
||||
this.exportUVs.Size = new System.Drawing.Size(142, 20);
|
||||
this.exportUVs.Size = new System.Drawing.Size(108, 16);
|
||||
this.exportUVs.TabIndex = 2;
|
||||
this.exportUVs.Text = "UV Coordinates";
|
||||
this.exportUVs.UseVisualStyleBackColor = true;
|
||||
@@ -188,10 +190,9 @@
|
||||
// exportTangents
|
||||
//
|
||||
this.exportTangents.AutoSize = true;
|
||||
this.exportTangents.Location = new System.Drawing.Point(9, 51);
|
||||
this.exportTangents.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.exportTangents.Location = new System.Drawing.Point(7, 41);
|
||||
this.exportTangents.Name = "exportTangents";
|
||||
this.exportTangents.Size = new System.Drawing.Size(94, 20);
|
||||
this.exportTangents.Size = new System.Drawing.Size(72, 16);
|
||||
this.exportTangents.TabIndex = 1;
|
||||
this.exportTangents.Text = "Tangents";
|
||||
this.exportTangents.UseVisualStyleBackColor = true;
|
||||
@@ -202,10 +203,9 @@
|
||||
this.exportNormals.AutoSize = true;
|
||||
this.exportNormals.Checked = true;
|
||||
this.exportNormals.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.exportNormals.Location = new System.Drawing.Point(9, 22);
|
||||
this.exportNormals.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.exportNormals.Location = new System.Drawing.Point(7, 18);
|
||||
this.exportNormals.Name = "exportNormals";
|
||||
this.exportNormals.Size = new System.Drawing.Size(86, 20);
|
||||
this.exportNormals.Size = new System.Drawing.Size(66, 16);
|
||||
this.exportNormals.TabIndex = 0;
|
||||
this.exportNormals.Text = "Normals";
|
||||
this.exportNormals.UseVisualStyleBackColor = true;
|
||||
@@ -218,11 +218,9 @@
|
||||
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(16, 355);
|
||||
this.advancedBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.advancedBox.Location = new System.Drawing.Point(12, 285);
|
||||
this.advancedBox.Name = "advancedBox";
|
||||
this.advancedBox.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.advancedBox.Size = new System.Drawing.Size(332, 96);
|
||||
this.advancedBox.Size = new System.Drawing.Size(249, 78);
|
||||
this.advancedBox.TabIndex = 5;
|
||||
this.advancedBox.TabStop = false;
|
||||
this.advancedBox.Text = "Advanced Options";
|
||||
@@ -230,10 +228,9 @@
|
||||
// axisLabel
|
||||
//
|
||||
this.axisLabel.AutoSize = true;
|
||||
this.axisLabel.Location = new System.Drawing.Point(8, 50);
|
||||
this.axisLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.axisLabel.Location = new System.Drawing.Point(6, 40);
|
||||
this.axisLabel.Name = "axisLabel";
|
||||
this.axisLabel.Size = new System.Drawing.Size(72, 16);
|
||||
this.axisLabel.Size = new System.Drawing.Size(53, 12);
|
||||
this.axisLabel.TabIndex = 3;
|
||||
this.axisLabel.Text = "Up Axis:";
|
||||
//
|
||||
@@ -242,11 +239,10 @@
|
||||
this.upAxis.FormattingEnabled = true;
|
||||
this.upAxis.Items.AddRange(new object[] {
|
||||
"Y-up"});
|
||||
this.upAxis.Location = new System.Drawing.Point(88, 47);
|
||||
this.upAxis.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.upAxis.Location = new System.Drawing.Point(66, 38);
|
||||
this.upAxis.MaxDropDownItems = 2;
|
||||
this.upAxis.Name = "upAxis";
|
||||
this.upAxis.Size = new System.Drawing.Size(92, 23);
|
||||
this.upAxis.Size = new System.Drawing.Size(70, 20);
|
||||
this.upAxis.TabIndex = 2;
|
||||
//
|
||||
// scaleFactor
|
||||
@@ -257,10 +253,9 @@
|
||||
0,
|
||||
0,
|
||||
131072});
|
||||
this.scaleFactor.Location = new System.Drawing.Point(128, 17);
|
||||
this.scaleFactor.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.scaleFactor.Location = new System.Drawing.Point(96, 14);
|
||||
this.scaleFactor.Name = "scaleFactor";
|
||||
this.scaleFactor.Size = new System.Drawing.Size(61, 25);
|
||||
this.scaleFactor.Size = new System.Drawing.Size(46, 21);
|
||||
this.scaleFactor.TabIndex = 1;
|
||||
this.scaleFactor.Value = new decimal(new int[] {
|
||||
254,
|
||||
@@ -271,19 +266,17 @@
|
||||
// scaleLabel
|
||||
//
|
||||
this.scaleLabel.AutoSize = true;
|
||||
this.scaleLabel.Location = new System.Drawing.Point(8, 19);
|
||||
this.scaleLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.scaleLabel.Location = new System.Drawing.Point(6, 15);
|
||||
this.scaleLabel.Name = "scaleLabel";
|
||||
this.scaleLabel.Size = new System.Drawing.Size(112, 16);
|
||||
this.scaleLabel.Size = new System.Drawing.Size(83, 12);
|
||||
this.scaleLabel.TabIndex = 0;
|
||||
this.scaleLabel.Text = "Scale Factor:";
|
||||
//
|
||||
// fbxOKbutton
|
||||
//
|
||||
this.fbxOKbutton.Location = new System.Drawing.Point(443, 455);
|
||||
this.fbxOKbutton.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.fbxOKbutton.Location = new System.Drawing.Point(339, 369);
|
||||
this.fbxOKbutton.Name = "fbxOKbutton";
|
||||
this.fbxOKbutton.Size = new System.Drawing.Size(100, 26);
|
||||
this.fbxOKbutton.Size = new System.Drawing.Size(75, 21);
|
||||
this.fbxOKbutton.TabIndex = 6;
|
||||
this.fbxOKbutton.Text = "OK";
|
||||
this.fbxOKbutton.UseVisualStyleBackColor = true;
|
||||
@@ -292,76 +285,64 @@
|
||||
// fbxCancel
|
||||
//
|
||||
this.fbxCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.fbxCancel.Location = new System.Drawing.Point(560, 455);
|
||||
this.fbxCancel.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.fbxCancel.Location = new System.Drawing.Point(420, 369);
|
||||
this.fbxCancel.Name = "fbxCancel";
|
||||
this.fbxCancel.Size = new System.Drawing.Size(100, 26);
|
||||
this.fbxCancel.Size = new System.Drawing.Size(75, 21);
|
||||
this.fbxCancel.TabIndex = 7;
|
||||
this.fbxCancel.Text = "Cancel";
|
||||
this.fbxCancel.UseVisualStyleBackColor = true;
|
||||
this.fbxCancel.Click += new System.EventHandler(this.fbxCancel_Click);
|
||||
//
|
||||
// saveFileDialog1
|
||||
//
|
||||
this.saveFileDialog1.Filter = "FBX file|*.fbx|Collada|*.dae";
|
||||
this.saveFileDialog1.RestoreDirectory = true;
|
||||
//
|
||||
// showExpOpt
|
||||
//
|
||||
this.showExpOpt.AutoSize = true;
|
||||
this.showExpOpt.Location = new System.Drawing.Point(16, 459);
|
||||
this.showExpOpt.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.showExpOpt.Location = new System.Drawing.Point(12, 372);
|
||||
this.showExpOpt.Name = "showExpOpt";
|
||||
this.showExpOpt.Size = new System.Drawing.Size(294, 20);
|
||||
this.showExpOpt.Size = new System.Drawing.Size(222, 16);
|
||||
this.showExpOpt.TabIndex = 8;
|
||||
this.showExpOpt.Text = "Show this dialog for every export";
|
||||
this.showExpOpt.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.convertfsb);
|
||||
this.groupBox1.Controls.Add(this.convertAudio);
|
||||
this.groupBox1.Controls.Add(this.panel1);
|
||||
this.groupBox1.Controls.Add(this.converttexture);
|
||||
this.groupBox1.Location = new System.Drawing.Point(356, 15);
|
||||
this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Location = new System.Drawing.Point(267, 12);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Size = new System.Drawing.Size(304, 436);
|
||||
this.groupBox1.Size = new System.Drawing.Size(228, 140);
|
||||
this.groupBox1.TabIndex = 9;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Convert";
|
||||
//
|
||||
// convertfsb
|
||||
// convertAudio
|
||||
//
|
||||
this.convertfsb.AutoSize = true;
|
||||
this.convertfsb.Checked = true;
|
||||
this.convertfsb.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.convertfsb.Location = new System.Drawing.Point(11, 101);
|
||||
this.convertfsb.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.convertfsb.Name = "convertfsb";
|
||||
this.convertfsb.Size = new System.Drawing.Size(174, 20);
|
||||
this.convertfsb.TabIndex = 6;
|
||||
this.convertfsb.Text = "Convert FSB to WAV";
|
||||
this.convertfsb.UseVisualStyleBackColor = true;
|
||||
this.convertAudio.AutoSize = true;
|
||||
this.convertAudio.Checked = true;
|
||||
this.convertAudio.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.convertAudio.Location = new System.Drawing.Point(6, 78);
|
||||
this.convertAudio.Name = "convertAudio";
|
||||
this.convertAudio.Size = new System.Drawing.Size(198, 28);
|
||||
this.convertAudio.TabIndex = 6;
|
||||
this.convertAudio.Text = "Convert AudioClip to WAV(PCM)\r\n(If support)";
|
||||
this.convertAudio.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.tojpg);
|
||||
this.panel1.Controls.Add(this.topng);
|
||||
this.panel1.Controls.Add(this.tobmp);
|
||||
this.panel1.Location = new System.Drawing.Point(40, 52);
|
||||
this.panel1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.panel1.Location = new System.Drawing.Point(30, 42);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(195, 38);
|
||||
this.panel1.Size = new System.Drawing.Size(146, 30);
|
||||
this.panel1.TabIndex = 5;
|
||||
//
|
||||
// tojpg
|
||||
//
|
||||
this.tojpg.AutoSize = true;
|
||||
this.tojpg.Location = new System.Drawing.Point(129, 8);
|
||||
this.tojpg.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tojpg.Location = new System.Drawing.Point(97, 6);
|
||||
this.tojpg.Name = "tojpg";
|
||||
this.tojpg.Size = new System.Drawing.Size(61, 20);
|
||||
this.tojpg.Size = new System.Drawing.Size(47, 16);
|
||||
this.tojpg.TabIndex = 4;
|
||||
this.tojpg.Text = "JPEG";
|
||||
this.tojpg.UseVisualStyleBackColor = true;
|
||||
@@ -370,10 +351,9 @@
|
||||
//
|
||||
this.topng.AutoSize = true;
|
||||
this.topng.Checked = true;
|
||||
this.topng.Location = new System.Drawing.Point(67, 8);
|
||||
this.topng.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.topng.Location = new System.Drawing.Point(50, 6);
|
||||
this.topng.Name = "topng";
|
||||
this.topng.Size = new System.Drawing.Size(53, 20);
|
||||
this.topng.Size = new System.Drawing.Size(41, 16);
|
||||
this.topng.TabIndex = 3;
|
||||
this.topng.TabStop = true;
|
||||
this.topng.Text = "PNG";
|
||||
@@ -382,10 +362,9 @@
|
||||
// tobmp
|
||||
//
|
||||
this.tobmp.AutoSize = true;
|
||||
this.tobmp.Location = new System.Drawing.Point(4, 8);
|
||||
this.tobmp.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tobmp.Location = new System.Drawing.Point(3, 6);
|
||||
this.tobmp.Name = "tobmp";
|
||||
this.tobmp.Size = new System.Drawing.Size(53, 20);
|
||||
this.tobmp.Size = new System.Drawing.Size(41, 16);
|
||||
this.tobmp.TabIndex = 2;
|
||||
this.tobmp.Text = "BMP";
|
||||
this.tobmp.UseVisualStyleBackColor = true;
|
||||
@@ -395,28 +374,158 @@
|
||||
this.converttexture.AutoSize = true;
|
||||
this.converttexture.Checked = true;
|
||||
this.converttexture.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.converttexture.Location = new System.Drawing.Point(11, 25);
|
||||
this.converttexture.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.converttexture.Location = new System.Drawing.Point(6, 20);
|
||||
this.converttexture.Name = "converttexture";
|
||||
this.converttexture.Size = new System.Drawing.Size(254, 20);
|
||||
this.converttexture.Size = new System.Drawing.Size(192, 16);
|
||||
this.converttexture.TabIndex = 1;
|
||||
this.converttexture.Text = "Convert Texture (If support)";
|
||||
this.converttexture.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.compatibility);
|
||||
this.groupBox2.Controls.Add(this.flatInbetween);
|
||||
this.groupBox2.Controls.Add(this.boneSize);
|
||||
this.groupBox2.Controls.Add(this.label2);
|
||||
this.groupBox2.Controls.Add(this.skins);
|
||||
this.groupBox2.Controls.Add(this.label1);
|
||||
this.groupBox2.Controls.Add(this.filterPrecision);
|
||||
this.groupBox2.Controls.Add(this.allBones);
|
||||
this.groupBox2.Controls.Add(this.allFrames);
|
||||
this.groupBox2.Controls.Add(this.EulerFilter);
|
||||
this.groupBox2.Location = new System.Drawing.Point(267, 158);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(228, 205);
|
||||
this.groupBox2.TabIndex = 11;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Animator";
|
||||
//
|
||||
// compatibility
|
||||
//
|
||||
this.compatibility.AutoSize = true;
|
||||
this.compatibility.Location = new System.Drawing.Point(6, 177);
|
||||
this.compatibility.Name = "compatibility";
|
||||
this.compatibility.Size = new System.Drawing.Size(102, 16);
|
||||
this.compatibility.TabIndex = 13;
|
||||
this.compatibility.Text = "compatibility";
|
||||
this.compatibility.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// flatInbetween
|
||||
//
|
||||
this.flatInbetween.AutoSize = true;
|
||||
this.flatInbetween.Location = new System.Drawing.Point(6, 155);
|
||||
this.flatInbetween.Name = "flatInbetween";
|
||||
this.flatInbetween.Size = new System.Drawing.Size(102, 16);
|
||||
this.flatInbetween.TabIndex = 12;
|
||||
this.flatInbetween.Text = "flatInbetween";
|
||||
this.flatInbetween.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// boneSize
|
||||
//
|
||||
this.boneSize.Location = new System.Drawing.Point(65, 128);
|
||||
this.boneSize.Name = "boneSize";
|
||||
this.boneSize.Size = new System.Drawing.Size(46, 21);
|
||||
this.boneSize.TabIndex = 11;
|
||||
this.boneSize.Value = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(6, 130);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(53, 12);
|
||||
this.label2.TabIndex = 10;
|
||||
this.label2.Text = "boneSize";
|
||||
//
|
||||
// skins
|
||||
//
|
||||
this.skins.AutoSize = true;
|
||||
this.skins.Checked = true;
|
||||
this.skins.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.skins.Location = new System.Drawing.Point(6, 105);
|
||||
this.skins.Name = "skins";
|
||||
this.skins.Size = new System.Drawing.Size(54, 16);
|
||||
this.skins.TabIndex = 8;
|
||||
this.skins.Text = "skins";
|
||||
this.skins.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(26, 39);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(95, 12);
|
||||
this.label1.TabIndex = 7;
|
||||
this.label1.Text = "filterPrecision";
|
||||
//
|
||||
// filterPrecision
|
||||
//
|
||||
this.filterPrecision.DecimalPlaces = 2;
|
||||
this.filterPrecision.Increment = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
131072});
|
||||
this.filterPrecision.Location = new System.Drawing.Point(127, 37);
|
||||
this.filterPrecision.Name = "filterPrecision";
|
||||
this.filterPrecision.Size = new System.Drawing.Size(51, 21);
|
||||
this.filterPrecision.TabIndex = 6;
|
||||
this.filterPrecision.Value = new decimal(new int[] {
|
||||
25,
|
||||
0,
|
||||
0,
|
||||
131072});
|
||||
//
|
||||
// allBones
|
||||
//
|
||||
this.allBones.AutoSize = true;
|
||||
this.allBones.Checked = true;
|
||||
this.allBones.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.allBones.Location = new System.Drawing.Point(6, 83);
|
||||
this.allBones.Name = "allBones";
|
||||
this.allBones.Size = new System.Drawing.Size(72, 16);
|
||||
this.allBones.TabIndex = 5;
|
||||
this.allBones.Text = "allBones";
|
||||
this.allBones.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// allFrames
|
||||
//
|
||||
this.allFrames.AutoSize = true;
|
||||
this.allFrames.Location = new System.Drawing.Point(6, 61);
|
||||
this.allFrames.Name = "allFrames";
|
||||
this.allFrames.Size = new System.Drawing.Size(78, 16);
|
||||
this.allFrames.TabIndex = 4;
|
||||
this.allFrames.Text = "allFrames";
|
||||
this.allFrames.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// EulerFilter
|
||||
//
|
||||
this.EulerFilter.AutoSize = true;
|
||||
this.EulerFilter.Location = new System.Drawing.Point(6, 20);
|
||||
this.EulerFilter.Name = "EulerFilter";
|
||||
this.EulerFilter.Size = new System.Drawing.Size(90, 16);
|
||||
this.EulerFilter.TabIndex = 3;
|
||||
this.EulerFilter.Text = "EulerFilter";
|
||||
this.EulerFilter.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// ExportOptions
|
||||
//
|
||||
this.AcceptButton = this.fbxOKbutton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.fbxCancel;
|
||||
this.ClientSize = new System.Drawing.Size(684, 490);
|
||||
this.ClientSize = new System.Drawing.Size(508, 398);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.showExpOpt);
|
||||
this.Controls.Add(this.fbxCancel);
|
||||
this.Controls.Add(this.fbxOKbutton);
|
||||
this.Controls.Add(this.advancedBox);
|
||||
this.Controls.Add(this.includeBox);
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "ExportOptions";
|
||||
@@ -436,6 +545,10 @@
|
||||
this.groupBox1.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.boneSize)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.filterPrecision)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -460,7 +573,6 @@
|
||||
private System.Windows.Forms.ComboBox upAxis;
|
||||
private System.Windows.Forms.Button fbxOKbutton;
|
||||
private System.Windows.Forms.Button fbxCancel;
|
||||
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
|
||||
private System.Windows.Forms.CheckBox showExpOpt;
|
||||
private System.Windows.Forms.CheckBox convertDummies;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
@@ -468,7 +580,18 @@
|
||||
private System.Windows.Forms.RadioButton tojpg;
|
||||
private System.Windows.Forms.RadioButton topng;
|
||||
private System.Windows.Forms.RadioButton tobmp;
|
||||
private System.Windows.Forms.CheckBox convertfsb;
|
||||
private System.Windows.Forms.CheckBox convertAudio;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.CheckBox compatibility;
|
||||
private System.Windows.Forms.CheckBox flatInbetween;
|
||||
private System.Windows.Forms.NumericUpDown boneSize;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.CheckBox skins;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.NumericUpDown filterPrecision;
|
||||
private System.Windows.Forms.CheckBox allBones;
|
||||
private System.Windows.Forms.CheckBox allFrames;
|
||||
private System.Windows.Forms.CheckBox EulerFilter;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
public partial class ExportOptions : Form
|
||||
{
|
||||
@@ -26,7 +26,7 @@ namespace Unity_Studio
|
||||
upAxis.SelectedIndex = (int)Properties.Settings.Default["upAxis"];
|
||||
showExpOpt.Checked = (bool)Properties.Settings.Default["showExpOpt"];
|
||||
converttexture.Checked = (bool)Properties.Settings.Default["convertTexture"];
|
||||
convertfsb.Checked = (bool)Properties.Settings.Default["convertfsb"];
|
||||
convertAudio.Checked = (bool)Properties.Settings.Default["convertAudio"];
|
||||
var str = (string)Properties.Settings.Default["convertType"];
|
||||
foreach (Control c in panel1.Controls)
|
||||
{
|
||||
@@ -36,6 +36,14 @@ namespace Unity_Studio
|
||||
break;
|
||||
}
|
||||
}
|
||||
EulerFilter.Checked = (bool)Properties.Settings.Default["EulerFilter"];
|
||||
filterPrecision.Value = (decimal)Properties.Settings.Default["filterPrecision"];
|
||||
allFrames.Checked = (bool)Properties.Settings.Default["allFrames"];
|
||||
allBones.Checked = (bool)Properties.Settings.Default["allBones"];
|
||||
skins.Checked = (bool)Properties.Settings.Default["skins"];
|
||||
boneSize.Value = (decimal)Properties.Settings.Default["boneSize"];
|
||||
flatInbetween.Checked = (bool)Properties.Settings.Default["flatInbetween"];
|
||||
compatibility.Checked = (bool)Properties.Settings.Default["compatibility"];
|
||||
}
|
||||
|
||||
private void exportOpnions_CheckedChanged(object sender, EventArgs e)
|
||||
@@ -54,7 +62,7 @@ namespace Unity_Studio
|
||||
Properties.Settings.Default["scaleFactor"] = scaleFactor.Value;
|
||||
Properties.Settings.Default["upAxis"] = upAxis.SelectedIndex;
|
||||
Properties.Settings.Default["convertTexture"] = converttexture.Checked;
|
||||
Properties.Settings.Default["convertfsb"] = convertfsb.Checked;
|
||||
Properties.Settings.Default["convertAudio"] = convertAudio.Checked;
|
||||
foreach (Control c in panel1.Controls)
|
||||
{
|
||||
if (((RadioButton)c).Checked)
|
||||
@@ -63,6 +71,14 @@ namespace Unity_Studio
|
||||
break;
|
||||
}
|
||||
}
|
||||
Properties.Settings.Default["EulerFilter"] = EulerFilter.Checked;
|
||||
Properties.Settings.Default["filterPrecision"] = filterPrecision.Value;
|
||||
Properties.Settings.Default["allFrames"] = allFrames.Checked;
|
||||
Properties.Settings.Default["allBones"] = allBones.Checked;
|
||||
Properties.Settings.Default["skins"] = skins.Checked;
|
||||
Properties.Settings.Default["boneSize"] = boneSize.Value;
|
||||
Properties.Settings.Default["flatInbetween"] = flatInbetween.Checked;
|
||||
Properties.Settings.Default["compatibility"] = compatibility.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
@@ -117,7 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class GOHierarchy : TreeView
|
||||
{
|
||||
BIN
AssetStudio/Library/BrotliSharpLib.dll
Normal file
BIN
AssetStudio/Library/BrotliSharpLib.dll
Normal file
Binary file not shown.
BIN
AssetStudio/Library/OpenTK.GLControl.dll
Normal file
BIN
AssetStudio/Library/OpenTK.GLControl.dll
Normal file
Binary file not shown.
BIN
AssetStudio/Library/OpenTK.dll
Normal file
BIN
AssetStudio/Library/OpenTK.dll
Normal file
Binary file not shown.
BIN
AssetStudio/Library/SharpDX.Mathematics.dll
Normal file
BIN
AssetStudio/Library/SharpDX.Mathematics.dll
Normal file
Binary file not shown.
BIN
AssetStudio/Library/SharpDX.dll
Normal file
BIN
AssetStudio/Library/SharpDX.dll
Normal file
Binary file not shown.
BIN
AssetStudio/Library/x64/libfbxsdk.dll
Normal file
BIN
AssetStudio/Library/x64/libfbxsdk.dll
Normal file
Binary file not shown.
BIN
AssetStudio/Library/x86/libfbxsdk.dll
Normal file
BIN
AssetStudio/Library/x86/libfbxsdk.dll
Normal file
Binary file not shown.
@@ -31,9 +31,20 @@ namespace Lz4
|
||||
inBufEnd = DecBufLen;
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
input = null;
|
||||
try
|
||||
{
|
||||
if (disposing && input != null)
|
||||
{
|
||||
input.Close();
|
||||
}
|
||||
input = null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
|
||||
private long inputLength;
|
||||
@@ -500,15 +511,12 @@ namespace Lz4
|
||||
{
|
||||
}
|
||||
|
||||
public override long Length
|
||||
{
|
||||
get { throw new NotSupportedException(); }
|
||||
}
|
||||
public override long Length => throw new NotSupportedException();
|
||||
|
||||
public override long Position
|
||||
{
|
||||
get { throw new NotSupportedException(); }
|
||||
set { throw new NotSupportedException(); }
|
||||
get => throw new NotSupportedException();
|
||||
set => throw new NotSupportedException();
|
||||
}
|
||||
|
||||
public override long Seek(long offset, SeekOrigin origin)
|
||||
232
AssetStudio/OpenFolderDialog.cs
Normal file
232
AssetStudio/OpenFolderDialog.cs
Normal file
@@ -0,0 +1,232 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
class OpenFolderDialog
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets/sets folder in which dialog will be open.
|
||||
/// </summary>
|
||||
public string InitialFolder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets/sets directory in which dialog will be open if there is no recent directory available.
|
||||
/// </summary>
|
||||
public string DefaultFolder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets selected folder.
|
||||
/// </summary>
|
||||
public string Folder { get; private set; }
|
||||
|
||||
|
||||
internal DialogResult ShowDialog(IWin32Window owner)
|
||||
{
|
||||
if (Environment.OSVersion.Version.Major >= 6)
|
||||
{
|
||||
return ShowVistaDialog(owner);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ShowLegacyDialog(owner);
|
||||
}
|
||||
}
|
||||
|
||||
private DialogResult ShowVistaDialog(IWin32Window owner)
|
||||
{
|
||||
var frm = (NativeMethods.IFileDialog)(new NativeMethods.FileOpenDialogRCW());
|
||||
frm.GetOptions(out var options);
|
||||
options |= NativeMethods.FOS_PICKFOLDERS | NativeMethods.FOS_FORCEFILESYSTEM | NativeMethods.FOS_NOVALIDATE | NativeMethods.FOS_NOTESTFILECREATE | NativeMethods.FOS_DONTADDTORECENT;
|
||||
frm.SetOptions(options);
|
||||
if (this.InitialFolder != null)
|
||||
{
|
||||
var riid = new Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"); //IShellItem
|
||||
if (NativeMethods.SHCreateItemFromParsingName(this.InitialFolder, IntPtr.Zero, ref riid, out var directoryShellItem) == NativeMethods.S_OK)
|
||||
{
|
||||
frm.SetFolder(directoryShellItem);
|
||||
}
|
||||
}
|
||||
if (this.DefaultFolder != null)
|
||||
{
|
||||
var riid = new Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"); //IShellItem
|
||||
if (NativeMethods.SHCreateItemFromParsingName(this.DefaultFolder, IntPtr.Zero, ref riid, out var directoryShellItem) == NativeMethods.S_OK)
|
||||
{
|
||||
frm.SetDefaultFolder(directoryShellItem);
|
||||
}
|
||||
}
|
||||
|
||||
if (frm.Show(owner.Handle) == NativeMethods.S_OK)
|
||||
{
|
||||
if (frm.GetResult(out var shellItem) == NativeMethods.S_OK)
|
||||
{
|
||||
if (shellItem.GetDisplayName(NativeMethods.SIGDN_FILESYSPATH, out var pszString) == NativeMethods.S_OK)
|
||||
{
|
||||
if (pszString != IntPtr.Zero)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.Folder = Marshal.PtrToStringAuto(pszString);
|
||||
return DialogResult.OK;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Marshal.FreeCoTaskMem(pszString);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private DialogResult ShowLegacyDialog(IWin32Window owner)
|
||||
{
|
||||
using (var frm = new FolderBrowserDialog())
|
||||
{
|
||||
if (this.InitialFolder != null) { frm.SelectedPath = this.InitialFolder; }
|
||||
if (frm.ShowDialog(owner) == DialogResult.OK)
|
||||
{
|
||||
this.Folder = Path.GetDirectoryName(frm.SelectedPath);
|
||||
return DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
return DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static class NativeMethods
|
||||
{
|
||||
|
||||
#region Constants
|
||||
|
||||
public const uint FOS_PICKFOLDERS = 0x00000020;
|
||||
public const uint FOS_FORCEFILESYSTEM = 0x00000040;
|
||||
public const uint FOS_NOVALIDATE = 0x00000100;
|
||||
public const uint FOS_NOTESTFILECREATE = 0x00010000;
|
||||
public const uint FOS_DONTADDTORECENT = 0x02000000;
|
||||
|
||||
public const uint S_OK = 0x0000;
|
||||
|
||||
public const uint SIGDN_FILESYSPATH = 0x80058000;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region COM
|
||||
|
||||
[ComImport, ClassInterface(ClassInterfaceType.None), TypeLibType(TypeLibTypeFlags.FCanCreate), Guid("DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7")]
|
||||
internal class FileOpenDialogRCW { }
|
||||
|
||||
|
||||
[ComImport(), Guid("42F85136-DB7E-439C-85F1-E4075D135FC8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
internal interface IFileDialog
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
[PreserveSig()]
|
||||
uint Show([In, Optional] IntPtr hwndOwner); //IModalWindow
|
||||
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr rgFilterSpec);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetFileTypeIndex([In] uint iFileType);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetFileTypeIndex(out uint piFileType);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint Advise([In, MarshalAs(UnmanagedType.Interface)] IntPtr pfde, out uint pdwCookie);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint Unadvise([In] uint dwCookie);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetOptions([In] uint fos);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetOptions(out uint fos);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, uint fdap);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint Close([MarshalAs(UnmanagedType.Error)] uint hr);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetClientGuid([In] ref Guid guid);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint ClearClientData();
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter);
|
||||
}
|
||||
|
||||
|
||||
[ComImport, Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
internal interface IShellItem
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint BindToHandler([In] IntPtr pbc, [In] ref Guid rbhid, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.Interface)] out IntPtr ppvOut);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetDisplayName([In] uint sigdnName, out IntPtr ppszName);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||
uint Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
internal static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IntPtr pbc, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out IShellItem ppv);
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Unity_Studio
|
||||
namespace AssetStudio
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
@@ -13,10 +13,9 @@ namespace Unity_Studio
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
OpenTK.Toolkit.Init(new OpenTK.ToolkitOptions { EnableHighResolution = false });
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new UnityStudioForm());
|
||||
Application.Run(new AssetStudioForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
36
AssetStudio/Properties/AssemblyInfo.cs
Normal file
36
AssetStudio/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("AssetStudio")]
|
||||
[assembly: AssemblyDescription("AssetStudio is a tool for exploring, extracting and exporting assets and assetBundles.")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("AssetStudio")]
|
||||
[assembly: AssemblyCopyright("")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("05c04c20-dd89-4895-9f06-33d5cfbfe925")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.9.0.0")]
|
||||
[assembly: AssemblyFileVersion("0.9.0.0")]
|
||||
@@ -8,7 +8,7 @@
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Unity_Studio {
|
||||
namespace AssetStudio.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
@@ -19,17 +19,17 @@ namespace Unity_Studio {
|
||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resource1 {
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resource1() {
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -39,7 +39,7 @@ namespace Unity_Studio {
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Unity_Studio.Resource1", typeof(Resource1).Assembly);
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AssetStudio.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
@@ -63,26 +63,20 @@ namespace Unity_Studio {
|
||||
/// <summary>
|
||||
/// 查找类似 #version 140
|
||||
///
|
||||
///in vec3 surfaceNormal;
|
||||
///in vec3 toLightVector;
|
||||
///in vec4 color;
|
||||
///in vec3 normal;
|
||||
///
|
||||
///out vec4 outputColor;
|
||||
///
|
||||
///void main()
|
||||
///{
|
||||
/// vec3 lightColor = vec3(0.5, 0.5, 0.5);
|
||||
/// vec3 unitNormal = normalize(normal);
|
||||
/// float nDotProduct = clamp(dot(unitNormal, vec3(0.707, 0, 0.707)), 0, 1);
|
||||
/// vec2 ContributionWeightsSqrt = vec2(0.5, 0.5f) + vec2(0.5f, -0.5f) * unitNormal.y;
|
||||
/// vec2 ContributionWeights = ContributionWeightsSqrt * ContributionWeightsSqrt;
|
||||
///
|
||||
/// // Ambient
|
||||
/// float ambientStrength = 0.9;
|
||||
/// vec3 ambient = ambientStrength * lightColor;
|
||||
///
|
||||
/// // Diffuse
|
||||
/// vec3 unitNormal = normalize(surfaceNormal);
|
||||
/// vec3 unitLightVector = normalize(toLightVector);
|
||||
/// float nDotProduct = dot(unitNormal, unitLightVector);
|
||||
/// float brightness = clamp(nDotProduct, 0, 1); // max(nDotProduct, 0.0);
|
||||
/// vec3 diffuse [字符串的其余部分被截断]"; 的本地化字符串。
|
||||
/// vec3 color = nDotProduct * vec3(1, 0.957, 0.839) / 3.14159;
|
||||
/// color += vec3(0.779, 0.716, 0.453) * ContributionWeights.y;
|
||||
/// color += vec3(0.368, 0.477, 0. [字符串的其余部分被截断]"; 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string fs {
|
||||
get {
|
||||
@@ -90,24 +84,65 @@ namespace Unity_Studio {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 #version 140
|
||||
///
|
||||
///out vec4 outputColor;
|
||||
///
|
||||
///void main()
|
||||
///{
|
||||
/// outputColor = vec4(0, 0, 0, 1);
|
||||
///} 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string fsBlack {
|
||||
get {
|
||||
return ResourceManager.GetString("fsBlack", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 #version 140
|
||||
///
|
||||
///out vec4 outputColor;
|
||||
///in vec4 color;
|
||||
///
|
||||
///void main()
|
||||
///{
|
||||
/// outputColor = color;
|
||||
///} 的本地化字符串。
|
||||
/// </summary>
|
||||
internal static string fsColor {
|
||||
get {
|
||||
return ResourceManager.GetString("fsColor", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap preview {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("preview", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 #version 140
|
||||
///
|
||||
///in vec3 vertexPosition;
|
||||
///in vec3 normalDirection;
|
||||
///in vec4 vertexColor;
|
||||
///uniform mat4 modelMatrix;
|
||||
///uniform mat4 viewMatrix;
|
||||
///
|
||||
///out vec3 surfaceNormal;
|
||||
///out vec3 toLightVector;
|
||||
///out vec3 normal;
|
||||
///out vec4 color;
|
||||
///
|
||||
///void main()
|
||||
///{
|
||||
/// vec3 lightPosition = vec3(200.0, 200.0, 200.0);
|
||||
/// gl_Position = viewMatrix * vec4(vertexPosition, 1.0);
|
||||
/// surfaceNormal = normalDirection;
|
||||
/// toLightVector = lightPosition - vertexPosition;
|
||||
/// gl_Position = viewMatrix * modelMatrix * vec4(vertexPosition, 1.0);
|
||||
/// normal = normalDirection;
|
||||
/// color = vertexColor;
|
||||
///} 的本地化字符串。
|
||||
/// </summary>
|
||||
@@ -117,11 +117,68 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="fs" xml:space="preserve">
|
||||
<value>#version 140
|
||||
|
||||
in vec3 normal;
|
||||
|
||||
out vec4 outputColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 unitNormal = normalize(normal);
|
||||
float nDotProduct = clamp(dot(unitNormal, vec3(0.707, 0, 0.707)), 0, 1);
|
||||
vec2 ContributionWeightsSqrt = vec2(0.5, 0.5f) + vec2(0.5f, -0.5f) * unitNormal.y;
|
||||
vec2 ContributionWeights = ContributionWeightsSqrt * ContributionWeightsSqrt;
|
||||
|
||||
vec3 color = nDotProduct * vec3(1, 0.957, 0.839) / 3.14159;
|
||||
color += vec3(0.779, 0.716, 0.453) * ContributionWeights.y;
|
||||
color += vec3(0.368, 0.477, 0.735) * ContributionWeights.x;
|
||||
outputColor = vec4(sqrt(color), 1);
|
||||
}</value>
|
||||
</data>
|
||||
<data name="fsBlack" xml:space="preserve">
|
||||
<value>#version 140
|
||||
|
||||
out vec4 outputColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
outputColor = vec4(0, 0, 0, 1);
|
||||
}</value>
|
||||
</data>
|
||||
<data name="fsColor" xml:space="preserve">
|
||||
<value>#version 140
|
||||
|
||||
out vec4 outputColor;
|
||||
in vec4 color;
|
||||
|
||||
void main()
|
||||
{
|
||||
outputColor = color;
|
||||
}</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="preview" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\preview.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="unity" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\unity.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="vs" xml:space="preserve">
|
||||
<value>#version 140
|
||||
|
||||
in vec3 vertexPosition;
|
||||
in vec3 normalDirection;
|
||||
in vec4 vertexColor;
|
||||
uniform mat4 modelMatrix;
|
||||
uniform mat4 viewMatrix;
|
||||
|
||||
out vec3 normal;
|
||||
out vec4 color;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = viewMatrix * modelMatrix * vec4(vertexPosition, 1.0);
|
||||
normal = normalDirection;
|
||||
color = vertexColor;
|
||||
}</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -8,11 +8,11 @@
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Unity_Studio.Properties {
|
||||
namespace AssetStudio.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.6.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
@@ -206,12 +206,12 @@ namespace Unity_Studio.Properties {
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool convertfsb {
|
||||
public bool convertAudio {
|
||||
get {
|
||||
return ((bool)(this["convertfsb"]));
|
||||
return ((bool)(this["convertAudio"]));
|
||||
}
|
||||
set {
|
||||
this["convertfsb"] = value;
|
||||
this["convertAudio"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,5 +238,101 @@ namespace Unity_Studio.Properties {
|
||||
this["displayOriginalName"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool EulerFilter {
|
||||
get {
|
||||
return ((bool)(this["EulerFilter"]));
|
||||
}
|
||||
set {
|
||||
this["EulerFilter"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0.25")]
|
||||
public decimal filterPrecision {
|
||||
get {
|
||||
return ((decimal)(this["filterPrecision"]));
|
||||
}
|
||||
set {
|
||||
this["filterPrecision"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool allFrames {
|
||||
get {
|
||||
return ((bool)(this["allFrames"]));
|
||||
}
|
||||
set {
|
||||
this["allFrames"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool allBones {
|
||||
get {
|
||||
return ((bool)(this["allBones"]));
|
||||
}
|
||||
set {
|
||||
this["allBones"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool skins {
|
||||
get {
|
||||
return ((bool)(this["skins"]));
|
||||
}
|
||||
set {
|
||||
this["skins"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("10")]
|
||||
public decimal boneSize {
|
||||
get {
|
||||
return ((decimal)(this["boneSize"]));
|
||||
}
|
||||
set {
|
||||
this["boneSize"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool flatInbetween {
|
||||
get {
|
||||
return ((bool)(this["flatInbetween"]));
|
||||
}
|
||||
set {
|
||||
this["flatInbetween"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool compatibility {
|
||||
get {
|
||||
return ((bool)(this["compatibility"]));
|
||||
}
|
||||
set {
|
||||
this["compatibility"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Unity_Studio.Properties" GeneratedClassName="Settings">
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="AssetStudio.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="displayAll" Type="System.Boolean" Scope="User">
|
||||
@@ -47,7 +47,7 @@
|
||||
<Setting Name="convertTexture" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="convertfsb" Type="System.Boolean" Scope="User">
|
||||
<Setting Name="convertAudio" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="convertType" Type="System.String" Scope="User">
|
||||
@@ -56,5 +56,29 @@
|
||||
<Setting Name="displayOriginalName" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="EulerFilter" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="filterPrecision" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">0.25</Value>
|
||||
</Setting>
|
||||
<Setting Name="allFrames" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="allBones" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="skins" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="boneSize" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">10</Value>
|
||||
</Setting>
|
||||
<Setting Name="flatInbetween" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="compatibility" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
BIN
AssetStudio/Resources/preview.png
Normal file
BIN
AssetStudio/Resources/preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
33
AssetStudio/StudioClasses/AssetPreloadData.cs
Normal file
33
AssetStudio/StudioClasses/AssetPreloadData.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class AssetPreloadData : ListViewItem
|
||||
{
|
||||
public long m_PathID;
|
||||
public uint Offset;
|
||||
public int Size;
|
||||
public ClassIDReference Type;
|
||||
public int Type1;
|
||||
public int Type2;
|
||||
|
||||
public string TypeString;
|
||||
public int fullSize;
|
||||
public string InfoText;
|
||||
public string extension;
|
||||
|
||||
public AssetsFile sourceFile;
|
||||
public string uniqueID;
|
||||
|
||||
public EndianBinaryReader InitReader()
|
||||
{
|
||||
var reader = sourceFile.assetsFileReader;
|
||||
reader.Position = Offset;
|
||||
return reader;
|
||||
}
|
||||
}
|
||||
}
|
||||
486
AssetStudio/StudioClasses/AssetsFile.cs
Normal file
486
AssetStudio/StudioClasses/AssetsFile.cs
Normal file
@@ -0,0 +1,486 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class AssetsFile
|
||||
{
|
||||
public EndianBinaryReader assetsFileReader;
|
||||
public string filePath;
|
||||
public string parentPath;
|
||||
public string fileName;
|
||||
public string upperFileName;
|
||||
public int fileGen;
|
||||
public bool valid;
|
||||
public string m_Version = "2.5.0f5";
|
||||
public int[] version = { 0, 0, 0, 0 };
|
||||
public string[] buildType;
|
||||
public int platform = 100663296;
|
||||
public string platformStr = "";
|
||||
public Dictionary<long, AssetPreloadData> preloadTable = new Dictionary<long, AssetPreloadData>();
|
||||
public Dictionary<long, GameObject> GameObjectList = new Dictionary<long, GameObject>();
|
||||
public Dictionary<long, Transform> TransformList = new Dictionary<long, Transform>();
|
||||
|
||||
public List<AssetPreloadData> exportableAssets = new List<AssetPreloadData>();
|
||||
public List<SharedAssets> sharedAssetsList = new List<SharedAssets> { new SharedAssets() };
|
||||
|
||||
public SortedDictionary<int, ClassStruct> ClassStructures = new SortedDictionary<int, ClassStruct>();
|
||||
|
||||
private bool baseDefinitions;
|
||||
private List<int[]> classIDs = new List<int[]>();//use for 5.5.0
|
||||
|
||||
|
||||
#region cmmon string
|
||||
private static Dictionary<int, string> baseStrings = new Dictionary<int, string>
|
||||
{
|
||||
{0, "AABB"},
|
||||
{5, "AnimationClip"},
|
||||
{19, "AnimationCurve"},
|
||||
{34, "AnimationState"},
|
||||
{49, "Array"},
|
||||
{55, "Base"},
|
||||
{60, "BitField"},
|
||||
{69, "bitset"},
|
||||
{76, "bool"},
|
||||
{81, "char"},
|
||||
{86, "ColorRGBA"},
|
||||
{96, "Component"},
|
||||
{106, "data"},
|
||||
{111, "deque"},
|
||||
{117, "double"},
|
||||
{124, "dynamic_array"},
|
||||
{138, "FastPropertyName"},
|
||||
{155, "first"},
|
||||
{161, "float"},
|
||||
{167, "Font"},
|
||||
{172, "GameObject"},
|
||||
{183, "Generic Mono"},
|
||||
{196, "GradientNEW"},
|
||||
{208, "GUID"},
|
||||
{213, "GUIStyle"},
|
||||
{222, "int"},
|
||||
{226, "list"},
|
||||
{231, "long long"},
|
||||
{241, "map"},
|
||||
{245, "Matrix4x4f"},
|
||||
{256, "MdFour"},
|
||||
{263, "MonoBehaviour"},
|
||||
{277, "MonoScript"},
|
||||
{288, "m_ByteSize"},
|
||||
{299, "m_Curve"},
|
||||
{307, "m_EditorClassIdentifier"},
|
||||
{331, "m_EditorHideFlags"},
|
||||
{349, "m_Enabled"},
|
||||
{359, "m_ExtensionPtr"},
|
||||
{374, "m_GameObject"},
|
||||
{387, "m_Index"},
|
||||
{395, "m_IsArray"},
|
||||
{405, "m_IsStatic"},
|
||||
{416, "m_MetaFlag"},
|
||||
{427, "m_Name"},
|
||||
{434, "m_ObjectHideFlags"},
|
||||
{452, "m_PrefabInternal"},
|
||||
{469, "m_PrefabParentObject"},
|
||||
{490, "m_Script"},
|
||||
{499, "m_StaticEditorFlags"},
|
||||
{519, "m_Type"},
|
||||
{526, "m_Version"},
|
||||
{536, "Object"},
|
||||
{543, "pair"},
|
||||
{548, "PPtr<Component>"},
|
||||
{564, "PPtr<GameObject>"},
|
||||
{581, "PPtr<Material>"},
|
||||
{596, "PPtr<MonoBehaviour>"},
|
||||
{616, "PPtr<MonoScript>"},
|
||||
{633, "PPtr<Object>"},
|
||||
{646, "PPtr<Prefab>"},
|
||||
{659, "PPtr<Sprite>"},
|
||||
{672, "PPtr<TextAsset>"},
|
||||
{688, "PPtr<Texture>"},
|
||||
{702, "PPtr<Texture2D>"},
|
||||
{718, "PPtr<Transform>"},
|
||||
{734, "Prefab"},
|
||||
{741, "Quaternionf"},
|
||||
{753, "Rectf"},
|
||||
{759, "RectInt"},
|
||||
{767, "RectOffset"},
|
||||
{778, "second"},
|
||||
{785, "set"},
|
||||
{789, "short"},
|
||||
{795, "size"},
|
||||
{800, "SInt16"},
|
||||
{807, "SInt32"},
|
||||
{814, "SInt64"},
|
||||
{821, "SInt8"},
|
||||
{827, "staticvector"},
|
||||
{840, "string"},
|
||||
{847, "TextAsset"},
|
||||
{857, "TextMesh"},
|
||||
{866, "Texture"},
|
||||
{874, "Texture2D"},
|
||||
{884, "Transform"},
|
||||
{894, "TypelessData"},
|
||||
{907, "UInt16"},
|
||||
{914, "UInt32"},
|
||||
{921, "UInt64"},
|
||||
{928, "UInt8"},
|
||||
{934, "unsigned int"},
|
||||
{947, "unsigned long long"},
|
||||
{966, "unsigned short"},
|
||||
{981, "vector"},
|
||||
{988, "Vector2f"},
|
||||
{997, "Vector3f"},
|
||||
{1006, "Vector4f"},
|
||||
{1015, "m_ScriptingClassIdentifier"},
|
||||
{1042, "Gradient"},
|
||||
{1051, "Type*"}
|
||||
};
|
||||
#endregion
|
||||
|
||||
public class SharedAssets
|
||||
{
|
||||
public int Index = -2; //-2 - Prepare, -1 - Missing
|
||||
public string aName = "";
|
||||
public string fileName = "";
|
||||
}
|
||||
|
||||
public AssetsFile(string fullName, EndianBinaryReader reader)
|
||||
{
|
||||
assetsFileReader = reader;
|
||||
filePath = fullName;
|
||||
fileName = Path.GetFileName(fullName);
|
||||
upperFileName = fileName.ToUpper();
|
||||
try
|
||||
{
|
||||
int tableSize = assetsFileReader.ReadInt32();
|
||||
int dataEnd = assetsFileReader.ReadInt32();
|
||||
fileGen = assetsFileReader.ReadInt32();
|
||||
uint dataOffset = assetsFileReader.ReadUInt32();
|
||||
sharedAssetsList[0].fileName = fileName; //reference itself because sharedFileIDs start from 1
|
||||
|
||||
switch (fileGen)
|
||||
{
|
||||
case 6: //2.5.0 - 2.6.1
|
||||
{
|
||||
assetsFileReader.Position = (dataEnd - tableSize);
|
||||
assetsFileReader.Position += 1;
|
||||
break;
|
||||
}
|
||||
case 7: //3.0.0 beta
|
||||
{
|
||||
assetsFileReader.Position = (dataEnd - tableSize);
|
||||
assetsFileReader.Position += 1;
|
||||
m_Version = assetsFileReader.ReadStringToNull();
|
||||
break;
|
||||
}
|
||||
case 8: //3.0.0 - 3.4.2
|
||||
{
|
||||
assetsFileReader.Position = (dataEnd - tableSize);
|
||||
assetsFileReader.Position += 1;
|
||||
m_Version = assetsFileReader.ReadStringToNull();
|
||||
platform = assetsFileReader.ReadInt32();
|
||||
break;
|
||||
}
|
||||
case 9: //3.5.0 - 4.6.x
|
||||
{
|
||||
assetsFileReader.Position += 4; //azero
|
||||
m_Version = assetsFileReader.ReadStringToNull();
|
||||
platform = assetsFileReader.ReadInt32();
|
||||
break;
|
||||
}
|
||||
case 14: //5.0.0 beta and final
|
||||
case 15: //5.0.1 - 5.4
|
||||
case 16: //??.. no sure
|
||||
case 17: //5.5.0 and up
|
||||
{
|
||||
assetsFileReader.Position += 4; //azero
|
||||
m_Version = assetsFileReader.ReadStringToNull();
|
||||
platform = assetsFileReader.ReadInt32();
|
||||
baseDefinitions = assetsFileReader.ReadBoolean();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
//MessageBox.Show("Unsupported version!" + fileGen, "AssetStudio Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (platform > 255 || platform < 0)
|
||||
{
|
||||
byte[] b32 = BitConverter.GetBytes(platform);
|
||||
Array.Reverse(b32);
|
||||
platform = BitConverter.ToInt32(b32, 0);
|
||||
assetsFileReader.endian = EndianType.LittleEndian;
|
||||
}
|
||||
|
||||
platformStr = Enum.IsDefined(typeof(BuildTarget), platform) ? ((BuildTarget)platform).ToString() : "Unknown Platform";
|
||||
|
||||
int baseCount = assetsFileReader.ReadInt32();
|
||||
for (int i = 0; i < baseCount; i++)
|
||||
{
|
||||
if (fileGen < 14)
|
||||
{
|
||||
int classID = assetsFileReader.ReadInt32();
|
||||
string baseType = assetsFileReader.ReadStringToNull();
|
||||
string baseName = assetsFileReader.ReadStringToNull();
|
||||
assetsFileReader.Position += 20;
|
||||
int memberCount = assetsFileReader.ReadInt32();
|
||||
|
||||
var cb = new List<ClassMember>();
|
||||
for (int m = 0; m < memberCount; m++)
|
||||
{
|
||||
readBase(cb, 1);
|
||||
}
|
||||
|
||||
var aClass = new ClassStruct { ID = classID, Text = (baseType + " " + baseName), members = cb };
|
||||
aClass.SubItems.Add(classID.ToString());
|
||||
ClassStructures.Add(classID, aClass);
|
||||
}
|
||||
else
|
||||
{
|
||||
readBase5();
|
||||
}
|
||||
}
|
||||
|
||||
if (fileGen >= 7 && fileGen < 14)
|
||||
{
|
||||
assetsFileReader.Position += 4; //azero
|
||||
}
|
||||
|
||||
int assetCount = assetsFileReader.ReadInt32();
|
||||
|
||||
#region asset preload table
|
||||
string assetIDfmt = "D" + assetCount.ToString().Length; //format for unique ID
|
||||
|
||||
for (int i = 0; i < assetCount; i++)
|
||||
{
|
||||
//each table entry is aligned individually, not the whole table
|
||||
if (fileGen >= 14)
|
||||
{
|
||||
assetsFileReader.AlignStream(4);
|
||||
}
|
||||
|
||||
AssetPreloadData asset = new AssetPreloadData();
|
||||
asset.m_PathID = fileGen < 14 ? assetsFileReader.ReadInt32() : assetsFileReader.ReadInt64();
|
||||
asset.Offset = assetsFileReader.ReadUInt32();
|
||||
asset.Offset += dataOffset;
|
||||
asset.Size = assetsFileReader.ReadInt32();
|
||||
if (fileGen > 15)
|
||||
{
|
||||
int index = assetsFileReader.ReadInt32();
|
||||
asset.Type1 = classIDs[index][0];
|
||||
asset.Type2 = classIDs[index][1];
|
||||
}
|
||||
else
|
||||
{
|
||||
asset.Type1 = assetsFileReader.ReadInt32();
|
||||
asset.Type2 = assetsFileReader.ReadUInt16();
|
||||
assetsFileReader.Position += 2;
|
||||
}
|
||||
if (fileGen == 15)
|
||||
{
|
||||
byte unknownByte = assetsFileReader.ReadByte();
|
||||
//this is a single byte, not an int32
|
||||
//the next entry is aligned after this
|
||||
//but not the last!
|
||||
}
|
||||
|
||||
if (Enum.IsDefined(typeof(ClassIDReference), asset.Type2))
|
||||
{
|
||||
asset.Type = (ClassIDReference)asset.Type2;
|
||||
asset.TypeString = asset.Type.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
asset.Type = ClassIDReference.UnknownType;
|
||||
asset.TypeString = "UnknownType " + asset.Type2;
|
||||
}
|
||||
|
||||
asset.uniqueID = i.ToString(assetIDfmt);
|
||||
|
||||
asset.fullSize = asset.Size;
|
||||
asset.sourceFile = this;
|
||||
|
||||
preloadTable.Add(asset.m_PathID, asset);
|
||||
|
||||
#region read BuildSettings to get version for version 2.x files
|
||||
if (asset.Type == ClassIDReference.BuildSettings && fileGen == 6)
|
||||
{
|
||||
long nextAsset = assetsFileReader.Position;
|
||||
|
||||
BuildSettings BSettings = new BuildSettings(asset);
|
||||
m_Version = BSettings.m_Version;
|
||||
|
||||
assetsFileReader.Position = nextAsset;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
#endregion
|
||||
|
||||
buildType = Regex.Replace(m_Version, @"\d", "").Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
|
||||
version = Regex.Matches(m_Version, @"\d").Cast<Match>().Select(m => int.Parse(m.Value)).ToArray();
|
||||
if (version[0] == 2 && version[1] == 0 && version[2] == 1 && version[3] == 7)//2017.x
|
||||
{
|
||||
var nversion = new int[version.Length - 3];
|
||||
nversion[0] = 2017;
|
||||
Array.Copy(version, 4, nversion, 1, version.Length - 4);
|
||||
version = nversion;
|
||||
}
|
||||
if (fileGen >= 14)
|
||||
{
|
||||
//this looks like a list of assets that need to be preloaded in memory before anytihng else
|
||||
int someCount = assetsFileReader.ReadInt32();
|
||||
for (int i = 0; i < someCount; i++)
|
||||
{
|
||||
int num1 = assetsFileReader.ReadInt32();
|
||||
assetsFileReader.AlignStream(4);
|
||||
long m_PathID = assetsFileReader.ReadInt64();
|
||||
}
|
||||
}
|
||||
|
||||
int sharedFileCount = assetsFileReader.ReadInt32();
|
||||
for (int i = 0; i < sharedFileCount; i++)
|
||||
{
|
||||
var shared = new SharedAssets();
|
||||
shared.aName = assetsFileReader.ReadStringToNull();
|
||||
assetsFileReader.Position += 20;
|
||||
var sharedFilePath = assetsFileReader.ReadStringToNull(); //relative path
|
||||
shared.fileName = Path.GetFileName(sharedFilePath);
|
||||
sharedAssetsList.Add(shared);
|
||||
}
|
||||
valid = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void readBase(List<ClassMember> cb, int level)
|
||||
{
|
||||
string varType = assetsFileReader.ReadStringToNull();
|
||||
string varName = assetsFileReader.ReadStringToNull();
|
||||
int size = assetsFileReader.ReadInt32();
|
||||
int index = assetsFileReader.ReadInt32();
|
||||
int isArray = assetsFileReader.ReadInt32();
|
||||
int num0 = assetsFileReader.ReadInt32();
|
||||
int flag = assetsFileReader.ReadInt32();
|
||||
int childrenCount = assetsFileReader.ReadInt32();
|
||||
|
||||
cb.Add(new ClassMember
|
||||
{
|
||||
Level = level - 1,
|
||||
Type = varType,
|
||||
Name = varName,
|
||||
Size = size,
|
||||
Flag = flag
|
||||
});
|
||||
for (int i = 0; i < childrenCount; i++) { readBase(cb, level + 1); }
|
||||
}
|
||||
|
||||
private void readBase5()
|
||||
{
|
||||
int classID = assetsFileReader.ReadInt32();
|
||||
if (fileGen > 15)//5.5.0 and up
|
||||
{
|
||||
assetsFileReader.ReadByte();
|
||||
int type1;
|
||||
if ((type1 = assetsFileReader.ReadInt16()) >= 0)
|
||||
{
|
||||
type1 = -1 - type1;
|
||||
}
|
||||
else
|
||||
{
|
||||
type1 = classID;
|
||||
}
|
||||
classIDs.Add(new[] { type1, classID });
|
||||
if (classID == 114)
|
||||
{
|
||||
assetsFileReader.Position += 16;
|
||||
}
|
||||
classID = type1;
|
||||
}
|
||||
else if (classID < 0)
|
||||
{
|
||||
assetsFileReader.Position += 16;
|
||||
}
|
||||
assetsFileReader.Position += 16;
|
||||
|
||||
if (baseDefinitions)
|
||||
{
|
||||
int varCount = assetsFileReader.ReadInt32();
|
||||
int stringSize = assetsFileReader.ReadInt32();
|
||||
|
||||
assetsFileReader.Position += varCount * 24;
|
||||
using (var stringReader = new BinaryReader(new MemoryStream(assetsFileReader.ReadBytes(stringSize))))
|
||||
{
|
||||
string className = "";
|
||||
var classVar = new List<ClassMember>();
|
||||
//build Class Structures
|
||||
assetsFileReader.Position -= varCount * 24 + stringSize;
|
||||
for (int i = 0; i < varCount; i++)
|
||||
{
|
||||
ushort num0 = assetsFileReader.ReadUInt16();
|
||||
byte level = assetsFileReader.ReadByte();
|
||||
bool isArray = assetsFileReader.ReadBoolean();
|
||||
|
||||
ushort varTypeIndex = assetsFileReader.ReadUInt16();
|
||||
ushort test = assetsFileReader.ReadUInt16();
|
||||
string varTypeStr;
|
||||
if (test == 0) //varType is an offset in the string block
|
||||
{
|
||||
stringReader.BaseStream.Position = varTypeIndex;
|
||||
varTypeStr = stringReader.ReadStringToNull();
|
||||
}
|
||||
else //varType is an index in an internal strig array
|
||||
{
|
||||
varTypeStr = baseStrings.ContainsKey(varTypeIndex) ? baseStrings[varTypeIndex] : varTypeIndex.ToString();
|
||||
}
|
||||
|
||||
ushort varNameIndex = assetsFileReader.ReadUInt16();
|
||||
test = assetsFileReader.ReadUInt16();
|
||||
string varNameStr;
|
||||
if (test == 0)
|
||||
{
|
||||
stringReader.BaseStream.Position = varNameIndex;
|
||||
varNameStr = stringReader.ReadStringToNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
varNameStr = baseStrings.ContainsKey(varNameIndex) ? baseStrings[varNameIndex] : varNameIndex.ToString();
|
||||
}
|
||||
|
||||
int size = assetsFileReader.ReadInt32();
|
||||
int index = assetsFileReader.ReadInt32();
|
||||
int flag = assetsFileReader.ReadInt32();
|
||||
|
||||
if (index == 0)
|
||||
{
|
||||
className = varTypeStr + " " + varNameStr;
|
||||
}
|
||||
else
|
||||
{
|
||||
classVar.Add(new ClassMember
|
||||
{
|
||||
Level = level - 1,
|
||||
Type = varTypeStr,
|
||||
Name = varNameStr,
|
||||
Size = size,
|
||||
Flag = flag
|
||||
});
|
||||
}
|
||||
}
|
||||
assetsFileReader.Position += stringSize;
|
||||
var aClass = new ClassStruct { ID = classID, Text = className, members = classVar };
|
||||
aClass.SubItems.Add(classID.ToString());
|
||||
ClassStructures[classID] = aClass;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
128
AssetStudio/StudioClasses/BinaryReaderExtensions.cs
Normal file
128
AssetStudio/StudioClasses/BinaryReaderExtensions.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SharpDX;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public static class BinaryReaderExtensions
|
||||
{
|
||||
public static void AlignStream(this BinaryReader reader, int alignment)
|
||||
{
|
||||
var pos = reader.BaseStream.Position;
|
||||
var mod = pos % alignment;
|
||||
if (mod != 0)
|
||||
{
|
||||
reader.BaseStream.Position += alignment - mod;
|
||||
}
|
||||
}
|
||||
|
||||
public static string ReadAlignedString(this BinaryReader reader)
|
||||
{
|
||||
return ReadAlignedString(reader, reader.ReadInt32());
|
||||
}
|
||||
|
||||
public static string ReadAlignedString(this BinaryReader reader, int length)
|
||||
{
|
||||
if (length > 0 && length < (reader.BaseStream.Length - reader.BaseStream.Position))
|
||||
{
|
||||
var stringData = reader.ReadBytes(length);
|
||||
var result = Encoding.UTF8.GetString(stringData);
|
||||
reader.AlignStream(4);
|
||||
return result;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string ReadStringToNull(this BinaryReader reader)
|
||||
{
|
||||
var bytes = new List<byte>();
|
||||
byte b;
|
||||
while (reader.BaseStream.Position != reader.BaseStream.Length && (b = reader.ReadByte()) != 0)
|
||||
bytes.Add(b);
|
||||
return Encoding.UTF8.GetString(bytes.ToArray());
|
||||
}
|
||||
|
||||
public static Quaternion ReadQuaternion(this BinaryReader reader)
|
||||
{
|
||||
var q = new Quaternion
|
||||
{
|
||||
X = reader.ReadSingle(),
|
||||
Y = reader.ReadSingle(),
|
||||
Z = reader.ReadSingle(),
|
||||
W = reader.ReadSingle()
|
||||
};
|
||||
return q;
|
||||
}
|
||||
|
||||
public static Vector2 ReadVector2(this BinaryReader reader)
|
||||
{
|
||||
Vector2 v = new Vector2
|
||||
{
|
||||
X = reader.ReadSingle(),
|
||||
Y = reader.ReadSingle()
|
||||
};
|
||||
return v;
|
||||
}
|
||||
|
||||
public static Vector3 ReadVector3(this BinaryReader reader)
|
||||
{
|
||||
var v = new Vector3
|
||||
{
|
||||
X = reader.ReadSingle(),
|
||||
Y = reader.ReadSingle(),
|
||||
Z = reader.ReadSingle()
|
||||
};
|
||||
return v;
|
||||
}
|
||||
|
||||
public static Vector4 ReadVector4(this BinaryReader reader)
|
||||
{
|
||||
var v = new Vector4
|
||||
{
|
||||
X = reader.ReadSingle(),
|
||||
Y = reader.ReadSingle(),
|
||||
Z = reader.ReadSingle(),
|
||||
W = reader.ReadSingle()
|
||||
};
|
||||
return v;
|
||||
}
|
||||
|
||||
private static T[] ReadArray<T>(Func<T> del, int length)
|
||||
{
|
||||
var array = new T[length];
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
array[i] = del();
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
public static int[] ReadInt32Array(this BinaryReader reader, int length)
|
||||
{
|
||||
return ReadArray(reader.ReadInt32, length);
|
||||
}
|
||||
|
||||
public static uint[] ReadUInt32Array(this BinaryReader reader, int length)
|
||||
{
|
||||
return ReadArray(reader.ReadUInt32, length);
|
||||
}
|
||||
|
||||
public static float[] ReadSingleArray(this BinaryReader reader, int length)
|
||||
{
|
||||
return ReadArray(reader.ReadSingle, length);
|
||||
}
|
||||
|
||||
public static Vector2[] ReadVector2Array(this BinaryReader reader, int length)
|
||||
{
|
||||
return ReadArray(reader.ReadVector2, length);
|
||||
}
|
||||
|
||||
public static Vector4[] ReadVector4Array(this BinaryReader reader, int length)
|
||||
{
|
||||
return ReadArray(reader.ReadVector4, length);
|
||||
}
|
||||
}
|
||||
}
|
||||
24
AssetStudio/StudioClasses/BinaryWriterExtensions.cs
Normal file
24
AssetStudio/StudioClasses/BinaryWriterExtensions.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public static class BinaryWriterExtensions
|
||||
{
|
||||
private static void WriteArray<T>(Action<T> del, T[] array)
|
||||
{
|
||||
foreach (var item in array)
|
||||
{
|
||||
del(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Write(this BinaryWriter writer, uint[] array)
|
||||
{
|
||||
WriteArray(writer.Write, array);
|
||||
}
|
||||
}
|
||||
}
|
||||
46
AssetStudio/StudioClasses/BuildTarget.cs
Normal file
46
AssetStudio/StudioClasses/BuildTarget.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public enum BuildTarget
|
||||
{
|
||||
DashboardWidget = 1,
|
||||
StandaloneOSX = 2,
|
||||
StandaloneOSXPPC = 3,
|
||||
StandaloneOSXIntel = 4,
|
||||
StandaloneWindows,
|
||||
WebPlayer,
|
||||
WebPlayerStreamed,
|
||||
Wii = 8,
|
||||
iOS = 9,
|
||||
PS3,
|
||||
XBOX360,
|
||||
Android = 13,
|
||||
StandaloneGLESEmu = 14,
|
||||
NaCl = 16,
|
||||
StandaloneLinux = 17,
|
||||
FlashPlayer = 18,
|
||||
StandaloneWindows64 = 19,
|
||||
WebGL,
|
||||
WSAPlayer,
|
||||
StandaloneLinux64 = 24,
|
||||
StandaloneLinuxUniversal,
|
||||
WP8Player,
|
||||
StandaloneOSXIntel64,
|
||||
BlackBerry,
|
||||
Tizen,
|
||||
PSP2,
|
||||
PS4,
|
||||
PSM,
|
||||
XboxOne,
|
||||
SamsungTV,
|
||||
N3DS,
|
||||
WiiU,
|
||||
tvOS,
|
||||
Switch,
|
||||
NoTarget = -2
|
||||
}
|
||||
}
|
||||
217
AssetStudio/StudioClasses/BundleFile.cs
Normal file
217
AssetStudio/StudioClasses/BundleFile.cs
Normal file
@@ -0,0 +1,217 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Lz4;
|
||||
using SevenZip.Compression.LZMA;
|
||||
|
||||
namespace AssetStudio
|
||||
{
|
||||
public class MemoryFile
|
||||
{
|
||||
public string fileName;
|
||||
public MemoryStream stream;
|
||||
}
|
||||
|
||||
public class BundleFile
|
||||
{
|
||||
public int format;
|
||||
public string versionPlayer;
|
||||
public string versionEngine;
|
||||
public List<MemoryFile> fileList = new List<MemoryFile>();
|
||||
|
||||
public BundleFile(EndianBinaryReader bundleReader)
|
||||
{
|
||||
var signature = bundleReader.ReadStringToNull();
|
||||
switch (signature)
|
||||
{
|
||||
case "UnityWeb":
|
||||
case "UnityRaw":
|
||||
case "\xFA\xFA\xFA\xFA\xFA\xFA\xFA\xFA":
|
||||
{
|
||||
format = bundleReader.ReadInt32();
|
||||
versionPlayer = bundleReader.ReadStringToNull();
|
||||
versionEngine = bundleReader.ReadStringToNull();
|
||||
if (format < 6)
|
||||
{
|
||||
int bundleSize = bundleReader.ReadInt32();
|
||||
}
|
||||
else if (format == 6)
|
||||
{
|
||||
ReadFormat6(bundleReader, true);
|
||||
return;
|
||||
}
|
||||
short dummy2 = bundleReader.ReadInt16();
|
||||
int offset = bundleReader.ReadInt16();
|
||||
int dummy3 = bundleReader.ReadInt32();
|
||||
int lzmaChunks = bundleReader.ReadInt32();
|
||||
|
||||
int lzmaSize = 0;
|
||||
long streamSize = 0;
|
||||
|
||||
for (int i = 0; i < lzmaChunks; i++)
|
||||
{
|
||||
lzmaSize = bundleReader.ReadInt32();
|
||||
streamSize = bundleReader.ReadInt32();
|
||||
}
|
||||
|
||||
bundleReader.Position = offset;
|
||||
switch (signature)
|
||||
{
|
||||
case "\xFA\xFA\xFA\xFA\xFA\xFA\xFA\xFA": //.bytes
|
||||
case "UnityWeb":
|
||||
{
|
||||
var lzmaBuffer = bundleReader.ReadBytes(lzmaSize);
|
||||
using (var lzmaStream = new EndianBinaryReader(SevenZipHelper.StreamDecompress(new MemoryStream(lzmaBuffer))))
|
||||
{
|
||||
GetAssetsFiles(lzmaStream, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "UnityRaw":
|
||||
{
|
||||
GetAssetsFiles(bundleReader, offset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "UnityFS":
|
||||
format = bundleReader.ReadInt32();
|
||||
versionPlayer = bundleReader.ReadStringToNull();
|
||||
versionEngine = bundleReader.ReadStringToNull();
|
||||
if (format == 6)
|
||||
{
|
||||
ReadFormat6(bundleReader);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void GetAssetsFiles(EndianBinaryReader reader, int offset)
|
||||
{
|
||||
int fileCount = reader.ReadInt32();
|
||||
for (int i = 0; i < fileCount; i++)
|
||||
{
|
||||
var file = new MemoryFile();
|
||||
file.fileName = reader.ReadStringToNull();
|
||||
int fileOffset = reader.ReadInt32();
|
||||
fileOffset += offset;
|
||||
int fileSize = reader.ReadInt32();
|
||||
long nextFile = reader.Position;
|
||||
reader.Position = fileOffset;
|
||||
var buffer = reader.ReadBytes(fileSize);
|
||||
file.stream = new MemoryStream(buffer);
|
||||
fileList.Add(file);
|
||||
reader.Position = nextFile;
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadFormat6(EndianBinaryReader bundleReader, bool padding = false)
|
||||
{
|
||||
var bundleSize = bundleReader.ReadInt64();
|
||||
int compressedSize = bundleReader.ReadInt32();
|
||||
int uncompressedSize = bundleReader.ReadInt32();
|
||||
int flag = bundleReader.ReadInt32();
|
||||
if (padding)
|
||||
bundleReader.ReadByte();
|
||||
byte[] blocksInfoBytes;
|
||||
if ((flag & 0x80) != 0)//at end of file
|
||||
{
|
||||
var position = bundleReader.Position;
|
||||
bundleReader.Position = bundleReader.BaseStream.Length - compressedSize;
|
||||
blocksInfoBytes = bundleReader.ReadBytes(compressedSize);
|
||||
bundleReader.Position = position;
|
||||
}
|
||||
else
|
||||
{
|
||||
blocksInfoBytes = bundleReader.ReadBytes(compressedSize);
|
||||
}
|
||||
MemoryStream blocksInfoStream;
|
||||
switch (flag & 0x3F)
|
||||
{
|
||||
default://None
|
||||
{
|
||||
blocksInfoStream = new MemoryStream(blocksInfoBytes);
|
||||
break;
|
||||
}
|
||||
case 1://LZMA
|
||||
{
|
||||
blocksInfoStream = SevenZipHelper.StreamDecompress(new MemoryStream(blocksInfoBytes));
|
||||
break;
|
||||
}
|
||||
case 2://LZ4
|
||||
case 3://LZ4HC
|
||||
{
|
||||
byte[] uncompressedBytes = new byte[uncompressedSize];
|
||||
using (var decoder = new Lz4DecoderStream(new MemoryStream(blocksInfoBytes)))
|
||||
{
|
||||
decoder.Read(uncompressedBytes, 0, uncompressedSize);
|
||||
}
|
||||
blocksInfoStream = new MemoryStream(uncompressedBytes);
|
||||
break;
|
||||
}
|
||||
//case 4:LZHAM?
|
||||
}
|
||||
using (var blocksInfo = new EndianBinaryReader(blocksInfoStream))
|
||||
{
|
||||
blocksInfo.Position = 0x10;
|
||||
int blockcount = blocksInfo.ReadInt32();
|
||||
var assetsDataStream = new MemoryStream();
|
||||
for (int i = 0; i < blockcount; i++)
|
||||
{
|
||||
uncompressedSize = blocksInfo.ReadInt32();
|
||||
compressedSize = blocksInfo.ReadInt32();
|
||||
flag = blocksInfo.ReadInt16();
|
||||
var compressedBytes = bundleReader.ReadBytes(compressedSize);
|
||||
switch (flag & 0x3F)
|
||||
{
|
||||
default://None
|
||||
{
|
||||
assetsDataStream.Write(compressedBytes, 0, compressedSize);
|
||||
break;
|
||||
}
|
||||
case 1://LZMA
|
||||
{
|
||||
var uncompressedBytes = new byte[uncompressedSize];
|
||||
using (var mstream = new MemoryStream(compressedBytes))
|
||||
{
|
||||
var decoder = SevenZipHelper.StreamDecompress(mstream, uncompressedSize);
|
||||
decoder.Read(uncompressedBytes, 0, uncompressedSize);
|
||||
decoder.Dispose();
|
||||
}
|
||||
assetsDataStream.Write(uncompressedBytes, 0, uncompressedSize);
|
||||
break;
|
||||
}
|
||||
case 2://LZ4
|
||||
case 3://LZ4HC
|
||||
{
|
||||
var uncompressedBytes = new byte[uncompressedSize];
|
||||
using (var decoder = new Lz4DecoderStream(new MemoryStream(compressedBytes)))
|
||||
{
|
||||
decoder.Read(uncompressedBytes, 0, uncompressedSize);
|
||||
}
|
||||
assetsDataStream.Write(uncompressedBytes, 0, uncompressedSize);
|
||||
break;
|
||||
}
|
||||
//case 4:LZHAM?
|
||||
}
|
||||
}
|
||||
using (var assetsDataReader = new EndianBinaryReader(assetsDataStream))
|
||||
{
|
||||
var entryinfo_count = blocksInfo.ReadInt32();
|
||||
for (int i = 0; i < entryinfo_count; i++)
|
||||
{
|
||||
var file = new MemoryFile();
|
||||
var entryinfo_offset = blocksInfo.ReadInt64();
|
||||
var entryinfo_size = blocksInfo.ReadInt64();
|
||||
flag = blocksInfo.ReadInt32();
|
||||
file.fileName = Path.GetFileName(blocksInfo.ReadStringToNull());
|
||||
assetsDataReader.Position = entryinfo_offset;
|
||||
var buffer = assetsDataReader.ReadBytes((int)entryinfo_size);
|
||||
file.stream = new MemoryStream(buffer);
|
||||
fileList.Add(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
272
AssetStudio/StudioClasses/ClassIDReference.cs
Normal file
272
AssetStudio/StudioClasses/ClassIDReference.cs
Normal file
@@ -0,0 +1,272 @@
|
||||
namespace AssetStudio
|
||||
{
|
||||
public enum ClassIDReference
|
||||
{
|
||||
UnknownType = -1,
|
||||
GameObject = 1,
|
||||
Component = 2,
|
||||
LevelGameManager = 3,
|
||||
Transform = 4,
|
||||
TimeManager = 5,
|
||||
GlobalGameManager = 6,
|
||||
Behaviour = 8,
|
||||
GameManager = 9,
|
||||
AudioManager = 11,
|
||||
ParticleAnimator = 12,
|
||||
InputManager = 13,
|
||||
EllipsoidParticleEmitter = 15,
|
||||
Pipeline = 17,
|
||||
EditorExtension = 18,
|
||||
Physics2DSettings = 19,
|
||||
Camera = 20,
|
||||
Material = 21,
|
||||
MeshRenderer = 23,
|
||||
Renderer = 25,
|
||||
ParticleRenderer = 26,
|
||||
Texture = 27,
|
||||
Texture2D = 28,
|
||||
SceneSettings = 29,
|
||||
GraphicsSettings = 30,
|
||||
MeshFilter = 33,
|
||||
OcclusionPortal = 41,
|
||||
Mesh = 43,
|
||||
Skybox = 45,
|
||||
QualitySettings = 47,
|
||||
Shader = 48,
|
||||
TextAsset = 49,
|
||||
Rigidbody2D = 50,
|
||||
Physics2DManager = 51,
|
||||
Collider2D = 53,
|
||||
Rigidbody = 54,
|
||||
PhysicsManager = 55,
|
||||
Collider = 56,
|
||||
Joint = 57,
|
||||
CircleCollider2D = 58,
|
||||
HingeJoint = 59,
|
||||
PolygonCollider2D = 60,
|
||||
BoxCollider2D = 61,
|
||||
PhysicsMaterial2D = 62,
|
||||
MeshCollider = 64,
|
||||
BoxCollider = 65,
|
||||
SpriteCollider2D = 66,
|
||||
EdgeCollider2D = 68,
|
||||
CapsuleCollider2D = 70,
|
||||
ComputeShader = 72,
|
||||
AnimationClip = 74,
|
||||
ConstantForce = 75,
|
||||
WorldParticleCollider = 76,
|
||||
TagManager = 78,
|
||||
AudioListener = 81,
|
||||
AudioSource = 82,
|
||||
AudioClip = 83,
|
||||
RenderTexture = 84,
|
||||
CustomRenderTexture = 86,
|
||||
MeshParticleEmitter = 87,
|
||||
ParticleEmitter = 88,
|
||||
Cubemap = 89,
|
||||
Avatar = 90,
|
||||
AnimatorController = 91,
|
||||
GUILayer = 92,
|
||||
RuntimeAnimatorController = 93,
|
||||
ScriptMapper = 94,
|
||||
Animator = 95,
|
||||
TrailRenderer = 96,
|
||||
DelayedCallManager = 98,
|
||||
TextMesh = 102,
|
||||
RenderSettings = 104,
|
||||
Light = 108,
|
||||
CGProgram = 109,
|
||||
BaseAnimationTrack = 110,
|
||||
Animation = 111,
|
||||
MonoBehaviour = 114,
|
||||
MonoScript = 115,
|
||||
MonoManager = 116,
|
||||
Texture3D = 117,
|
||||
NewAnimationTrack = 118,
|
||||
Projector = 119,
|
||||
LineRenderer = 120,
|
||||
Flare = 121,
|
||||
Halo = 122,
|
||||
LensFlare = 123,
|
||||
FlareLayer = 124,
|
||||
HaloLayer = 125,
|
||||
NavMeshAreas = 126,
|
||||
HaloManager = 127,
|
||||
Font = 128,
|
||||
PlayerSettings = 129,
|
||||
NamedObject = 130,
|
||||
GUITexture = 131,
|
||||
GUIText = 132,
|
||||
GUIElement = 133,
|
||||
PhysicMaterial = 134,
|
||||
SphereCollider = 135,
|
||||
CapsuleCollider = 136,
|
||||
SkinnedMeshRenderer = 137,
|
||||
FixedJoint = 138,
|
||||
RaycastCollider = 140,
|
||||
BuildSettings = 141,
|
||||
AssetBundle = 142,
|
||||
CharacterController = 143,
|
||||
CharacterJoint = 144,
|
||||
SpringJoint = 145,
|
||||
WheelCollider = 146,
|
||||
ResourceManager = 147,
|
||||
NetworkView = 148,
|
||||
NetworkManager = 149,
|
||||
PreloadData = 150,
|
||||
MovieTexture = 152,
|
||||
ConfigurableJoint = 153,
|
||||
TerrainCollider = 154,
|
||||
MasterServerInterface = 155,
|
||||
TerrainData = 156,
|
||||
LightmapSettings = 157,
|
||||
WebCamTexture = 158,
|
||||
EditorSettings = 159,
|
||||
InteractiveCloth = 160,
|
||||
ClothRenderer = 161,
|
||||
EditorUserSettings = 162,
|
||||
SkinnedCloth = 163,
|
||||
AudioReverbFilter = 164,
|
||||
AudioHighPassFilter = 165,
|
||||
AudioChorusFilter = 166,
|
||||
AudioReverbZone = 167,
|
||||
AudioEchoFilter = 168,
|
||||
AudioLowPassFilter = 169,
|
||||
AudioDistortionFilter = 170,
|
||||
SparseTexture = 171,
|
||||
AudioBehaviour = 180,
|
||||
AudioFilter = 181,
|
||||
WindZone = 182,
|
||||
Cloth = 183,
|
||||
SubstanceArchive = 184,
|
||||
ProceduralMaterial = 185,
|
||||
ProceduralTexture = 186,
|
||||
Texture2DArray = 187,
|
||||
CubemapArray = 188,
|
||||
OffMeshLink = 191,
|
||||
OcclusionArea = 192,
|
||||
Tree = 193,
|
||||
NavMeshObsolete = 194,
|
||||
NavMeshAgent = 195,
|
||||
NavMeshSettings = 196,
|
||||
LightProbesLegacy = 197,
|
||||
ParticleSystem = 198,
|
||||
ParticleSystemRenderer = 199,
|
||||
ShaderVariantCollection = 200,
|
||||
LODGroup = 205,
|
||||
BlendTree = 206,
|
||||
Motion = 207,
|
||||
NavMeshObstacle = 208,
|
||||
TerrainInstance = 210,
|
||||
SpriteRenderer = 212,
|
||||
Sprite = 213,
|
||||
CachedSpriteAtlas = 214,
|
||||
ReflectionProbe = 215,
|
||||
ReflectionProbes = 216,
|
||||
Terrain = 218,
|
||||
LightProbeGroup = 220,
|
||||
AnimatorOverrideController = 221,
|
||||
CanvasRenderer = 222,
|
||||
Canvas = 223,
|
||||
RectTransform = 224,
|
||||
CanvasGroup = 225,
|
||||
BillboardAsset = 226,
|
||||
BillboardRenderer = 227,
|
||||
SpeedTreeWindAsset = 228,
|
||||
AnchoredJoint2D = 229,
|
||||
Joint2D = 230,
|
||||
SpringJoint2D = 231,
|
||||
DistanceJoint2D = 232,
|
||||
HingeJoint2D = 233,
|
||||
SliderJoint2D = 234,
|
||||
WheelJoint2D = 235,
|
||||
ClusterInputManager = 236,
|
||||
BaseVideoTexture = 237,
|
||||
NavMeshData = 238,
|
||||
AudioMixer = 240,
|
||||
AudioMixerController = 241,
|
||||
AudioMixerGroupController = 243,
|
||||
AudioMixerEffectController = 244,
|
||||
AudioMixerSnapshotController = 245,
|
||||
PhysicsUpdateBehaviour2D = 246,
|
||||
ConstantForce2D = 247,
|
||||
Effector2D = 248,
|
||||
AreaEffector2D = 249,
|
||||
PointEffector2D = 250,
|
||||
PlatformEffector2D = 251,
|
||||
SurfaceEffector2D = 252,
|
||||
BuoyancyEffector2D = 253,
|
||||
RelativeJoint2D = 254,
|
||||
FixedJoint2D = 255,
|
||||
FrictionJoint2D = 256,
|
||||
TargetJoint2D = 257,
|
||||
LightProbes = 258,
|
||||
LightProbeProxyVolume = 259,
|
||||
SampleClip = 271,
|
||||
AudioMixerSnapshot = 272,
|
||||
AudioMixerGroup = 273,
|
||||
NScreenBridge = 280,
|
||||
AssetBundleManifest = 290,
|
||||
UnityAdsManager = 292,
|
||||
RuntimeInitializeOnLoadManager = 300,
|
||||
CloudWebServicesManager = 301,
|
||||
UnityAnalyticsManager = 303,
|
||||
CrashReportManager = 304,
|
||||
PerformanceReportingManager = 305,
|
||||
UnityConnectSettings = 310,
|
||||
AvatarMask = 319,
|
||||
VideoPlayer = 328,
|
||||
VideoClip = 329,
|
||||
OcclusionCullingData = 363,
|
||||
Prefab = 1001,
|
||||
EditorExtensionImpl = 1002,
|
||||
AssetImporter = 1003,
|
||||
AssetDatabase = 1004,
|
||||
Mesh3DSImporter = 1005,
|
||||
TextureImporter = 1006,
|
||||
ShaderImporter = 1007,
|
||||
ComputeShaderImporter = 1008,
|
||||
AudioImporter = 1020,
|
||||
HierarchyState = 1026,
|
||||
GUIDSerializer = 1027,
|
||||
AssetMetaData = 1028,
|
||||
DefaultAsset = 1029,
|
||||
DefaultImporter = 1030,
|
||||
TextScriptImporter = 1031,
|
||||
SceneAsset = 1032,
|
||||
NativeFormatImporter = 1034,
|
||||
MonoImporter = 1035,
|
||||
AssetServerCache = 1037,
|
||||
LibraryAssetImporter = 1038,
|
||||
ModelImporter = 1040,
|
||||
FBXImporter = 1041,
|
||||
TrueTypeFontImporter = 1042,
|
||||
MovieImporter = 1044,
|
||||
EditorBuildSettings = 1045,
|
||||
DDSImporter = 1046,
|
||||
InspectorExpandedState = 1048,
|
||||
AnnotationManager = 1049,
|
||||
PluginImporter = 1050,
|
||||
EditorUserBuildSettings = 1051,
|
||||
PVRImporter = 1052,
|
||||
ASTCImporter = 1053,
|
||||
KTXImporter = 1054,
|
||||
AnimatorStateTransition = 1101,
|
||||
AnimatorState = 1102,
|
||||
HumanTemplate = 1105,
|
||||
AnimatorStateMachine = 1107,
|
||||
PreviewAssetType = 1108,
|
||||
AnimatorTransition = 1109,
|
||||
SpeedTreeImporter = 1110,
|
||||
AnimatorTransitionBase = 1111,
|
||||
SubstanceImporter = 1112,
|
||||
LightmapParameters = 1113,
|
||||
LightmapSnapshot = 1120,
|
||||
SubDerived = 367388927,
|
||||
SiblingDerived = 334799969,
|
||||
SpriteAtlas = 687078895,
|
||||
Derived = 1091556383,
|
||||
LowerResBlitTexture = 1480428607,
|
||||
RenderPassAttachment = 1571458007
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user