mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Merge remote-tracking branch 'origin/3.6' into 3.6
This commit is contained in:
commit
90ba0f6f78
@ -457,7 +457,7 @@ namespace Spine.Unity.Editor {
|
|||||||
static Bone extractionBone;
|
static Bone extractionBone;
|
||||||
static Slot extractionSlot;
|
static Slot extractionSlot;
|
||||||
|
|
||||||
static Bone GetExtractionBone () {
|
internal static Bone GetExtractionBone () {
|
||||||
if (extractionBone != null)
|
if (extractionBone != null)
|
||||||
return extractionBone;
|
return extractionBone;
|
||||||
|
|
||||||
@ -479,7 +479,7 @@ namespace Spine.Unity.Editor {
|
|||||||
return extractionBone;
|
return extractionBone;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Slot GetExtractionSlot () {
|
internal static Slot GetExtractionSlot () {
|
||||||
if (extractionSlot != null)
|
if (extractionSlot != null)
|
||||||
return extractionSlot;
|
return extractionSlot;
|
||||||
|
|
||||||
@ -491,11 +491,14 @@ namespace Spine.Unity.Editor {
|
|||||||
return extractionSlot;
|
return extractionSlot;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Mesh ExtractRegionAttachment (string name, RegionAttachment attachment, Mesh mesh = null) {
|
internal static Mesh ExtractRegionAttachment (string name, RegionAttachment attachment, Mesh mesh = null, bool centered = true) {
|
||||||
var bone = GetExtractionBone();
|
var bone = GetExtractionBone();
|
||||||
|
|
||||||
bone.X = -attachment.X;
|
if (centered) {
|
||||||
bone.Y = -attachment.Y;
|
bone.X = -attachment.X;
|
||||||
|
bone.Y = -attachment.Y;
|
||||||
|
}
|
||||||
|
|
||||||
bone.UpdateWorldTransform();
|
bone.UpdateWorldTransform();
|
||||||
|
|
||||||
Vector2[] uvs = ExtractUV(attachment.UVs);
|
Vector2[] uvs = ExtractUV(attachment.UVs);
|
||||||
@ -504,12 +507,13 @@ namespace Spine.Unity.Editor {
|
|||||||
Vector3[] verts = ExtractVerts(floatVerts);
|
Vector3[] verts = ExtractVerts(floatVerts);
|
||||||
|
|
||||||
//unrotate verts now that they're centered
|
//unrotate verts now that they're centered
|
||||||
for (int i = 0; i < verts.Length; i++) {
|
if (centered) {
|
||||||
verts[i] = Quaternion.Euler(0, 0, -attachment.Rotation) * verts[i];
|
for (int i = 0; i < verts.Length; i++)
|
||||||
|
verts[i] = Quaternion.Euler(0, 0, -attachment.Rotation) * verts[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] triangles = new int[6] { 1, 3, 0, 2, 3, 1 };
|
int[] triangles = { 1, 3, 0, 2, 3, 1 };
|
||||||
Color color = new Color(attachment.R, attachment.G, attachment.B, attachment.A);
|
Color color = attachment.GetColor();
|
||||||
|
|
||||||
if (mesh == null)
|
if (mesh == null)
|
||||||
mesh = new Mesh();
|
mesh = new Mesh();
|
||||||
@ -519,7 +523,7 @@ namespace Spine.Unity.Editor {
|
|||||||
mesh.vertices = verts;
|
mesh.vertices = verts;
|
||||||
mesh.uv = uvs;
|
mesh.uv = uvs;
|
||||||
mesh.triangles = triangles;
|
mesh.triangles = triangles;
|
||||||
mesh.colors = new Color[] { color, color, color, color };
|
mesh.colors = new [] { color, color, color, color };
|
||||||
mesh.RecalculateBounds();
|
mesh.RecalculateBounds();
|
||||||
mesh.RecalculateNormals();
|
mesh.RecalculateNormals();
|
||||||
mesh.name = name;
|
mesh.name = name;
|
||||||
@ -527,7 +531,7 @@ namespace Spine.Unity.Editor {
|
|||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Mesh ExtractMeshAttachment (string name, MeshAttachment attachment, Mesh mesh = null) {
|
internal static Mesh ExtractMeshAttachment (string name, MeshAttachment attachment, Mesh mesh = null) {
|
||||||
var slot = GetExtractionSlot();
|
var slot = GetExtractionSlot();
|
||||||
|
|
||||||
slot.Bone.X = 0;
|
slot.Bone.X = 0;
|
||||||
@ -592,7 +596,7 @@ namespace Spine.Unity.Editor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Mesh ExtractWeightedMeshAttachment (string name, MeshAttachment attachment, int slotIndex, SkeletonData skeletonData, List<Transform> boneList, Mesh mesh = null) {
|
internal static Mesh ExtractWeightedMeshAttachment (string name, MeshAttachment attachment, int slotIndex, SkeletonData skeletonData, List<Transform> boneList, Mesh mesh = null) {
|
||||||
if (attachment.Bones == null)
|
if (attachment.Bones == null)
|
||||||
throw new System.ArgumentException("Mesh is not weighted.", "attachment");
|
throw new System.ArgumentException("Mesh is not weighted.", "attachment");
|
||||||
|
|
||||||
@ -708,7 +712,7 @@ namespace Spine.Unity.Editor {
|
|||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Vector2[] ExtractUV (float[] floats) {
|
internal static Vector2[] ExtractUV (float[] floats) {
|
||||||
Vector2[] arr = new Vector2[floats.Length / 2];
|
Vector2[] arr = new Vector2[floats.Length / 2];
|
||||||
|
|
||||||
for (int i = 0; i < floats.Length; i += 2) {
|
for (int i = 0; i < floats.Length; i += 2) {
|
||||||
@ -718,7 +722,7 @@ namespace Spine.Unity.Editor {
|
|||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Vector3[] ExtractVerts (float[] floats) {
|
internal static Vector3[] ExtractVerts (float[] floats) {
|
||||||
Vector3[] arr = new Vector3[floats.Length / 2];
|
Vector3[] arr = new Vector3[floats.Length / 2];
|
||||||
|
|
||||||
for (int i = 0; i < floats.Length; i += 2) {
|
for (int i = 0; i < floats.Length; i += 2) {
|
||||||
|
|||||||
@ -52,7 +52,7 @@ Shader "Spine/Skeleton Tint" {
|
|||||||
|
|
||||||
float4 frag (VertexOutput i) : COLOR {
|
float4 frag (VertexOutput i) : COLOR {
|
||||||
float4 texColor = tex2D(_MainTex, i.uv);
|
float4 texColor = tex2D(_MainTex, i.uv);
|
||||||
return (texColor * i.vertexColor) + float4(((1-texColor.rgb) * texColor.a * _Black.rgb), 0);
|
return (texColor * i.vertexColor) + float4(((1-texColor.rgb) * _Black.rgb * texColor.a*_Color.a*i.vertexColor.a), 0);
|
||||||
}
|
}
|
||||||
ENDCG
|
ENDCG
|
||||||
}
|
}
|
||||||
|
|||||||
@ -110,7 +110,7 @@ Shader "Spine/SkeletonGraphic Tint Black (Premultiply Alpha)"
|
|||||||
clip (texColor.a - 0.001);
|
clip (texColor.a - 0.001);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return (texColor * IN.color) + float4(((1-texColor.rgb) * texColor.a * (_Black.rgb + float3(IN.uv1.r, IN.uv1.g, IN.uv2.r))), 0);
|
return (texColor * IN.color) + float4(((1-texColor.rgb) * (_Black.rgb + float3(IN.uv1.r, IN.uv1.g, IN.uv2.r)) * texColor.a*_Color.a*i.vertexColor.a), 0);
|
||||||
}
|
}
|
||||||
ENDCG
|
ENDCG
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,7 +61,7 @@ Shader "Spine/Skeleton Tint Black" {
|
|||||||
|
|
||||||
float4 frag (VertexOutput i) : COLOR {
|
float4 frag (VertexOutput i) : COLOR {
|
||||||
float4 texColor = tex2D(_MainTex, i.uv);
|
float4 texColor = tex2D(_MainTex, i.uv);
|
||||||
return (texColor * i.vertexColor) + float4(((1-texColor.rgb) * texColor.a * (_Black.rgb + float3(i.uv1.r, i.uv1.g, i.uv2.r))), 0);
|
return (texColor * i.vertexColor) + float4(((1-texColor.rgb) * (_Black.rgb + float3(i.uv1.r, i.uv1.g, i.uv2.r)) * texColor.a*_Color.a*i.vertexColor.a), 0);
|
||||||
}
|
}
|
||||||
ENDCG
|
ENDCG
|
||||||
}
|
}
|
||||||
|
|||||||
@ -144,6 +144,12 @@ namespace Spine.Unity {
|
|||||||
return new Quaternion(0, 0, Mathf.Sin(halfRotation), Mathf.Cos(halfRotation));
|
return new Quaternion(0, 0, Mathf.Sin(halfRotation), Mathf.Cos(halfRotation));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Gets a bone-local space UnityEngine.Quaternion representation of bone.rotation.</summary>
|
||||||
|
public static Quaternion GetLocalQuaternion (this Bone bone) {
|
||||||
|
var halfRotation = bone.rotation * Mathf.Deg2Rad * 0.5f;
|
||||||
|
return new Quaternion(0, 0, Mathf.Sin(halfRotation), Mathf.Cos(halfRotation));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Gets the PointAttachment's Unity World position using its Spine GameObject Transform.</summary>
|
/// <summary>Gets the PointAttachment's Unity World position using its Spine GameObject Transform.</summary>
|
||||||
public static Vector3 GetWorldPosition (this PointAttachment attachment, Slot slot, Transform spineGameObjectTransform) {
|
public static Vector3 GetWorldPosition (this PointAttachment attachment, Slot slot, Transform spineGameObjectTransform) {
|
||||||
Vector3 skeletonSpacePosition;
|
Vector3 skeletonSpacePosition;
|
||||||
@ -288,6 +294,10 @@ namespace Spine {
|
|||||||
return va.bones != null && va.bones.Length > 0;
|
return va.bones != null && va.bones.Length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool IsRenderable (this Attachment a) {
|
||||||
|
return a is RegionAttachment || a is MeshAttachment;
|
||||||
|
}
|
||||||
|
|
||||||
#region Transform Modes
|
#region Transform Modes
|
||||||
public static bool InheritsRotation (this TransformMode mode) {
|
public static bool InheritsRotation (this TransformMode mode) {
|
||||||
const int RotationBit = 0;
|
const int RotationBit = 0;
|
||||||
|
|||||||
@ -213,7 +213,7 @@ namespace Spine.Unity {
|
|||||||
for (int i = 0; i < separatorSlotNames.Length; i++)
|
for (int i = 0; i < separatorSlotNames.Length; i++)
|
||||||
separatorSlots.Add(skeleton.FindSlot(separatorSlotNames[i]));
|
separatorSlots.Add(skeleton.FindSlot(separatorSlotNames[i]));
|
||||||
|
|
||||||
LateUpdate();
|
LateUpdate(); // Generate mesh for the first frame it exists.
|
||||||
|
|
||||||
if (OnRebuild != null)
|
if (OnRebuild != null)
|
||||||
OnRebuild(this);
|
OnRebuild(this);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user