void LateUpdate() { if (target == null) { return; } Vector3 pos = new Vector3(target.position.x, target.position.y + cam.yTargetOffset, target.position.z); //Update position if (trackPlayer) { transform.position = Vector3.SmoothDamp(transform.position, pos, ref velocity, smoothTime * Time.deltaTime); } //User camera rotation if (cam.enableUserRotation && trackPlayer) { if (Input.GetMouseButtonDown(1)) { isDragging = true; if (cam.hideCursorOnRotate) { Cursor.visible = false; } } if (Input.GetMouseButton(1)) { if (isDragging) { speed = new Vector3(-Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"), 0.0F); avgSpeed = Vector3.Lerp(avgSpeed, speed, Time.deltaTime * 5); } } else { if (isDragging) { Cursor.visible = true; speed = avgSpeed; isDragging = false; } float i = Time.deltaTime * 5; speed = Vector3.Lerp(speed, Vector3.zero, i); } transform.Rotate(transform.up * -speed.x * cam.rotationSpeed, Space.World); } //Camera panning if (cam.panningEnabled) { if (!trackPlayer) { transform.position = Vector3.Lerp(transform.position, panHelper.transform.position, Time.deltaTime * 8); } if (Input.GetMouseButtonDown(2)) { if (trackPlayer) { trackPlayer = false; } lastRot = transform.position; if (cam.hideCursorOnPan) { Cursor.visible = false; } if (panHelper == null) { panHelper = new GameObject(); panHelper.transform.position = transform.position; panHelper.AddComponent <PanHelperScript>(); PanHelperScript helper = panHelper.GetComponent <PanHelperScript>(); helper.cam = cam.GetComponent <Camera>(); helper.rotY = transform.rotation.eulerAngles.y; helper.dragSpeed = panSpeed; } } if (Input.GetMouseButtonDown(1)) { trackPlayer = true; returning = true; Destroy(panHelper); } if (Input.GetMouseButtonUp(2) && cam.hideCursorOnPan) { Cursor.visible = true; } if (returning) { smoothTime = 30; if (Vector3.Distance(transform.position, new Vector3(target.position.x, target.position.y + yTargetOffset, target.position.z)) < .01f) { returning = false; } } else { smoothTime = .03f; } } }