private void OnEnable() { m_SpriteShapeProp = serializedObject.FindProperty("m_SpriteShape"); m_SplineDetailProp = serializedObject.FindProperty("m_SplineDetail"); m_IsOpenEndedProp = serializedObject.FindProperty("m_Spline").FindPropertyRelative("m_IsOpenEnded"); m_AdaptiveUVProp = serializedObject.FindProperty("m_AdaptiveUV"); m_ColliderAutoUpdate = serializedObject.FindProperty("m_UpdateCollider"); m_ColliderDetailProp = serializedObject.FindProperty("m_ColliderDetail"); m_ColliderOffsetProp = serializedObject.FindProperty("m_ColliderOffset"); m_ColliderCornerTypeProp = serializedObject.FindProperty("m_ColliderCornerType"); if (m_SpriteShapeController.spriteShapeRenderer) { m_MeshRendererSO = new SerializedObject(m_SpriteShapeController.spriteShapeRenderer); m_SortingLayerProp = m_MeshRendererSO.FindProperty("m_SortingLayerID"); m_SortingOrderProp = m_MeshRendererSO.FindProperty("m_SortingOrder"); } m_SplineEditor = new SplineEditor(this, m_SpriteShapeController.spriteShape); m_SplineSceneEditor = new SplineSceneEditor(m_SpriteShapeController.spline, this, m_SpriteShapeController); EditMode.onEditModeStartDelegate += OnEditModeStart; EditMode.onEditModeEndDelegate += OnEditModeEnd; }
private void SetupSpriteShapeEditor(Spline spline) { m_Spline = spline; m_SplineEditor = new SplineEditor() { //Data GetLocalPosition = i => spline.GetPosition(i), GetPosition = i => LocalToWorld(spline.GetPosition(i)), SetPosition = (i, p) => spline.SetPosition(i, WorldToLocal(p)), GetLeftTangent = i => LocalToWorld(spline.GetLeftTangent(i) + spline.GetPosition(i)) - LocalToWorld(spline.GetPosition(i)), SetLeftTangent = (i, p) => spline.SetLeftTangent(i, WorldToLocal(p + LocalToWorld(spline.GetPosition(i))) - spline.GetPosition(i)), GetRightTangent = i => LocalToWorld(spline.GetRightTangent(i) + spline.GetPosition(i)) - LocalToWorld(spline.GetPosition(i)), SetRightTangent = (i, p) => spline.SetRightTangent(i, WorldToLocal(p + LocalToWorld(spline.GetPosition(i))) - spline.GetPosition(i)), GetTangentMode = i => (SplineEditor.TangentMode)spline.GetTangentMode(i), SetTangentMode = (i, m) => spline.SetTangentMode(i, (ShapeTangentMode)m), InsertPointAt = (i, p) => spline.InsertPointAt(i, WorldToLocal(p)), RemovePointAt = i => spline.RemovePointAt(i), GetPointCount = () => spline.GetPointCount(), GetSubDivisionCount = () => GetSplineDetail(), // Transforms ScreenToWorld = (p) => ScreenToWorld(p), LocalToWorldMatrix = () => Matrix4x4.identity, WorldToScreen = (p) => HandleUtility.WorldToGUIPoint(p), GetForwardVector = () => GetTransform().forward, GetUpVector = () => GetTransform().up, GetRightVector = () => GetTransform().right, // Other GetSpriteIndex = (i) => spline.GetSpriteIndex(i), SetSpriteIndex = (s, i) => spline.SetSpriteIndex(s, i), Snap = (p) => SnapPoint(p), RegisterUndo = RegisterUndo, OpenEnded = () => spline.isOpenEnded, Repaint = () => { UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); } }; m_SplineEditor.UpdateTangentCache(); }
private void InvalidateShapeEditor() { m_SplineEditor = null; m_Spline = null; SplineEditorCache.SetTarget(null); }