void OnEndDrag() { isDragging = false; SetScaleAuto(); MeshEdit.selMesh.UpdateColliderMesh(); MeshEdit.SaveUndoState(); //transform.localRotation = Quaternion.identity; }
public void EndSelection() { if (isSelecting) { isSelecting = false; image.enabled = false; foreach (ISelectable point in MeshEdit.selMesh.GetAllPoints()) { Vector2 screenPos = Camera.main.WorldToScreenPoint(point.Pos); Rect test = CornersToRect(); if (test.Contains(screenPos)) { point.Selected = true; } } transformGizmo.SetPositionAuto(); transformGizmo.OnSelectionChange(); MeshEdit.SaveUndoState(); } }
void OnBeginDrag(Axis axis) { if (gizmoMode == GizmoMode.extrude && MeshEdit.selectionMode == 1) { MeshEdit.selMesh.BeginExtrude(MeshEdit.selMesh.selFaces); } isDragging = true; MeshEdit.OnTransformGizmoBeginDrag(); switch (axis) { case Axis.x: axisRay = new Ray(transform.position, transform.right); break; case Axis.y: axisRay = new Ray(transform.position, transform.up); break; case Axis.z: axisRay = new Ray(transform.position, transform.forward); break; case Axis.all: axisRay = new Ray(transform.position, Vector3.one); break; } if (gizmoMode != GizmoMode.rotate) { prevPos = MathX.ScreenToPointOnAxis(axisRay); } else { prevPos = GetMouseAngleFromGizmo(); } }
void WhileDragging() { if (gizmoMode != GizmoMode.rotate) { Debug.DrawRay(transform.position, axisRay.direction * 10); //Ray axisRay = new Ray(transform.position, transform.right); float newPos = MathX.ScreenToPointOnAxis(axisRay); //DebugPoint(newPos, Color.green); float posDelta = newPos - prevPos; prevPos = newPos; //Debug.Log(prevPos.ToString()); if (gizmoMode == GizmoMode.translate || gizmoMode == GizmoMode.extrude) { transform.position += axisRay.direction * posDelta; MeshEdit.OnTranslateGizmoDragged(axisRay.direction * posDelta); } else { MeshEdit.OnScaleGizmoDragged(axisRay.direction * posDelta); //transform.localScale += axisRay.direction * posDelta; } SetScaleAuto(); } else { //float newPos = GetMouseAngleFromGizmo(); float posDelta = GetMouseAngleFromGizmoRelative(); // newPos - prevPos; prevPos += posDelta; Quaternion rotAngle = Quaternion.AngleAxis(posDelta, axisRay.direction); //Euler(axisRay.direction * posDelta); MeshEdit.OnRotateGizmoDragged(rotAngle); transform.Rotate(axisRay.direction, posDelta, Space.World); } }