forked from K0lb3/UnityPy
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGameObject.py
More file actions
84 lines (73 loc) · 2.91 KB
/
Copy pathGameObject.py
File metadata and controls
84 lines (73 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from .EditorExtension import EditorExtension
from .PPtr import PPtr
from ..streams import EndianBinaryWriter
from ..enums import ClassIDType
class GameObject(EditorExtension):
m_Components: list
m_Layer: int
name: str
m_Animator: PPtr
m_Animation: PPtr
m_Transform: PPtr
m_MeshRenderer: PPtr
m_SkinnedMeshRender: PPtr
m_MeshFilter: PPtr
def __init__(self, reader):
super().__init__(reader=reader)
self.m_Animator = None
self.m_Animation = None
self.m_Transform = None
self.m_MeshRenderer = None
self.m_SkinnedMeshRenderer = None
self.m_MeshFilter = None
components_size = reader.read_int()
self.m_Components = [None] * components_size
if self.version[:2] < (5, 5):
self._firsts = [None] * components_size
for i in range(components_size):
if self.version[:2] < (5, 5):
self._firsts[i] = reader.read_int()
component = PPtr(reader)
self.m_Components[i] = component
if component.type == ClassIDType.Animator:
self.m_Animator = component
elif component.type == ClassIDType.Animation:
self.m_Animation = component
elif component.type in [ClassIDType.Transform, ClassIDType.RectTransform]:
self.m_Transform = component
elif component.type == ClassIDType.MeshRenderer:
self.m_MeshRenderer = component
elif component.type == ClassIDType.SkinnedMeshRenderer:
self.m_SkinnedMeshRenderer = component
elif component.type == ClassIDType.MeshFilter:
self.m_MeshFilter = component
self.m_Layer = reader.read_int()
self.m_Name = reader.read_aligned_string()
if self.version > (2019, ):
self.m_Tag = reader.read_u_short()
self.m_IsActive = reader.read_boolean()
def __key(self):
return (self.assets_file, self.m_PathID)
def __hash__(self):
return hash(self.__key())
def __eq__(self, other):
if isinstance(other, GameObject):
return self.__key() == other.__key()
return NotImplemented
def save(self, writer: EndianBinaryWriter = None, intern_call=True):
if not writer:
writer = EndianBinaryWriter(endian=self.reader.endian)
super().save(writer)
component_size = len(self.m_Components)
writer.write_int(component_size)
for i in range(component_size):
if self.version[:2] < (5, 5):
writer.write_int(self._firsts[i])
self.m_Components[i].save(writer)
writer.write_int(self.m_Layer)
writer.write_aligned_string(self.m_Name)
if self.version > (2019, ):
writer.write_u_short(self.m_Tag)
writer.write_boolean(self.m_IsActive)
if not intern_call:
self.set_raw_data(writer)