public static void GenerateTypeTree(TypeTreeContext context)
        {
            BehaviourLayout.GenerateTypeTree(context);

            MonoBehaviourLayout layout = context.Layout.MonoBehaviour;

            if (layout.HasEditorHideFlags)
            {
                context.AddUInt32(layout.EditorHideFlagsName);
            }
            if (layout.HasGeneratorAsset)
            {
                context.AddPPtr(context.Layout.Object.Name, layout.GeneratorAssetName);
            }
            context.AddPPtr(context.Layout.MonoScript.Name, layout.ScriptName);
            context.AddString(layout.NameName);
            if (layout.HasEditorClassIdentifier)
            {
                context.AddString(layout.EditorClassIdentifierName);
            }
        }
        public static void GenerateTypeTree(TypeTreeContext context, string name)
        {
            AnimationLayout layout = context.Layout.Animation;

            context.AddNode(layout.Name, name, layout.Version);
            context.BeginChildren();
            BehaviourLayout.GenerateTypeTree(context);
            context.AddPPtr(context.Layout.AnimationClip.Name, layout.AnimationName);
            if (layout.HasAnimations)
            {
                context.AddArray(layout.AnimationName, (c, n) => c.AddPPtr(c.Layout.AnimationClip.Name, n));
            }
            else
            {
                context.AddArray(layout.AnimationName, TupleLayout.GenerateTypeTree, StringLayout.GenerateTypeTree,
                                 (c, n) => c.AddPPtr(c.Layout.AnimationClip.Name, n));
            }

            context.AddInt32(layout.WrapModeName);
            context.AddBool(layout.PlayAutomaticallyName);
            context.AddBool(layout.AnimatePhysicsInvariantName);
            if (layout.HasAnimateOnlyIfVisible)
            {
                context.AddBool(layout.AnimateOnlyIfVisibleName);
            }
            if (layout.IsAlign)
            {
                context.Align();
            }

            if (layout.HasCullingType)
            {
                context.AddInt32(layout.CullingTypeName);
            }
            if (layout.HasUserAABB)
            {
                AABBLayout.GenerateTypeTree(context, layout.UserAABBName);
            }
            context.EndChildren();
        }