public static void LoadPrefabsFromJSON() { // GameObject parentObject = Selection.gameObjects[0]; string prefabRelativePath = @"Assets/Prefabs/MapComponents"; TextAsset text = Resources.Load <TextAsset>("Haru"); JSONNode mapTest = JSONNode.Parse(text.text); JSONNode mapInfo = mapTest["MapInfo"]; foreach (JSONNode node in mapInfo.Childs) { GameObject mapPiece = AssetDatabase.LoadAssetAtPath <GameObject>(prefabRelativePath + "/" + node["FileName"] + ".prefab"); mapPiece = Instantiate(mapPiece); mapPiece.GetComponent <MapObject>().index = node["Index"].AsInt; mapPiece.GetComponent <MapObject>().position = new Vector2(node["Position"][0].AsFloat, node["Position"][1].AsFloat); mapPiece.GetComponent <MapObject>().rotation = node["Rotation"].AsFloat; mapPiece.GetComponent <MapObject>().scale = new Vector2(node["Scale"][0].AsFloat, node["Scale"][1].AsFloat); List <int> childrens = new List <int>(); foreach (JSONNode child in node["Children"].AsArray) { childrens.Add(child.AsInt); } mapPiece.GetComponent <MapObject>().childrenIndex = childrens; List <MapObject.KeyTrigger> keyTriggers = new List <MapObject.KeyTrigger>(); List <int> indexList = new List <int>(); foreach (JSONNode trigger in node["KeyTrigger"].Childs) { MapObject.KeyTrigger currentKey = new MapObject.KeyTrigger(); indexList = new List <int>(); foreach (JSONNode index in trigger["Index"].AsArray) { indexList.Add(index.AsInt); } currentKey.index = indexList; currentKey.dPosition = new Vector2(trigger["dPosition"][0].AsFloat / 100.0f, trigger["dPosition"][1].AsFloat / 100.0f); currentKey.dRotation = trigger["dRotation"].AsFloat; currentKey.dScale = new Vector2(trigger["dScale"].AsFloat, trigger["dScale"].AsFloat); currentKey.duration = trigger["Duration"].AsFloat; currentKey.visible = trigger["Visible"].AsBool; currentKey.triggerable = trigger["Triggerable"].AsBool; currentKey.load = trigger["Load"].AsBool; currentKey.objects = new List <MapObject>(); keyTriggers.Add(currentKey); } mapPiece.GetComponent <MapObject>().keyTriggers = keyTriggers; mapPiece.GetComponent <MapObject>().transferCrystalTrigger = node["TransferCrystalTrigger"].AsInt; MapObject.ShiftCrystalTrigger shiftTrigger = new MapObject.ShiftCrystalTrigger(); indexList = new List <int>(); foreach (JSONNode index in node["ShiftCrystalTrigger"]["Index"].AsArray) { indexList.Add(index.AsInt); } shiftTrigger.index = indexList; shiftTrigger.objects = new List <MapObject>(); shiftTrigger.direction = node["ShiftCrystalTrigger"]["Direction"].AsBool; mapPiece.GetComponent <MapObject>().shiftCrystalTrigger = shiftTrigger; mapPiece.GetComponent <MapObject>().type = (MapPiece.MapType)node["Type"].AsInt; mapPiece.transform.position = new Vector3(node["Position"][0].AsFloat / 100.0f, node["Position"][1].AsFloat / 100.0f, 0.0f); mapPiece.transform.eulerAngles = new Vector3(0, 0, -node["Rotation"].AsFloat); mapPiece.transform.localScale = new Vector3(node["Scale"][0].AsFloat, node["Scale"][1].AsFloat, 1.0f); mapPiece.GetComponent <MapObject>().visible = node["Visible"].AsBool; mapPiece.GetComponent <MapObject>().load = node["Load"].AsBool; mapPiece.GetComponent <MapObject>().transferCrystalTriggerObject = new MapObject(); mapPiece = PrefabUtility.InstantiatePrefab(mapPiece) as GameObject; // mapPiece.transform.parent = parentObject.transform; } GameObject[] objects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject)); foreach (var obj in objects) { if (SceneManager.GetActiveScene() == obj.scene) { if (obj.GetComponent <MapObject>() != null) { MapObject o = obj.GetComponent <MapObject>(); foreach (var keyTrigger in o.keyTriggers) { foreach (int idx in keyTrigger.index) { MapObject targetMapObject = new MapObject(); foreach (var obj2 in objects) { if (obj2.GetComponent <MapObject>() != null && obj2.GetComponent <MapObject>().index == idx) { targetMapObject = obj2.GetComponent <MapObject>(); } } keyTrigger.objects.Add(targetMapObject); } } foreach (int idx in o.shiftCrystalTrigger.index) { MapObject targetMapObject = new MapObject(); foreach (var obj2 in objects) { if (obj2.GetComponent <MapObject>() != null && obj2.GetComponent <MapObject>().index == idx) { targetMapObject = obj2.GetComponent <MapObject>(); } } o.shiftCrystalTrigger.objects.Add(targetMapObject); } if (o.transferCrystalTrigger != 0) { MapObject targetMapObject = new MapObject(); foreach (var obj2 in objects) { if (obj2.GetComponent <MapObject>() != null && obj2.GetComponent <MapObject>().index == o.transferCrystalTrigger) { targetMapObject = obj2.GetComponent <MapObject>(); } } o.transferCrystalTriggerObject = targetMapObject; } } } } }
public static JSONClass SaveNode(int type, int index, string fileName, float positionX, float positionY, float rotation, float scaleX, float scaleY, List <int> children, bool visible, bool load, List <MapObject.KeyTrigger> keyTriggers, MapObject transferTrigger, MapObject.ShiftCrystalTrigger shiftTrigger) { JSONClass result = new JSONClass(); result.Add("Type", new JSONData(type)); result.Add("Index", new JSONData(index)); result.Add("FileName", new JSONData(fileName)); result.Add("Position", new JSONArray { new JSONData(positionX), new JSONData(positionY) }); result.Add("Rotation", new JSONData(rotation)); result.Add("Scale", new JSONArray { new JSONData(scaleX), new JSONData(scaleY) }); JSONArray childrenJSON = new JSONArray(); foreach (int child in children) { childrenJSON.Add(new JSONData(child)); } result.Add("Children", childrenJSON); result.Add("Visible", new JSONData(visible)); result.Add("Load", new JSONData(load)); JSONArray keyTrigger = new JSONArray(); foreach (MapObject.KeyTrigger trigger in keyTriggers) { JSONClass triggerClass = new JSONClass(); JSONArray indexArray = new JSONArray(); Debug.Log(trigger.dPosition.x); foreach (MapObject obj in trigger.objects) { indexArray.Add(new JSONData(obj.index)); } triggerClass.Add("Index", indexArray); triggerClass.Add("dPosition", new JSONArray() { new JSONData(trigger.dPosition.x * 100.0f), new JSONData(trigger.dPosition.y * 100.0f) }); triggerClass.Add("dRotation", new JSONData(trigger.dRotation)); triggerClass.Add("dScale", new JSONArray() { new JSONData(trigger.dScale.x), new JSONData(trigger.dScale.y) }); triggerClass.Add("Duration", new JSONData(trigger.duration));; triggerClass.Add("Visible", new JSONData(trigger.visible)); triggerClass.Add("Triggerable", new JSONData(trigger.triggerable)); triggerClass.Add("Load", new JSONData(trigger.load)); keyTrigger.Add(triggerClass); } result.Add("KeyTrigger", keyTrigger); result.Add("TransferCrystalTrigger", new JSONData(transferTrigger.index)); JSONClass shiftTriggerNode = new JSONClass(); JSONArray shiftIndex = new JSONArray(); foreach (MapObject obj in shiftTrigger.objects) { shiftIndex.Add(new JSONData(obj.index)); } shiftTriggerNode.Add("Index", shiftIndex); shiftTriggerNode.Add("Direction", new JSONData(shiftTrigger.direction)); result.Add("ShiftCrystalTrigger", shiftTriggerNode); return(result); }