@@ -282,10 +282,7 @@ def _get_typetree_node(
282282 if not node :
283283 node = get_typetree_node (self .class_id , self .version )
284284 if node .m_Type == "MonoBehaviour" :
285- try :
286- node = self ._try_monobehaviour_node (node )
287- except Exception :
288- pass
285+ node = self .generate_monobehaviour_node (node )
289286 if not node :
290287 raise TypeTreeError ("There are no TypeTree nodes for this object." )
291288 return node
@@ -297,21 +294,29 @@ def parse_as_object(self, node: Optional[NodeInput] = None, check_read: bool = T
297294 def parse_as_dict (self , node : Optional [NodeInput ] = None , check_read : bool = True ) -> dict [str , Any ]:
298295 return self .read_typetree (nodes = node , wrap = False , check_read = check_read ) # type: ignore
299296
300- def _try_monobehaviour_node (self , base_node : TypeTreeNode ) -> TypeTreeNode :
297+ def parse_monobehaviour_head (self , mb_node : Optional [TypeTreeNode ] = None ) -> MonoBehaviour :
298+ if mb_node is None :
299+ mb_node = get_typetree_node (ClassIDType .MonoBehaviour , self .version )
300+
301+ mb = self .read_typetree (nodes = mb_node , wrap = True , check_read = False )
302+ return cast (MonoBehaviour , mb )
303+
304+ def generate_monobehaviour_node (self , mb_node : Optional [TypeTreeNode ] = None ) -> TypeTreeNode :
301305 env = self .assets_file .environment
302306 generator = env .typetree_generator
303307 if generator is None :
304- raise ValueError ("No typetree generator set!" )
305- monobehaviour = cast (MonoBehaviour , self .parse_as_object (base_node , check_read = False ))
308+ raise ValueError ("MonoBehaviour detected, but no typetree_generator set to the environment!" )
309+
310+ monobehaviour = self .parse_monobehaviour_head (mb_node )
306311 script = monobehaviour .m_Script .deref_parse_as_object ()
307312
308313 if script .m_Namespace != "" :
309314 fullname = f"{ script .m_Namespace } .{ script .m_ClassName } "
310315 else :
311316 fullname = script .m_ClassName
312317
313- node = generator .get_nodes_up (base_node , script .m_AssemblyName , fullname )
318+ node = generator .get_nodes_up (script .m_AssemblyName , fullname )
314319 if node :
315320 return node
316321 else :
317- raise ValueError ("Failed to get custom MonoBehaviour node!" )
322+ raise ValueError (f "Failed to generate MonoBehaviour node for { fullname } of { script . m_AssemblyName } !" )
0 commit comments