Tengo un problema extraño con el controlador de mi cámara y no puedo entender por qué. Cuando miro en ciertas direcciones, la cámara comienza a temblar. La rotación de la cámara parece cambiar muy rápido en este momento, pero no entiendo por qué.
Aquí está el código que uso (esto se llama en la actualización).
void PhotoMode() { Vector3 newPos = transform.position; //déplacement avant if(Input.GetKey(InputManager.IM.forward)) { newPos += cam.transform.forward * moveSpeedPhoto * Time.unscaledDeltaTime; } //déplacement arrière if(Input.GetKey(InputManager.IM.backward)) { newPos -= cam.transform.forward * moveSpeedPhoto * Time.unscaledDeltaTime; } //déplacement gauche if(Input.GetKey(InputManager.IM.left)) { newPos += -transform.right * moveSpeedPhoto * Time.unscaledDeltaTime; } //déplacement droite if(Input.GetKey(InputManager.IM.right)) { newPos += transform.right * moveSpeedPhoto * Time.unscaledDeltaTime; } float x = Input.GetAxis("Mouse X"); float y = Input.GetAxis("Mouse Y"); x *= photoRotSpeed * Time.unscaledDeltaTime; y *= photoRotSpeed * Time.unscaledDeltaTime; currentX = Mathf.Lerp(currentX, x, smoothTime * Time.unscaledDeltaTime); currentY = Mathf.Lerp(currentY, y, smoothTime * Time.unscaledDeltaTime); float rotationX = transform.localEulerAngles.y + currentX * photoRotSpeed; rotationY += currentY * photoRotSpeed; rotationY = Mathf.Clamp(rotationY, -90+65, 90+65); transform.localRotation = Quaternion.Euler(new Vector3(-rotationY, rotationX, 0)); transform.position = newPos; }Logré hacerlo funcionar con esto: (la cámara dentro de un objeto del juego, que tiene el guión)
void PhotoMode() { if(Input.GetKeyDown(KeyCode.Space)) { dontMove = !dontMove; screenshotManager.photoModeCanvas.SetActive(dontMove); if(!dontMove && screenshotManager.focusDistanceIndicatorToggle.isOn && screenshotManager.distanceIndicator.activeSelf) { screenshotManager.FocusDistanceIndicator(false); } if(dontMove && screenshotManager.focusDistanceIndicatorToggle.isOn && !screenshotManager.distanceIndicator.activeSelf) { screenshotManager.FocusDistanceIndicator(true); } } if(dontMove) { Cursor.lockState = CursorLockMode.None; return; } Cursor.lockState = CursorLockMode.Locked; Vector3 newPos = transform.position; float scroll = Input.GetAxis("Mouse ScrollWheel"); moveSpeedPhoto += scroll*10; moveSpeedPhoto = Mathf.Clamp(moveSpeedPhoto, 0, 100); //déplacement avant if(Input.GetKey(InputManager.IM.forward)) { newPos += cam.transform.forward * moveSpeedPhoto * Time.unscaledDeltaTime; } //déplacement arrière if(Input.GetKey(InputManager.IM.backward)) { newPos -= cam.transform.forward * moveSpeedPhoto * Time.unscaledDeltaTime; } //déplacement gauche if(Input.GetKey(InputManager.IM.left)) { newPos += -transform.right * moveSpeedPhoto * Time.unscaledDeltaTime; } //déplacement droite if(Input.GetKey(InputManager.IM.right)) { newPos += transform.right * moveSpeedPhoto * Time.unscaledDeltaTime; } float x = Input.GetAxis("Mouse X") * photoRotSpeed * Time.unscaledDeltaTime; float y = Input.GetAxis("Mouse Y") * photoRotSpeed * Time.unscaledDeltaTime; rotationX -= y; rotationX = Mathf.Clamp(rotationX, -90, 90); cam.transform.localRotation = Quaternion.Euler(rotationX, 0f, 0f); this.transform.Rotate(Vector3.up * x); transform.position = newPos; }