mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 22:34:53 +08:00
[unity] Updated editors. (undo, sceneview, context menus)
This commit is contained in:
parent
1ad7ffc850
commit
a6d9915c95
@ -51,6 +51,51 @@ namespace Spine.Unity.Editor {
|
||||
targetBoneFollower.SkeletonRenderer.Initialize(false);
|
||||
}
|
||||
|
||||
public void OnSceneGUI () {
|
||||
if (targetBoneFollower == null) return;
|
||||
var skeletonRendererComponent = targetBoneFollower.skeletonRenderer;
|
||||
if (skeletonRendererComponent == null) return;
|
||||
|
||||
var transform = skeletonRendererComponent.transform;
|
||||
var skeleton = skeletonRendererComponent.skeleton;
|
||||
|
||||
if (string.IsNullOrEmpty(targetBoneFollower.boneName)) {
|
||||
SpineHandles.DrawBones(transform, skeleton);
|
||||
SpineHandles.DrawBoneNames(transform, skeleton);
|
||||
Handles.Label(targetBoneFollower.transform.position, "No bone selected", EditorStyles.helpBox);
|
||||
} else {
|
||||
var targetBone = targetBoneFollower.bone;
|
||||
if (targetBone == null) return;
|
||||
SpineHandles.DrawBoneWireframe(transform, targetBone, SpineHandles.TransformContraintColor);
|
||||
Handles.Label(targetBone.GetWorldPosition(transform), targetBone.Data.Name, SpineHandles.BoneNameStyle);
|
||||
}
|
||||
}
|
||||
|
||||
#region Context Menu Item
|
||||
[MenuItem ("CONTEXT/SkeletonRenderer/Add BoneFollower GameObject")]
|
||||
static void AddBoneFollowerGameObject (MenuCommand cmd) {
|
||||
var skeletonRenderer = cmd.context as SkeletonRenderer;
|
||||
var go = new GameObject("BoneFollower");
|
||||
var t = go.transform;
|
||||
t.SetParent(skeletonRenderer.transform);
|
||||
t.localPosition = Vector3.zero;
|
||||
|
||||
var f = go.AddComponent<BoneFollower>();
|
||||
f.skeletonRenderer = skeletonRenderer;
|
||||
|
||||
EditorGUIUtility.PingObject(t);
|
||||
|
||||
Undo.RegisterCreatedObjectUndo(go, "Add BoneFollower");
|
||||
}
|
||||
|
||||
// Validate
|
||||
[MenuItem ("CONTEXT/SkeletonRenderer/Add BoneFollower GameObject", true)]
|
||||
static bool ValidateAddBoneFollowerGameObject (MenuCommand cmd) {
|
||||
var skeletonRenderer = cmd.context as SkeletonRenderer;
|
||||
return skeletonRenderer.valid;
|
||||
}
|
||||
#endregion
|
||||
|
||||
override public void OnInspectorGUI () {
|
||||
if (needsReset) {
|
||||
targetBoneFollower.Initialize();
|
||||
|
||||
@ -531,7 +531,7 @@ namespace Spine.Unity.Editor {
|
||||
bool abortSkeletonImport = false;
|
||||
foreach (string sp in skeletonPaths) {
|
||||
if (!reimport && CheckForValidSkeletonData(sp)) {
|
||||
ClearExistingSkeletonData(sp);
|
||||
ReloadSkeletonData(sp);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -596,7 +596,7 @@ namespace Spine.Unity.Editor {
|
||||
// Any post processing of images
|
||||
}
|
||||
|
||||
static void ClearExistingSkeletonData (string skeletonJSONPath) {
|
||||
static void ReloadSkeletonData (string skeletonJSONPath) {
|
||||
string dir = Path.GetDirectoryName(skeletonJSONPath);
|
||||
TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset));
|
||||
DirectoryInfo dirInfo = new DirectoryInfo(dir);
|
||||
@ -611,6 +611,7 @@ namespace Spine.Unity.Editor {
|
||||
if (Selection.activeObject == skeletonDataAsset)
|
||||
Selection.activeObject = null;
|
||||
|
||||
Debug.LogFormat("Changes to '{0}' detected. Clearing SkeletonDataAsset: {1}", skeletonJSONPath, localPath);
|
||||
skeletonDataAsset.Clear();
|
||||
|
||||
string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(skeletonDataAsset));
|
||||
@ -643,9 +644,8 @@ namespace Spine.Unity.Editor {
|
||||
// if (currentHash == null || lastHash != currentHash)
|
||||
// Do any upkeep on synchronized assets
|
||||
|
||||
if (currentHash != null) {
|
||||
if (currentHash != null)
|
||||
EditorPrefs.SetString(guid + "_hash", currentHash);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1399,17 +1399,18 @@ namespace Spine.Unity.Editor {
|
||||
public static Color TransformContraintColor { get { return new Color(170/255f, 226/255f, 35/255f); } }
|
||||
public static Color IkColor { get { return new Color(228/255f,90/255f,43/255f); } }
|
||||
|
||||
static Vector3[] _boneMeshVerts = {
|
||||
new Vector3(0, 0, 0),
|
||||
new Vector3(0.1f, 0.1f, 0),
|
||||
new Vector3(1, 0, 0),
|
||||
new Vector3(0.1f, -0.1f, 0)
|
||||
};
|
||||
static Mesh _boneMesh;
|
||||
public static Mesh BoneMesh {
|
||||
get {
|
||||
if (_boneMesh == null) {
|
||||
_boneMesh = new Mesh {
|
||||
vertices = new [] {
|
||||
new Vector3(0, 0, 0),
|
||||
new Vector3(0.1f, 0.1f, 0),
|
||||
new Vector3(1, 0, 0),
|
||||
new Vector3(0.1f, -0.1f, 0)
|
||||
},
|
||||
vertices = _boneMeshVerts,
|
||||
uv = new Vector2[4],
|
||||
triangles = new [] { 0, 1, 2, 2, 3, 0 }
|
||||
};
|
||||
@ -1506,6 +1507,34 @@ namespace Spine.Unity.Editor {
|
||||
}
|
||||
}
|
||||
|
||||
static Vector3[] _boneWireBuffer = new Vector3[5];
|
||||
static Vector3[] GetBoneWireBuffer (Matrix4x4 m) {
|
||||
for (int i = 0, n = _boneMeshVerts.Length; i < n; i++)
|
||||
_boneWireBuffer[i] = m.MultiplyPoint(_boneMeshVerts[i]);
|
||||
|
||||
_boneWireBuffer[4] = _boneWireBuffer[0]; // closed polygon.
|
||||
return _boneWireBuffer;
|
||||
}
|
||||
public static void DrawBoneWireframe (Transform transform, Bone b, Color color) {
|
||||
Handles.color = color;
|
||||
var pos = new Vector3(b.WorldX, b.WorldY, 0);
|
||||
float length = b.Data.Length;
|
||||
|
||||
if (length > 0) {
|
||||
Quaternion rot = Quaternion.Euler(0, 0, b.WorldRotationX);
|
||||
Vector3 scale = Vector3.one * length * b.WorldScaleX;
|
||||
const float my = 1.5f;
|
||||
scale.y *= (SpineHandles.handleScale + 1f) * 0.5f;
|
||||
scale.y = Mathf.Clamp(scale.x, -my, my);
|
||||
Handles.DrawPolyLine(GetBoneWireBuffer(transform.localToWorldMatrix * Matrix4x4.TRS(pos, rot, scale)));
|
||||
var wp = transform.TransformPoint(pos);
|
||||
DrawBoneCircle(wp, color, transform.forward);
|
||||
} else {
|
||||
var wp = transform.TransformPoint(pos);
|
||||
DrawBoneCircle(wp, color, transform.forward);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DrawBone (Transform transform, Bone b, float boneScale) {
|
||||
var pos = new Vector3(b.WorldX, b.WorldY, 0);
|
||||
float length = b.Data.Length;
|
||||
|
||||
@ -175,11 +175,12 @@ namespace Spine.Unity.Editor {
|
||||
#region Menus
|
||||
[MenuItem("CONTEXT/SkeletonRenderer/Add BoundingBoxFollower GameObject")]
|
||||
static void AddBoundingBoxFollowerChild (MenuCommand command) {
|
||||
AddBoundingBoxFollowerChild((SkeletonRenderer)command.context);
|
||||
var go = AddBoundingBoxFollowerChild((SkeletonRenderer)command.context);
|
||||
Undo.RegisterCreatedObjectUndo(go, "Add BoundingBoxFollower");
|
||||
}
|
||||
#endregion
|
||||
|
||||
static void AddBoundingBoxFollowerChild (SkeletonRenderer sr, BoundingBoxFollower original = null) {
|
||||
static GameObject AddBoundingBoxFollowerChild (SkeletonRenderer sr, BoundingBoxFollower original = null) {
|
||||
var go = new GameObject("BoundingBoxFollower");
|
||||
go.transform.SetParent(sr.transform, false);
|
||||
var newFollower = go.AddComponent<BoundingBoxFollower>();
|
||||
@ -196,6 +197,7 @@ namespace Spine.Unity.Editor {
|
||||
|
||||
Selection.activeGameObject = go;
|
||||
EditorGUIUtility.PingObject(go);
|
||||
return go;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -266,7 +266,9 @@ namespace Spine.Unity.Modules {
|
||||
[MenuItem ("CONTEXT/SkeletonRenderer/Add Skeleton Render Separator")]
|
||||
static void AddRenderSeparatorComponent (MenuCommand cmd) {
|
||||
var skeletonRenderer = cmd.context as SkeletonRenderer;
|
||||
skeletonRenderer.gameObject.AddComponent<SkeletonRenderSeparator>();
|
||||
var newComponent = skeletonRenderer.gameObject.AddComponent<SkeletonRenderSeparator>();
|
||||
|
||||
Undo.RegisterCreatedObjectUndo(newComponent, "Add SkeletonRenderSeparator");
|
||||
}
|
||||
|
||||
// Validate
|
||||
|
||||
@ -233,7 +233,6 @@ namespace Spine.Unity.Editor {
|
||||
menu.AddItem(new GUIContent(bones.Items[i].Data.Name), bones.Items[i].Data.Name == current, callback, bones.Items[i]);
|
||||
|
||||
menu.ShowAsContext();
|
||||
|
||||
}
|
||||
|
||||
void TargetBoneSelected (object obj) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user