void UpdatePivot(SpriteFrame sprite, int selectPivot) { m_pivotIndex = selectPivot; sprite.CreateQuad(); switch (selectPivot) { case 1: sprite.pivot = new Vector2(0.5f, 0.5f); break; case 2: sprite.pivot = new Vector2(0.5f, 1f); break; case 3: sprite.pivot = new Vector2(0f, 1f); break; case 4: sprite.pivot = new Vector2(1f, 1f); break; case 5: sprite.pivot = new Vector2(0f, 0.5f); break; case 6: sprite.pivot = new Vector2(1f, 0.5f); break; case 7: sprite.pivot = new Vector2(0.5f, 0f); break; case 8: sprite.pivot = new Vector2(0f, 0f); break; case 9: sprite.pivot = new Vector2(1f, 0f); break; } }
static void ShowSpriteFrame(SpriteFrame frame, Material mat, DragonBoneData.SkinSlotDisplayData displayData, Transform slot, DragonBoneData.SlotData slotData) { SpriteFrame newFrame = (SpriteFrame)GameObject.Instantiate(frame); newFrame.atlasMat = mat; newFrame.CreateQuad(); newFrame.frameName = displayData.textureName; newFrame.name = displayData.textureName; newFrame.pivot = displayData.pivot; newFrame.transform.parent = slot; Vector3 localPos = Vector3.zero; if (!float.IsNaN(displayData.transform.x)) { localPos.x = displayData.transform.x; } if (!float.IsNaN(displayData.transform.y)) { localPos.y = displayData.transform.y; } newFrame.transform.localPosition = localPos; Vector3 localSc = Vector3.one; if (!float.IsNaN(displayData.transform.scx)) { localSc.x = displayData.transform.scx; } if (!float.IsNaN(displayData.transform.scy)) { localSc.y = displayData.transform.scy; } newFrame.transform.localScale = localSc; newFrame.color = slot.GetComponent <Slot>().color; if (!float.IsNaN(displayData.transform.rotate)) { newFrame.transform.localRotation = Quaternion.Euler(0, 0, displayData.transform.rotate); } }
/// <summary> /// Changes the sprite frame. /// </summary> /// <param name="spriteFrameName">Sprite frame name.</param> /// <param name="newTextureFrameName">New texture frame name.</param> public void ChangeSpriteFrame(string spriteFrameName, string newTextureFrameName) { Renderer attachment = GetAttachmentByName(spriteFrameName); if (!attachment) { return; } SpriteFrame sf = attachment.GetComponent <SpriteFrame>(); TextureFrame frame = GetTextureFrameByName(newTextureFrameName); if (sf != null && frame != null) { sf.atlasMat = frame.material; attachment.sharedMaterial = frame.material; sf.frames[0] = frame; sf.frameName = newTextureFrameName; sf.UpdateVertex(); } }
/// <summary> /// update /// </summary> public void UpdateArmature(){ int len = updateFrames.Length; for(int i=0;i<len;++i){ SpriteFrame frame = updateFrames[i]; if(frame&&frame.isActiveAndEnabled) frame.UpdateFrame(); } len = updateMeshs.Length; for(int i=0;i<len;++i){ SpriteMesh mesh = updateMeshs[i]; if(mesh&&mesh.isActiveAndEnabled) mesh.UpdateMesh(); } len = slots.Length; for(int i=0;i<len;++i){ Slot slot = slots[i]; if(slot && slot.isActiveAndEnabled){ slot.UpdateSlot(); } } }
/// <summary> /// Changes the sprite frame. /// </summary> /// <param name="sf">Will replace SpriteFrame</param> /// <param name="texture">new Texture.</param> /// <param name="mat">Mat.</param> public void ChangeSpriteFrame(SpriteFrame sf, Texture texture, Material mat = null) { if (!sf || !texture) { return; } if (mat) { sf.atlasMat = mat; } sf.atlasMat.mainTexture = texture; sf.frame.atlasTextureSize = new Vector2(texture.width, texture.height); sf.frame.material = sf.atlasMat; sf.frame.rect.x = 0f; sf.frame.rect.y = 0f; sf.frame.rect.width = texture.width; sf.frame.rect.height = texture.height; sf.frame.frameSize = new Rect(0, 0, texture.width, texture.height); sf.frame.isRotated = false; sf.rect = sf.frame.frameSize; }
/// <summary> /// update /// </summary> public void UpdateArmature() { int len = updateFrames.Length; for (int i = 0; i < len; ++i) { SpriteFrame frame = updateFrames[i]; if (frame && frame.isActiveAndEnabled) { frame.UpdateFrame(); } } len = updateMeshs.Length; for (int i = 0; i < len; ++i) { SpriteMesh mesh = updateMeshs[i]; if (mesh && mesh.isActiveAndEnabled) { mesh.UpdateMesh(); } } }
public static void ShowSkins(ArmatureEditor armatureEditor) { if (armatureEditor.armatureData.skinDatas != null && armatureEditor.armatureData.skinDatas.Length > 0) { DragonBoneArmature armature = armatureEditor.armature.GetComponent <DragonBoneArmature>(); Dictionary <Texture2D, Material> matKV = new Dictionary <Texture2D, Material>(); List <Material> mats = new List <Material>(); //创建贴图集的材质 Material atlasMat = null; if (armatureEditor.altasTexture) { Material mat = null; string path = AssetDatabase.GetAssetPath(armatureEditor.altasTexture); path = path.Substring(0, path.LastIndexOf('.')) + "_Mat.mat"; mat = AssetDatabase.LoadAssetAtPath <Material>(path); if (!mat) { mat = new Material(Shader.Find("DragonBone/DragonBone Simple")); AssetDatabase.CreateAsset(mat, path); } mat.mainTexture = armatureEditor.altasTexture; matKV[armatureEditor.altasTexture] = mat; atlasMat = mat; mats.Add(mat); } if (armatureEditor.otherTextures != null && armatureEditor.otherTextures.Length > 0) { for (int r = 0; r < armatureEditor.otherTextures.Length; ++r) { ArmatureEditor.Atlas atlas = armatureEditor.otherTextures[r]; Material mat = null; string path = AssetDatabase.GetAssetPath(atlas.texture); path = path.Substring(0, path.LastIndexOf('.')) + "_Mat.mat"; mat = AssetDatabase.LoadAssetAtPath <Material>(path); if (!mat) { mat = new Material(Shader.Find("DragonBone/DragonBone Simple")); AssetDatabase.CreateAsset(mat, path); } mat.mainTexture = atlas.texture; matKV[atlas.texture] = mat; mats.Add(mat); } } //create Frames Dictionary <Texture2D, SpriteFrame> frameKV = new Dictionary <Texture2D, SpriteFrame>(); List <TextureFrame> tfs = new List <TextureFrame>(); SpriteFrame frame = null; if (armatureEditor.altasTextAsset != null) { GameObject go = new GameObject(); SpriteFrame sf = go.AddComponent <SpriteFrame>(); sf.atlasMat = atlasMat; sf.atlasText = armatureEditor.altasTextAsset; sf.ParseAtlasText(); sf.CreateQuad(); frameKV[armatureEditor.altasTexture] = sf; frame = sf; tfs.AddRange(frame.frames); } if (armatureEditor.otherTextures != null && armatureEditor.otherTextures.Length > 0) { for (int r = 0; r < armatureEditor.otherTextures.Length; ++r) { ArmatureEditor.Atlas atlas = armatureEditor.otherTextures[r]; GameObject go = new GameObject(); SpriteFrame sf = go.AddComponent <SpriteFrame>(); sf.atlasMat = matKV[atlas.texture]; sf.atlasText = atlas.atlasText; sf.ParseAtlasText(); sf.CreateQuad(); frameKV[atlas.texture] = sf; tfs.AddRange(sf.frames); } } List <SpriteMetaData> metaDatas = new List <SpriteMetaData>(); List <SpriteRenderer> sprites = new List <SpriteRenderer>(); int meshSpriteCount = 0; int len = armatureEditor.armatureData.skinDatas.Length; for (int i = 0; i < len; ++i) { DragonBoneData.SkinData skinData = armatureEditor.armatureData.skinDatas[i]; for (int j = 0; j < skinData.slots.Length; ++j) { DragonBoneData.SkinSlotData skinSlotData = skinData.slots[j]; Transform slot = armatureEditor.slotsKV[skinSlotData.slotName]; DragonBoneData.SlotData slotData = armatureEditor.slotsDataKV[skinSlotData.slotName]; if (slot && skinSlotData.displays != null && skinSlotData.displays.Length > 0) { for (int k = 0; k < skinSlotData.displays.Length; ++k) { DragonBoneData.SkinSlotDisplayData displayData = skinSlotData.displays[k]; if (displayData.type != "image" && displayData.type != "mesh" && displayData.type != "boundingBox") { continue; } if (displayData.type.Equals("boundingBox")) { if (displayData.subType == "polygon") { ShowCustomCollider(displayData, slot, armatureEditor, slotData); } continue; } ArmatureEditor.Atlas atlas = armatureEditor.GetAtlasByTextureName(displayData.texturePath); if (!armatureEditor.isSingleSprite) { atlasMat = matKV[atlas.texture]; frame = frameKV[atlas.texture]; } if (displayData.type == "image") { if (armatureEditor.useUnitySprite) { if (armatureEditor.isSingleSprite) { Sprite sprite = armatureEditor.spriteKV[displayData.textureName]; string spritePath = AssetDatabase.GetAssetPath(sprite); if (displayData.pivot.x != 0 || displayData.pivot.y != 0) { TextureImporter textureImporter = AssetImporter.GetAtPath(spritePath) as TextureImporter; textureImporter.textureType = TextureImporterType.Sprite; textureImporter.spriteImportMode = SpriteImportMode.Single; textureImporter.spritePixelsPerUnit = 100; textureImporter.spritePivot = new Vector2((displayData.pivot.x + sprite.rect.width / 2) / sprite.rect.width, (displayData.pivot.y + sprite.rect.height / 2) / sprite.rect.height); AssetDatabase.ImportAsset(spritePath, ImportAssetOptions.ForceUpdate); } sprites.Add(ShowUnitySpriteSingle(sprite, displayData, slot, slotData)); } else { SpriteMetaData metaData = new SpriteMetaData(); metaData.name = displayData.textureName; metaData.rect = frame.GetFrameByName(displayData.texturePath).rect; metaData.rect.y = armatureEditor.altasTexture.height - metaData.rect.y - metaData.rect.height; if (displayData.pivot.x != 0 || displayData.pivot.y != 0) { metaData.alignment = (int)SpriteAlignment.Custom; metaData.pivot = new Vector2((displayData.pivot.x + metaData.rect.width / 2) / metaData.rect.width, (displayData.pivot.y + metaData.rect.height / 2) / metaData.rect.height); } metaDatas.Add(metaData); sprites.Add(ShowUnitySprite(atlasMat, displayData, slot, metaData, slotData)); } } else { ShowSpriteFrame(frame, atlasMat, displayData, slot, slotData); } } else if (displayData.type == "mesh") { TextureFrame textureFrame = new TextureFrame(); if (armatureEditor.isSingleSprite) { Sprite sprite = armatureEditor.spriteKV[displayData.textureName]; textureFrame.name = displayData.textureName; textureFrame.frameSize = sprite.rect; textureFrame.rect = sprite.rect; textureFrame.atlasTextureSize = new Vector2(sprite.rect.width, sprite.rect.height); string path = AssetDatabase.GetAssetPath(sprite); string materialFolder = path.Substring(0, path.LastIndexOf("/")); materialFolder = materialFolder.Substring(0, materialFolder.LastIndexOf("/")) + "/Materials/"; if (!Directory.Exists(materialFolder)) { Directory.CreateDirectory(materialFolder); } string matPath = materialFolder + sprite.name + "_Mat.mat"; atlasMat = AssetDatabase.LoadAssetAtPath <Material>(matPath); if (!atlasMat) { atlasMat = new Material(Shader.Find("DragonBone/DragonBone Simple")); AssetDatabase.CreateAsset(atlasMat, matPath); } atlasMat.mainTexture = AssetDatabase.LoadAssetAtPath <Texture>(path); mats.Add(atlasMat); textureFrame.material = atlasMat; textureFrame.texture = atlasMat.mainTexture; tfs.Add(textureFrame); } else { foreach (TextureFrame st in frame.frames) { if (st.name.Equals(displayData.textureName)) { textureFrame = st; break; } } } if (textureFrame.rect.width > 0 && textureFrame.rect.height > 0 && atlasMat && atlasMat.mainTexture) { ShowSpriteMesh(textureFrame, atlasMat, displayData, slot, armatureEditor, slotData); ++meshSpriteCount; } } } slot.GetComponent <Slot>().displayIndex = slotData.displayIndex; } } } armature.materials = mats.ToArray(); armature.textureFrames = tfs.ToArray(); foreach (SpriteFrame sf in frameKV.Values) { GameObject.DestroyImmediate(sf.gameObject); } if (armatureEditor.useUnitySprite) { if (!armatureEditor.isSingleSprite) { if (metaDatas.Count > 0) { string textureAtlasPath = AssetDatabase.GetAssetPath(armatureEditor.altasTexture); TextureImporter textureImporter = AssetImporter.GetAtPath(textureAtlasPath) as TextureImporter; textureImporter.maxTextureSize = 2048; textureImporter.spritesheet = metaDatas.ToArray(); textureImporter.textureType = TextureImporterType.Sprite; textureImporter.spriteImportMode = SpriteImportMode.Multiple; textureImporter.spritePixelsPerUnit = 100; AssetDatabase.ImportAsset(textureAtlasPath, ImportAssetOptions.ForceUpdate); Object[] savedSprites = AssetDatabase.LoadAllAssetsAtPath(textureAtlasPath); foreach (Object obj in savedSprites) { Sprite objSprite = obj as Sprite; if (objSprite) { len = sprites.Count; for (int i = 0; i < len; ++i) { if (sprites[i].name.Equals(objSprite.name)) { sprites[i].sprite = objSprite; } } } } } } if (atlasMat != null) { if (meshSpriteCount == 0) { //can delete safely foreach (Material mat in matKV.Values) { if (!armatureEditor.spriteMeshUsedMatKV.ContainsKey(mat)) { AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(mat)); } } } else { foreach (SpriteRenderer sprite in sprites) { sprite.material = atlasMat; } } } } } }
//init public void InitShow() { ShowArmature.AddBones(this); ShowArmature.AddSlot(this); ShowArmature.ShowBones(this); ShowArmature.ShowSlots(this); ShowArmature.ShowSkins(this); ShowArmature.SetIKs(this); AnimFile.CreateAnimFile(this); DragonBoneArmature dba = _armature.GetComponent <DragonBoneArmature>(); bool canDeleteArmature = false; if (armature && (dba.updateMeshs == null || dba.updateMeshs.Length == 0) && (dba.updateFrames == null || dba.updateFrames.Length == 0)) { canDeleteArmature = true; } Renderer[] renders = _armature.GetComponentsInChildren <Renderer>(); List <SpriteMesh> sms = new List <SpriteMesh>(); foreach (Renderer r in renders) { if (!r.enabled) { r.enabled = true; r.gameObject.SetActive(false); } else if (r.GetComponent <SpriteMesh>() != null) { for (int i = 0; i < r.transform.childCount; ++i) { r.transform.GetChild(i).gameObject.SetActive(false); } sms.Add(r.GetComponent <SpriteMesh>()); canDeleteArmature = false; } else if (r.GetComponent <SpriteFrame>()) { //optimize memory SpriteFrame sf = r.GetComponent <SpriteFrame>(); TextureFrame tf = sf.frame; sf.frames = new TextureFrame[] { tf }; } } if (canDeleteArmature) { // Object.DestroyImmediate(dba);//don't destroy } else { dba.updateMeshs = sms.ToArray(); } dba.attachments = renders; dba.slots = slots.ToArray(); dba.zSpace = zoffset; dba.ResetSlotZOrder(); string path = AssetDatabase.GetAssetPath(animTextAsset); path = path.Substring(0, path.LastIndexOf('/')) + "/" + _armature.name + ".prefab"; GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject>(path); if (!prefab) { PrefabUtility.CreatePrefab(path, _armature.gameObject, ReplacePrefabOptions.ConnectToPrefab); } else { PrefabUtility.ReplacePrefab(_armature.gameObject, prefab, ReplacePrefabOptions.ConnectToPrefab); } }
//init public void InitShow() { ShowArmature.AddBones(this); ShowArmature.AddSlot(this); ShowArmature.ShowBones(this); ShowArmature.ShowSlots(this); ShowArmature.ShowSkins(this); ShowArmature.SetIKs(this); AnimFile.CreateAnimFile(this); DragonBoneArmature dba = _armature.GetComponent <DragonBoneArmature>(); //update slot display for (int s = 0; s < slots.Count; ++s) { slots[s].displayIndex = slots[s].displayIndex; } Renderer[] renders = _armature.GetComponentsInChildren <Renderer>(true); foreach (Renderer r in renders) { if (r.GetComponent <SpriteFrame>()) { //optimize memory SpriteFrame sf = r.GetComponent <SpriteFrame>(); TextureFrame tf = sf.frame; sf.frames = new TextureFrame[] { tf }; } } dba.attachments = renders; dba.slots = slots.ToArray(); dba.bones = bones.ToArray(); dba.zSpace = zoffset; dba.ResetSlotZOrder(); string path = AssetDatabase.GetAssetPath(animTextAsset); path = path.Substring(0, path.LastIndexOf('/')) + "/" + _armature.name; //create pose data PoseData poseData = ScriptableObject.CreateInstance <PoseData>(); poseData.slotDatas = new PoseData.SlotData[slots.Count]; for (int i = 0; i < slots.Count; ++i) { poseData.slotDatas[i] = new PoseData.SlotData(); poseData.slotDatas[i].color = slots[i].color; poseData.slotDatas[i].displayIndex = slots[i].displayIndex; poseData.slotDatas[i].zorder = slots[i].z; } poseData.boneDatas = new PoseData.TransformData[bones.Count]; for (int i = 0; i < bones.Count; ++i) { poseData.boneDatas[i] = new PoseData.TransformData(); poseData.boneDatas[i].x = bones[i].localPosition.x; poseData.boneDatas[i].y = bones[i].localPosition.y; poseData.boneDatas[i].sx = bones[i].localScale.x; poseData.boneDatas[i].sy = bones[i].localScale.y; poseData.boneDatas[i].rotation = bones[i].localEulerAngles.z; } poseData.displayDatas = new PoseData.DisplayData[dba.attachments.Length]; for (int i = 0; i < dba.attachments.Length; ++i) { poseData.displayDatas[i] = new PoseData.DisplayData(); Renderer render = dba.attachments[i]; SpriteFrame sf = render.GetComponent <SpriteFrame>(); if (sf) { poseData.displayDatas[i].type = PoseData.AttachmentType.IMG; poseData.displayDatas[i].color = sf.color; } else { SpriteMesh sm = render.GetComponent <SpriteMesh>(); if (sm) { poseData.displayDatas[i].type = PoseData.AttachmentType.MESH; poseData.displayDatas[i].color = sm.color; poseData.displayDatas[i].vertex = sm.vertices; } else { SpriteRenderer sr = render.GetComponent <SpriteRenderer>(); if (sr) { poseData.displayDatas[i].type = PoseData.AttachmentType.IMG; poseData.displayDatas[i].color = sr.color; } else { poseData.displayDatas[i].type = PoseData.AttachmentType.BOX; } } } poseData.displayDatas[i].transform = new PoseData.TransformData(); poseData.displayDatas[i].transform.x = render.transform.localPosition.x; poseData.displayDatas[i].transform.y = render.transform.localPosition.y; poseData.displayDatas[i].transform.sx = render.transform.localScale.x; poseData.displayDatas[i].transform.sy = render.transform.localScale.y; poseData.displayDatas[i].transform.rotation = render.transform.localEulerAngles.z; } AssetDatabase.CreateAsset(poseData, path + "_Pose.asset"); dba.poseData = poseData; string prefabPath = path + ".prefab"; GameObject prefab = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); if (!prefab) { PrefabUtility.CreatePrefab(prefabPath, _armature.gameObject, ReplacePrefabOptions.ConnectToPrefab); } else { PrefabUtility.ReplacePrefab(_armature.gameObject, prefab, ReplacePrefabOptions.ConnectToPrefab); } }
public override void OnInspectorGUI() { DragonBoneArmature armature = target as DragonBoneArmature; if (armature == null) { return; } selectedOption = EditorGUILayout.Popup("Sorting Layer", selectedOption, sortingLayerNames); if (sortingLayerNames[selectedOption] != armature.sortingLayerName) { Undo.RecordObject(armature, "Sorting Layer"); armature.sortingLayerName = sortingLayerNames[selectedOption]; EditorUtility.SetDirty(armature); } int newSortingLayerOrder = EditorGUILayout.IntField("Order in Layer", armature.sortingOrder); if (newSortingLayerOrder != armature.sortingOrder) { Undo.RecordObject(armature, "Edit Sorting Order"); armature.sortingOrder = newSortingLayerOrder; EditorUtility.SetDirty(armature); } if (GUILayout.Button("Update All Sorting Order", GUILayout.Height(20))) { foreach (Renderer render in armature.GetComponentsInChildren <Renderer>(true)) { render.sortingLayerName = armature.sortingLayerName; render.sortingOrder = armature.sortingOrder; EditorUtility.SetDirty(render); SpriteFrame sf = render.GetComponent <SpriteFrame>(); if (sf) { sf.sortingLayerName = armature.sortingLayerName; sf.sortingOrder = armature.sortingOrder; } else { SpriteMesh sm = render.GetComponent <SpriteMesh>(); if (sm) { sm.sortingLayerName = armature.sortingLayerName; sm.sortingOrder = armature.sortingOrder; } } } EditorUtility.SetDirty(armature); if (!string.IsNullOrEmpty(armature.gameObject.scene.name)) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene()); } } serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_FlipX"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_FlipY"), true); if (!Application.isPlaying) { EditorGUILayout.PropertyField(serializedObject.FindProperty("zSpace"), true); } EditorGUILayout.PropertyField(serializedObject.FindProperty("poseData"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("slots"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("bones"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("attachments"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("materials"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("textureFrames"), true); serializedObject.ApplyModifiedProperties(); if (!Application.isPlaying) { if (armature.flipX != flipX) { armature.flipX = armature.flipX; flipX = armature.flipX; if (!string.IsNullOrEmpty(armature.gameObject.scene.name)) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene()); } } if (armature.flipY != flipY) { armature.flipY = armature.flipY; flipY = armature.flipY; if (!string.IsNullOrEmpty(armature.gameObject.scene.name)) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene()); } } if (armature.zSpace != zspace) { zspace = armature.zSpace; armature.ResetSlotZOrder(); if (!string.IsNullOrEmpty(armature.gameObject.scene.name)) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene()); } } } }
public override void OnInspectorGUI() { SpriteFrame sprite = target as SpriteFrame; serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("atlasText"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("atlasMat"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("textureScale"), true); EditorGUILayout.BeginVertical(); if (sprite.frames != null && sprite.frames.Length > 0) { //显示frameName列表 string[] list = new string[sprite.frames.Length]; for (int i = 0; i < sprite.frames.Length; ++i) { list[i] = sprite.frames[i].name; } int selectIndex = EditorGUILayout.Popup("Frame", m_frameIndex, list); if (selectIndex != m_frameIndex) { m_frameIndex = selectIndex; sprite.CreateQuad(); sprite.frameName = sprite.frames[m_frameIndex].name; UpdatePivot(sprite, m_pivotIndex); } } bool create = (sprite.frames == null || sprite.frames.Length == 0); string btnString = create?"Create SpriteFrame" : "Update SpriteFrame"; if (GUILayout.Button(btnString)) { sprite.ParseAtlasText(); if (sprite.atlasText != null && sprite.atlasMat != null && sprite.atlasMat.mainTexture != null) { sprite.ParseAtlasText(); if (sprite.frames.Length > 0) { sprite.CreateQuad(); if (create) { sprite.frameName = sprite.frames[0].name; sprite.pivot = new Vector2(0.5f, 0.5f); } else { sprite.frameName = sprite.frameName; } } } } EditorGUILayout.EndVertical(); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_textureSize"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_uvOffset"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_pivot"), true); if (sprite.frames != null && !string.IsNullOrEmpty(sprite.frameName)) { // "None","CENTER","TOP","TOP_LEFT","TOP_RIGHT", // "LEFT","RIGHT","BOTTOM","BOTTOM_LEFT","BOTTOM_RIGHT" int selectPivot = EditorGUILayout.Popup("Auto Pivot", m_pivotIndex, posList); if (selectPivot != m_pivotIndex) { UpdatePivot(sprite, selectPivot); sprite.frameName = sprite.frameName; } } EditorGUILayout.PropertyField(serializedObject.FindProperty("m_color"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_brightness"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_sortingLayerName"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_soringOrder"), true); serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Sets to pose. /// </summary> public void SetToPose() { if (poseData) { for (int i = 0; i < poseData.boneDatas.Length && i < bones.Length; ++i) { Transform bone = bones[i]; if (bone) { PoseData.TransformData transData = poseData.boneDatas[i]; bone.localPosition = new Vector3(transData.x, transData.y, bone.localPosition.z); bone.localScale = new Vector3(transData.sx, transData.sy, bone.localScale.z); bone.localEulerAngles = new Vector3(bone.localEulerAngles.x, bone.localEulerAngles.y, transData.rotation); } } for (int i = 0; i < poseData.slotDatas.Length && i < slots.Length; ++i) { Slot slot = slots[i]; if (slot) { slot.color = poseData.slotDatas[i].color; slot.displayIndex = poseData.slotDatas[i].displayIndex; slot.z = poseData.slotDatas[i].zorder; } } for (int i = 0; i < poseData.displayDatas.Length && i < attachments.Length; ++i) { Renderer r = attachments[i]; if (r) { Transform trans = r.transform; PoseData.TransformData transData = poseData.displayDatas[i].transform; trans.localPosition = new Vector3(transData.x, transData.y, trans.localPosition.z); trans.localScale = new Vector3(transData.sx, transData.sy, trans.localScale.z); trans.localEulerAngles = new Vector3(trans.localEulerAngles.x, trans.localEulerAngles.y, transData.rotation); PoseData.DisplayData displayData = poseData.displayDatas[i]; switch (displayData.type) { case PoseData.AttachmentType.IMG: SpriteFrame sf = r.GetComponent <SpriteFrame>(); if (sf) { sf.color = displayData.color; } else { SpriteRenderer sr = r.GetComponent <SpriteRenderer>(); if (sr) { sr.color = displayData.color; } } break; case PoseData.AttachmentType.MESH: SpriteMesh sm = r.GetComponent <SpriteMesh>(); sm.vertices = displayData.vertex; for (int j = 0; j < sm.vertControlTrans.Length && j < sm.vertices.Length; ++j) { Transform vctr = sm.vertControlTrans[j]; if (vctr) { vctr.localPosition = sm.vertices[j]; } } break; } } } } ResetSlotZOrder(); }