using System; using System.Collections.Generic; using BitStrap; using UnityEngine; using UnityEngine.UI; public class ObjectJsonSerializer : MonoBehaviour { [Serializable] public class MyGameObject { [NonSerialized] public Transform source; public string name; public List children; public ButtonMyComponent cButtonMyComponent; public TextMyComponent cTextMyComponent; public ImageMyComponent cImageMyComponent; public TransformMyComponent cTransform; public AquariumControllerMyComponent cAquariumController; public BoxColliderMyComponent cBoxCollider; public LightMyComponent cLight; public MeshRendererMyComponent cMeshRenderer; public MeshFilterMyComponent cMeshFilter; public MeshColliderMyComponent cMeshCollider; public LODGroupMyComponent cLODGroup; public SphereColliderMyComponent cSphereCollider; public CapsuleColliderMyComponent cCapsuleCollider; public MyGameObject(Transform source) { this.source = source; name = source.name; children = new List(); } } [Serializable] public class MyComponent { public bool created; public MyComponent() { created = true; } } [Serializable] public class _MyComponent : MyComponent { public _MyComponent(Component source) { } } [Serializable] public class ButtonMyComponent : MyComponent { public Selectable.Transition transition; public ColorBlock colors; public SpriteState spriteState; public AnimationTriggers animationTriggers; public Graphic targetGraphic; public ButtonMyComponent(Button source) { transition = source.transition; colors = source.colors; spriteState = source.spriteState; animationTriggers = source.animationTriggers; targetGraphic = source.targetGraphic; } } [Serializable] public class TextMyComponent : MyComponent { public string text; public Font font; public int fontSize; public Color color; public TextMyComponent(Text source) { text = source.text; font = source.font; fontSize = source.fontSize; color = source.color; } } [Serializable] public class ImageMyComponent : MyComponent { public Sprite sprite; public Color color; public ImageMyComponent(Image source) { sprite = source.sprite; color = source.color; } } [Serializable] public class TransformMyComponent : MyComponent { public Vector3 localPosition; public Quaternion localRotation; public Vector3 localScale; public TransformMyComponent(Transform source) { localPosition = source.localPosition; localRotation = source.localRotation; localScale = source.localScale; } } [Serializable] public class AquariumControllerMyComponent : MyComponent { public AquariumControllerMyComponent(AquariumController source) { } } [Serializable] public class BoxColliderMyComponent : MyComponent { public BoxColliderMyComponent(BoxCollider source) { } } [Serializable] public class LightMyComponent : MyComponent { public LightMyComponent(Light source) { } } [Serializable] public class MeshRendererMyComponent : MyComponent { public MeshRendererMyComponent(MeshRenderer source) { } } [Serializable] public class MeshFilterMyComponent : MyComponent { public MeshFilterMyComponent(MeshFilter source) { } } [Serializable] public class LODGroupMyComponent : MyComponent { public LODGroupMyComponent(LODGroup source) { } } [Serializable] public class MeshColliderMyComponent : MyComponent { public MeshColliderMyComponent(MeshCollider source) { } } [Serializable] public class SphereColliderMyComponent : MyComponent { public SphereColliderMyComponent(SphereCollider source) { } } [Serializable] public class CapsuleColliderMyComponent : MyComponent { public CapsuleColliderMyComponent(CapsuleCollider source) { } } public MyGameObject serializedObject; [Button] public void Serialize() { serializedObject = new MyGameObject(base.transform); SerializeTarget(serializedObject); } public void SerializeTarget(MyGameObject target) { SerializeComponents(target); foreach (Transform item in target.source) { MyGameObject myGameObject = new MyGameObject(item); target.children.Add(myGameObject); SerializeTarget(myGameObject); } } [Button] public void Deserialize() { if (serializedObject != null) { DeserializeTarget(serializedObject); } } public void DeserializeTarget(MyGameObject target) { DeserializeComponents(target); foreach (Transform item in target.source) { MyGameObject target2 = new MyGameObject(item); DeserializeTarget(target2); } } public void DeserializeComponents(MyGameObject target) { if (target.cButtonMyComponent != null) { Button button = target.source.gameObject.GetComponent