暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

SpriteMeshData.cs 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using System;
  2. using System.Collections.Generic;
  3. using Unity.Collections;
  4. using Unity.Mathematics;
  5. using UnityEngine;
  6. using UnityEngine.U2D.Animation;
  7. namespace UnityEditor.U2D.Animation
  8. {
  9. [Serializable]
  10. internal class SpriteBoneData
  11. {
  12. public int parentId = -1;
  13. public Vector2 localPosition;
  14. public Quaternion localRotation = Quaternion.identity;
  15. public Vector2 position;
  16. public Vector2 endPosition;
  17. public float depth;
  18. public float length;
  19. }
  20. [Serializable]
  21. internal abstract class BaseSpriteMeshData
  22. {
  23. [SerializeField]
  24. Vector2[] m_Vertices = new Vector2[0];
  25. [SerializeField]
  26. EditableBoneWeight[] m_VertexWeights = new EditableBoneWeight[0];
  27. [SerializeField]
  28. int[] m_Indices = new int[0];
  29. [SerializeField]
  30. int2[] m_Edges = new int2[0];
  31. [SerializeField]
  32. int2[] m_OutlineEdges = new int2[0];
  33. public abstract Rect frame { get; }
  34. public Vector2[] vertices => m_Vertices;
  35. public EditableBoneWeight[] vertexWeights => m_VertexWeights;
  36. public int[] indices => m_Indices;
  37. public int2[] edges => m_Edges;
  38. public int2[] outlineEdges => m_OutlineEdges;
  39. public int vertexCount => m_Vertices.Length;
  40. public virtual int boneCount => 0;
  41. public virtual string spriteName => "";
  42. public void SetIndices(int[] newIndices)
  43. {
  44. m_Indices = newIndices;
  45. UpdateOutlineEdges();
  46. }
  47. void UpdateOutlineEdges()
  48. {
  49. m_OutlineEdges = MeshUtilities.GetOutlineEdges(m_Indices);
  50. }
  51. public void SetEdges(int2[] newEdges)
  52. {
  53. m_Edges = newEdges;
  54. }
  55. public void SetVertices(Vector2[] newVertices, EditableBoneWeight[] newWeights)
  56. {
  57. m_Vertices = newVertices;
  58. m_VertexWeights = newWeights;
  59. }
  60. public void AddVertex(Vector2 position, BoneWeight weight)
  61. {
  62. var listOfVertices = new List<Vector2>(m_Vertices);
  63. listOfVertices.Add(position);
  64. m_Vertices = listOfVertices.ToArray();
  65. var listOfWeights = new List<EditableBoneWeight>(m_VertexWeights);
  66. listOfWeights.Add(EditableBoneWeightUtility.CreateFromBoneWeight(weight));
  67. m_VertexWeights = listOfWeights.ToArray();
  68. }
  69. public void RemoveVertex(int index)
  70. {
  71. var listOfVertices = new List<Vector2>(m_Vertices);
  72. listOfVertices.RemoveAt(index);
  73. m_Vertices = listOfVertices.ToArray();
  74. var listOfWeights = new List<EditableBoneWeight>(m_VertexWeights);
  75. listOfWeights.RemoveAt(index);
  76. m_VertexWeights = listOfWeights.ToArray();
  77. }
  78. public abstract SpriteBoneData GetBoneData(int index);
  79. public abstract float GetBoneDepth(int index);
  80. public void Clear()
  81. {
  82. m_Indices = new int[0];
  83. m_Vertices = new Vector2[0];
  84. m_VertexWeights = new EditableBoneWeight[0];
  85. m_Edges = new int2[0];
  86. m_OutlineEdges = new int2[0];
  87. }
  88. }
  89. [Serializable]
  90. internal class SpriteMeshData : BaseSpriteMeshData
  91. {
  92. [SerializeField]
  93. List<SpriteBoneData> m_Bones = new List<SpriteBoneData>();
  94. [SerializeField]
  95. Rect m_Frame;
  96. public override Rect frame => m_Frame;
  97. public override int boneCount => m_Bones.Count;
  98. public List<SpriteBoneData> bones
  99. {
  100. get => m_Bones;
  101. set => m_Bones = value;
  102. }
  103. public override SpriteBoneData GetBoneData(int index)
  104. {
  105. return m_Bones[index];
  106. }
  107. public override float GetBoneDepth(int index)
  108. {
  109. return m_Bones[index].depth;
  110. }
  111. public void SetFrame(Rect newFrame)
  112. {
  113. m_Frame = newFrame;
  114. }
  115. }
  116. }