private void Update() { if (InputManager.instance.touchDown) { Ray ray = Camera.main.ScreenPointToRay(InputManager.instance.position); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, GizmoControl.GIZMO_LAYER_MASK, QueryTriggerInteraction.Collide)) { storedGizmoObj = hit.collider.gameObject; storedPosition = storedGizmoObj.transform.position; storedInversePosition = transform.position - (storedPosition - transform.position); storedMode = BBUtils.FindModeFromObj(objModeMapping, hit.collider.gameObject); BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out storedProjectedPosition, transform); storedMat = storedGizmoObj.GetComponent <Renderer>().material; storedGizmoObj.GetComponent <Renderer>().material = selectedMat; scaling = true; } } else if (InputManager.instance.touching && scaling) { Vector3 targetProjectedPosition; bool success = BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out targetProjectedPosition, transform); if (success) { Vector3 newPosition = storedPosition + (targetProjectedPosition - storedProjectedPosition); if ((newPosition - storedPosition).sqrMagnitude > GizmoControl.MAX_DISTANCE * GizmoControl.MAX_DISTANCE) { newPosition = storedPosition + (newPosition - storedPosition).normalized * GizmoControl.MAX_DISTANCE; } transform.position = (newPosition + storedInversePosition) / 2; linkedObj.transform.position = transform.position; float extent = Vector3.Distance(newPosition, storedInversePosition); Vector3 currentScale = linkedObj.transform.localScale; switch (storedMode) { case Mode.X: linkedObj.transform.localScale = new Vector3(extent, currentScale.y, currentScale.z); break; case Mode.Y: linkedObj.transform.localScale = new Vector3(currentScale.x, extent, currentScale.z); break; case Mode.Z: linkedObj.transform.localScale = new Vector3(currentScale.x, currentScale.y, extent); break; } SetGizmoLocations(); } } else if (InputManager.instance.touchUp && scaling) { storedMode = Mode.NONE; storedGizmoObj.GetComponent <Renderer>().material = storedMat; storedGizmoObj = null; storedMat = null; scaling = false; } ResizeGizmo(); }
void Update() { if (InputManager.instance.touchDown) { Ray ray = Camera.main.ScreenPointToRay(InputManager.instance.position); RaycastHit[] hits; hits = Physics.RaycastAll(ray, Mathf.Infinity, GizmoControl.GIZMO_LAYER_MASK, QueryTriggerInteraction.Collide); foreach (RaycastHit hit in hits) { Mode mode = BBUtils.FindModeFromObj(objModeMapping, hit.collider.gameObject); if (mode == Mode.X || mode == Mode.Y || mode == Mode.Z) { storedMode = mode; storedGizmoObj = hit.collider.gameObject; break; } else if (mode != Mode.NONE) { storedMode = mode; storedGizmoObj = hit.collider.gameObject; } } if (storedMode != Mode.NONE) { storedPosition = transform.position; BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out storedProjectedPosition, transform); storedMat = BBUtils.ChangeSiblingMaterial(storedGizmoObj, selectedMat); moving = true; } } else if (InputManager.instance.touching && moving) { Vector3 targetProjectedPosition; bool success = BBUtils.GetProjectedPosition(InputManager.instance.position, transform.position, storedMode, out targetProjectedPosition, transform); if (success) { Vector3 newPosition = storedPosition + (targetProjectedPosition - storedProjectedPosition); if ((newPosition - storedPosition).sqrMagnitude <= GizmoControl.MAX_DISTANCE * GizmoControl.MAX_DISTANCE) { transform.position = newPosition; } else { transform.position = storedPosition + (newPosition - storedPosition).normalized * GizmoControl.MAX_DISTANCE; } } } else if (InputManager.instance.touchUp && moving) { storedMode = Mode.NONE; BBUtils.ChangeSiblingMaterial(storedGizmoObj, storedMat); storedGizmoObj = null; moving = false; } if (linkedObj != null) { linkedObj.transform.position = transform.position; } ResizeGizmo(); }