From ca5f20bcf47bb295bc0e3b95b2ceeeb382eff59e Mon Sep 17 00:00:00 2001 From: Jakob Hellermann Date: Fri, 20 Jun 2025 07:10:52 +0200 Subject: [PATCH 1/2] fix: remove stray . on empty namespace --- UnityPy/files/ObjectReader.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/UnityPy/files/ObjectReader.py b/UnityPy/files/ObjectReader.py index 4b02858e..bb2df8b9 100644 --- a/UnityPy/files/ObjectReader.py +++ b/UnityPy/files/ObjectReader.py @@ -305,7 +305,13 @@ def _try_monobehaviour_node(self, base_node: TypeTreeNode) -> TypeTreeNode: raise ValueError("No typetree generator set!") monobehaviour = cast(MonoBehaviour, self.parse_as_object(base_node, check_read=False)) script = monobehaviour.m_Script.deref_parse_as_object() - node = generator.get_nodes_up(script.m_AssemblyName, f"{script.m_Namespace}.{script.m_ClassName}") + + if script.m_Namespace != "": + fullname = f"{script.m_Namespace}.{script.m_ClassName}" + else: + fullname = script.m_ClassName + + node = generator.get_nodes_up(script.m_AssemblyName, fullname) if node: return node else: From ba2e60b8621f5627790ce1a9fad359f8d6045b99 Mon Sep 17 00:00:00 2001 From: Jakob Hellermann Date: Wed, 9 Jul 2025 11:32:04 +0200 Subject: [PATCH 2/2] type tree generator: prepend monobehaviour base fields instead of relying on generator to do it --- UnityPy/files/ObjectReader.py | 2 +- UnityPy/helpers/TypeTreeGenerator.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/UnityPy/files/ObjectReader.py b/UnityPy/files/ObjectReader.py index bb2df8b9..d2881a4b 100644 --- a/UnityPy/files/ObjectReader.py +++ b/UnityPy/files/ObjectReader.py @@ -311,7 +311,7 @@ def _try_monobehaviour_node(self, base_node: TypeTreeNode) -> TypeTreeNode: else: fullname = script.m_ClassName - node = generator.get_nodes_up(script.m_AssemblyName, fullname) + node = generator.get_nodes_up(base_node, script.m_AssemblyName, fullname) if node: return node else: diff --git a/UnityPy/helpers/TypeTreeGenerator.py b/UnityPy/helpers/TypeTreeGenerator.py index 1170f418..0bac7d00 100644 --- a/UnityPy/helpers/TypeTreeGenerator.py +++ b/UnityPy/helpers/TypeTreeGenerator.py @@ -43,7 +43,7 @@ def load_local_dll_folder(self, dll_dir: str): data = f.read() self.load_dll(data) - def get_nodes_up(self, assembly: str, fullname: str) -> TypeTreeNode: + def get_nodes_up(self, base_node: TypeTreeNode, assembly: str, fullname: str) -> TypeTreeNode: root = self.cache.get((assembly, fullname)) if root is not None: return root @@ -60,6 +60,7 @@ def get_nodes_up(self, assembly: str, fullname: str) -> TypeTreeNode: 0, 0, m_MetaFlag=base_root.m_MetaFlag, + m_Children=base_node.m_Children[:], ) stack: List[TypeTreeNode] = [] parent = root