fixed GameObject in Unity 5.5

This commit is contained in:
Perfare 2017-01-16 02:20:30 +08:00
parent 08bf84146b
commit 2e84b08494
5 changed files with 56 additions and 26 deletions

View File

@ -8,8 +8,9 @@ namespace Unity_Studio
{
public class GameObject : TreeNode
{
public List<PPtr> m_Components = new List<PPtr>();
public PPtr m_Transform;
public PPtr m_Renderer;
public PPtr m_MeshRenderer;
public PPtr m_MeshFilter;
public PPtr m_SkinnedMeshRenderer;
public int m_Layer;
@ -39,25 +40,14 @@ namespace Unity_Studio
int m_Component_size = a_Stream.ReadInt32();
for (int j = 0; j < m_Component_size; j++)
{
int m_Component_type = a_Stream.ReadInt32();
switch (m_Component_type)
if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
{
case 4:
m_Transform = sourceFile.ReadPPtr();
break;
case 23:
m_Renderer = sourceFile.ReadPPtr();
break;
case 33:
m_MeshFilter = sourceFile.ReadPPtr();
break;
case 137:
m_SkinnedMeshRenderer = sourceFile.ReadPPtr();
break;
default:
PPtr m_Component = sourceFile.ReadPPtr();
break;
m_Components.Add(sourceFile.ReadPPtr());
}
else
{
int first = a_Stream.ReadInt32();
m_Components.Add(sourceFile.ReadPPtr());
}
}

View File

@ -5,7 +5,7 @@ using System.Text;
namespace Unity_Studio
{
class Renderer
class MeshRenderer
{
public PPtr m_GameObject;
public bool m_Enabled;
@ -15,7 +15,7 @@ namespace Unity_Studio
public ushort m_LightmapIndexDynamic;
public PPtr[] m_Materials;
public Renderer(AssetPreloadData preloadData)
public MeshRenderer(AssetPreloadData preloadData)
{
var sourceFile = preloadData.sourceFile;
var a_Stream = preloadData.sourceFile.a_Stream;

View File

@ -174,7 +174,7 @@
<Compile Include="Unity Classes\MonoBehaviour.cs" />
<Compile Include="Unity Classes\PlayerSettings.cs" />
<Compile Include="Unity Classes\RectTransform.cs" />
<Compile Include="Unity Classes\Renderer.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" />

View File

@ -809,6 +809,8 @@ namespace Unity_Studio
foreach (var m_GameObject in assetsFile.GameObjectList.Values)
{
assetsfileList.ParseGameObject(m_GameObject);
var parentNode = fileNode;
Transform m_Transform;
@ -2017,9 +2019,9 @@ namespace Unity_Studio
#region get Renderer
AssetPreloadData RendererPD;
if (assetsfileList.TryGetPD(m_GameObject.m_Renderer, out RendererPD))
if (assetsfileList.TryGetPD(m_GameObject.m_MeshRenderer, out RendererPD))
{
Renderer m_Renderer = new Renderer(RendererPD);
MeshRenderer m_Renderer = new MeshRenderer(RendererPD);
foreach (var MaterialPPtr in m_Renderer.m_Materials)
{

View File

@ -24,13 +24,13 @@ namespace Unity_Studio
int FileID = a_Stream.ReadInt32();
if (FileID >= 0 && FileID < sourceFile.sharedAssetsList.Count)
{ result.m_FileID = sourceFile.sharedAssetsList[FileID].Index; }
if (sourceFile.fileGen < 14) { result.m_PathID = a_Stream.ReadInt32(); }
else { result.m_PathID = a_Stream.ReadInt64(); }
return result;
}
public static bool TryGetPD(this List<AssetsFile> assetsfileList, PPtr m_elm, out AssetPreloadData result)
{
result = null;
@ -73,6 +73,44 @@ namespace Unity_Studio
return false;
}
public static void ParseGameObject(this List<AssetsFile> assetsfileList, GameObject m_GameObject)
{
foreach (var m_Component in m_GameObject.m_Components)
{
if (m_Component.m_FileID >= 0 && m_Component.m_FileID < assetsfileList.Count)
{
AssetsFile sourceFile = assetsfileList[m_Component.m_FileID];
AssetPreloadData asset;
if (sourceFile.preloadTable.TryGetValue(m_Component.m_PathID, out asset))
{
switch (asset.Type2)
{
case 4: //Transform
{
m_GameObject.m_Transform = m_Component;
break;
}
case 23: //MeshRenderer
{
m_GameObject.m_MeshRenderer = m_Component;
break;
}
case 33: //MeshFilter
{
m_GameObject.m_MeshFilter = m_Component;
break;
}
case 137: //SkinnedMeshRenderer
{
m_GameObject.m_SkinnedMeshRenderer = m_Component;
break;
}
}
}
}
}
}
}
class TexEnv