public override void OnInspectorGUI() { SpineSkeleton skeleton = (SpineSkeleton)target; if (GUILayout.Button("Refresh")) { if (skeleton) { skeleton.Refresh(); return; } } DrawDefaultInspector(); }
public void Refresh() { Clear(); SpineSkeleton skeleton = GetComponentInParent <SpineSkeleton>(); switch (Type) { case AttachmentType.Region: { SpriteRenderer spriteRenderer = gameObject.AddComponent <SpriteRenderer>(); spriteRenderer.sprite = Sprite; if (skeleton.SpriteMaterial != null) { spriteRenderer.sharedMaterial = skeleton.SpriteMaterial; } transform.localPosition += new Vector3(PositionOffset.x, PositionOffset.y, 0); transform.localEulerAngles = new Vector3(0, 0, RotationOffset); transform.localScale = new Vector3(100 * ScaleOffset.x, 100 * ScaleOffset.y, 1); break; } case AttachmentType.Mesh: { MeshRenderer meshRenderer = gameObject.AddComponent <MeshRenderer>(); MeshFilter meshFilter = gameObject.AddComponent <MeshFilter>(); meshFilter.sharedMesh = Mesh.Mesh; Material material = skeleton.MeshMaterial != null ? new Material(skeleton.MeshMaterial) : new Material(Shader.Find("Default/Diffuse")); material.mainTexture = Mesh.Texture; meshRenderer.sharedMaterial = material; break; } case AttachmentType.SkinnedMesh: { SkinnedMeshRenderer meshRenderer = gameObject.AddComponent <SkinnedMeshRenderer>(); Material material = skeleton.MeshMaterial != null ? new Material(skeleton.MeshMaterial) : new Material(Shader.Find("Default/Diffuse")); material.mainTexture = Mesh.Texture; meshRenderer.sharedMaterial = material; meshRenderer.bones = Mesh.Bones; meshRenderer.sharedMesh = Mesh.Mesh; break; } } }
void OnDrawGizmosSelected() { SpineSkeleton skeleton = Skeleton; if (!skeleton || !skeleton.DrawBones) { return; } Vector3 a = transform.position; Vector3 b = transform.TransformPoint(new Vector3(_length, 0, 0)); Vector3 c = transform.TransformPoint(new Vector3(0.05f * _length, 0.05f * _length, 0)); Vector3 d = transform.TransformPoint(new Vector3(0.05f * _length, -0.05f * _length, 0)); Gizmos.DrawLine(a, c); Gizmos.DrawLine(a, d); Gizmos.DrawLine(b, c); Gizmos.DrawLine(b, d); }
public static void Import() { Object file = Selection.activeObject; TextAsset text = Selection.activeObject as TextAsset; if (!text) { return; } string assetPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(file)); string prefabPath = EditorUtility.SaveFilePanel("Choose Prefab Location", assetPath, file.name, "prefab"); prefabPath = "Assets" + prefabPath.Substring(Application.dataPath.Length); string name = Path.GetFileNameWithoutExtension(prefabPath); string imagePath = assetPath + "/images/"; string dataPath = Path.GetDirectoryName(prefabPath) + "/" + name + "_data/"; if (!Directory.Exists(Application.dataPath + dataPath.Substring(6))) { AssetDatabase.CreateFolder(Path.GetDirectoryName(prefabPath), name + "_data"); } GameObject rootGo = new GameObject(file.name); Animator animator = rootGo.AddComponent <Animator>(); string animatorPath = dataPath + name + ".controller"; UnityEditorInternal.AnimatorController controller = AssetDatabase.LoadAssetAtPath(animatorPath, typeof(RuntimeAnimatorController)) as UnityEditorInternal.AnimatorController; if (!controller) { controller = UnityEditorInternal.AnimatorController.CreateAnimatorControllerAtPath(animatorPath); UnityEditorInternal.AnimatorController.SetAnimatorController(animator, controller); } UnityEditorInternal.AnimatorController.SetAnimatorController(animator, controller); SpineSkeleton skeleton = rootGo.AddComponent <SpineSkeleton>(); skeleton.ImagePath = imagePath; skeleton.DataPath = dataPath; skeleton.SourceData = text; skeleton.Refresh(); GameObject prefab = AssetDatabase.LoadAssetAtPath(prefabPath, typeof(GameObject)) as GameObject; if (prefab) { PrefabUtility.ReplacePrefab(rootGo, prefab); } else { PrefabUtility.CreatePrefab(prefabPath, rootGo); } Object.DestroyImmediate(rootGo); }