void OnDrawGizmos() { if (m_Animations == null || m_CurrentAnimation >= m_Animations.Length || m_Animations[m_CurrentAnimation].frameData == null || m_CurrentFrame >= m_Animations[m_CurrentAnimation].frameData.Length) { return; } var framedata = m_Animations[m_CurrentAnimation].frameData[m_CurrentFrame]; var collider = framedata.collider; for (int i = 0; i < collider.Length; i++) { var color = HitboxSettings.COLOR(collider[i].type); color.a = 0.75f; Gizmos.color = color; Rect rect = new Rect((collider[i].rect.x) * m_UPP, (collider[i].rect.y) * m_UPP, collider[i].rect.width * m_UPP, collider[i].rect.height * m_UPP); if (m_Renderer != null && m_Renderer.flipX) { rect.x *= -1; rect.width *= -1; } Gizmos.DrawCube(new Vector3(transform.position.x + rect.x, transform.position.y + rect.y, transform.position.z), new Vector3(rect.width * m_Scale.x, rect.height * m_Scale.y, 1)); } }
void RefreshTypes() { var typeLabels = Enum.GetNames(typeof(HitboxType)); var typeValues = Enum.GetValues(typeof(HitboxType)); m_TypeEntries = new List <TypeEntry>(); for (int i = 0; i < typeLabels.Length; i++) { m_TypeEntries.Add(new TypeEntry { Label = typeLabels[i], Color = HitboxSettings.COLOR((HitboxType)typeValues.GetValue(i)), Value = (int)typeValues.GetValue(i) }); } }
/// <summary> /// コライダー描画 /// </summary> /// <param name="pos"></param> /// <param name="pivot"></param> /// <param name="pan"></param> /// <param name="mouse"></param> /// <param name="scale"></param> public void DrawColliderRects(Vector2 pos, Vector2 pivot, Vector2 mouse, float scale) { UpdateSerializedObject(); if (Animations == null || SelectedAnimation >= Animations.Length || Animations[SelectedAnimation].frameData == null || SelectedFrame >= Animations[SelectedAnimation].frameData.Length) { return; } var framedata = Animations[SelectedAnimation].frameData[SelectedFrame]; var colliderArray = framedata.collider; var eventType = Event.current.type; var eventButton = Event.current.button; m_EditorScale = scale; m_PreviewOrigin = pos; for (int i = 0; i < colliderArray.Length; i++) { var collider = colliderArray[i]; var color = HitboxSettings.COLOR(collider.type); color.a = 0.75f; collider.rect.x *= (int)scale; collider.rect.y *= (int)scale; collider.rect.width *= (int)scale; collider.rect.height *= (int)scale; Rect rect = new Rect(collider.rect.x - collider.rect.width / 2, collider.rect.y + collider.rect.height / 2, collider.rect.width, collider.rect.height); if (m_Renderer != null && m_Renderer.flipX) { rect.x *= -1; rect.width *= -1; } var cRect = new Rect(pos.x + (rect.x), pos.y - (rect.y), rect.width, rect.height); if (i != SelectedCollider) { if (m_MouseOverHandle == null && m_ActiveHandle == null && cRect.Contains(mouse)) { color.a = 0.5f; if (eventType == EventType.MouseDown) { if (eventButton < 2) { SelectedCollider = i; } if (eventButton == 1) { CreateColliderEditMenu(mouse); } else if (eventButton == 0) { m_isEditorMenuOpen = false; } return; } } else { color.a = 0.25f; } } if (eventType == EventType.Repaint) { EditorGUI.DrawRect(cRect, color); } //If we are editing this collider we need to display the editor doo dads if (SelectedCollider == i) { m_MouseOverHandle = null; if (m_ColliderDragHandle[0].Draw(new Vector2(cRect.x, cRect.y), mouse, MouseCursor.ResizeUpLeft)) { m_MouseOverHandle = m_ColliderDragHandle[0]; } if (m_ColliderDragHandle[1].Draw(new Vector2(cRect.x + cRect.width / 2f, cRect.y), mouse, MouseCursor.ResizeVertical)) { m_MouseOverHandle = m_ColliderDragHandle[1]; } if (m_ColliderDragHandle[2].Draw(new Vector2(cRect.x + cRect.width, cRect.y), mouse, MouseCursor.ResizeUpRight)) { m_MouseOverHandle = m_ColliderDragHandle[2]; } if (m_ColliderDragHandle[3].Draw(new Vector2(cRect.x + cRect.width, cRect.y + cRect.height / 2f), mouse, MouseCursor.ResizeHorizontal)) { m_MouseOverHandle = m_ColliderDragHandle[3]; } if (m_ColliderDragHandle[4].Draw(new Vector2(cRect.x + cRect.width, cRect.y + cRect.height), mouse, MouseCursor.ResizeUpLeft)) { m_MouseOverHandle = m_ColliderDragHandle[4]; } if (m_ColliderDragHandle[5].Draw(new Vector2(cRect.x + cRect.width / 2f, cRect.y + cRect.height), mouse, MouseCursor.ResizeVertical)) { m_MouseOverHandle = m_ColliderDragHandle[5]; } if (m_ColliderDragHandle[6].Draw(new Vector2(cRect.x, cRect.y + cRect.height), mouse, MouseCursor.ResizeUpRight)) { m_MouseOverHandle = m_ColliderDragHandle[6]; } if (m_ColliderDragHandle[7].Draw(new Vector2(cRect.x, cRect.y + cRect.height / 2f), mouse, MouseCursor.ResizeHorizontal)) { m_MouseOverHandle = m_ColliderDragHandle[7]; } if (m_ColliderDragHandle[8].Draw(new Vector2(cRect.x + cRect.width / 2f, cRect.y + cRect.height / 2f), mouse, MouseCursor.Pan)) { m_MouseOverHandle = m_ColliderDragHandle[8]; } if (eventType == EventType.Repaint) { LabelDrawer.DrawLabel(collider.type.ToString(), new Vector2(cRect.x + 4, cRect.y + 4)); LabelDrawer.DrawLabel("X: " + colliderArray[i].rect.x, new Vector2(cRect.x + 4, cRect.y + 22), 10); LabelDrawer.DrawLabel("Y: " + colliderArray[i].rect.y, new Vector2(cRect.x + 4, cRect.y + 34), 10); LabelDrawer.DrawLabel("W: " + colliderArray[i].rect.width, new Vector2(cRect.x + 4, cRect.y + 46), 10); LabelDrawer.DrawLabel("H: " + colliderArray[i].rect.height, new Vector2(cRect.x + 4, cRect.y + 58), 10); } if (eventType == EventType.MouseDown) { if (m_MouseOverHandle != null && eventButton == 0) { m_ActiveHandle = m_MouseOverHandle; } else if (m_isEditorMenuOpen == false && eventButton == 1 && cRect.Contains(mouse)) { CreateColliderEditMenu(mouse); } } else if (eventType == EventType.MouseUp && eventButton == 0) { m_ActiveHandle = null; } else if (eventType == EventType.MouseDrag && m_ActiveHandle != null) { var delta = m_ActiveHandle.GetDragRect(mouse) / scale; colliderArray[SelectedCollider].rect.x += Mathf.RoundToInt(delta.x); colliderArray[SelectedCollider].rect.y += Mathf.RoundToInt(delta.y); colliderArray[SelectedCollider].rect.width += Mathf.RoundToInt(delta.z); colliderArray[SelectedCollider].rect.height += Mathf.RoundToInt(delta.w); } } } if (m_isEditorMenuOpen == false && eventType == EventType.MouseDown && eventButton == 1) { CreateEditMenu(mouse); } ApplySerializedProperties(); }