public static GameObject buildSceleton( string name, SpineData data, int pixelsPerUnit, float zStep, out Dictionary<string, GameObject> boneGOByName, out Dictionary<string, Slot> slotByName ) { float ratio = 1.0f / (float)pixelsPerUnit; boneGOByName = new Dictionary<string, GameObject>(); slotByName = new Dictionary<string, Slot>(); GameObject rootGO = new GameObject(name); foreach(SpineBone bone in data.bones){ GameObject go = new GameObject(bone.name); boneGOByName.Add(bone.name, go); } foreach(SpineBone bone in data.bones){ GameObject go = boneGOByName[bone.name]; if (bone.parent == null) go.transform.parent = rootGO.transform; else go.transform.parent = boneGOByName[bone.parent].transform; Vector3 position = new Vector3((float)bone.x * ratio, (float)bone.y * ratio, 0.0f); Vector3 scale = new Vector3((float)bone.scaleX, (float)bone.scaleY, 1.0f); Quaternion rotation = Quaternion.Euler(0, 0, (float)bone.rotation); go.transform.localPosition = position; go.transform.localScale = scale; go.transform.localRotation = rotation; } foreach(SpineSlot spineSlot in data.slots){ GameObject go = new GameObject(getSlotGOName(spineSlot.name)); go.transform.parent = boneGOByName[spineSlot.bone].transform; resetLocalTRS(go); int drawOrder = data.slotOrder[ spineSlot.name ]; go.transform.localPosition = new Vector3( 0, 0, (- drawOrder ) * zStep ); Slot slot = new Slot(); slot.bone = spineSlot.bone; slot.name = spineSlot.name; slot.color = hexStringToColor32(spineSlot.color); slot.gameObject = go; slot.defaultAttachmentName = spineSlot.attachment; slotByName.Add(slot.name, slot); } return rootGO; }
public static SkinController addSkinController(GameObject gameObject, SpineData spineData, List<Skin> allSkins, Dictionary<string, Slot> slotByName) { SkinController sk = gameObject.AddComponent<SkinController>(); List<Skin> skins = new List<Skin>(); Skin defaultSkin = null; foreach(Skin skin in allSkins){ if (skin.name.Equals("default")){ defaultSkin = skin; } else { skins.Add(skin); } } sk.defaultSkin = defaultSkin; sk.skins = skins.ToArray(); Slot[] slots = new Slot[slotByName.Count]; slotByName.Values.CopyTo(slots,0); sk.slots = slots; return sk; }