private void Update() { var bci = Target.GetComponent <BallControlInput>(); if (bci) { bci.LookDirection = transform.rotation * Quaternion.Euler(0, -90, 0); } var bciLocal = Target.GetComponent <BallControlInputLocal>(); if (bciLocal) { bciLocal.LookDirection = transform.rotation * Quaternion.Euler(0, -90, 0); } //Mouse look if (UseMouse) { if (Input.GetMouseButtonDown(0) && !GameInput.KeyboardDisabled && !UI.PauseMenu.GamePaused) { Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } if (Input.GetKeyDown(KeyCode.LeftAlt)) { Cursor.lockState = CursorLockMode.None; Cursor.visible = true; } if (Cursor.lockState == CursorLockMode.Locked && CtrlType == ControlType.Keyboard) { // Debug.Log("KEyboard Gura camara"); float yAxisMove = Input.GetAxis("Mouse Y") * sensitivityMouse; ytargetRotation += -yAxisMove; float xAxisMove = Input.GetAxis("Mouse X") * sensitivityMouse; xtargetRotation += xAxisMove; } } //Keyboard controls var cameraVector = GameInput.CameraVector(CtrlType); /*if (cameraVector.x < 0) * xtargetRotation -= 20 * sensitivityKeyboard * Time.deltaTime; * if (cameraVector.x > 0) * xtargetRotation += 20 * sensitivityKeyboard * Time.deltaTime; * if (cameraVector.y > 0) * ytargetRotation -= 20 * sensitivityKeyboard * Time.deltaTime; * if (cameraVector.y < 0) * ytargetRotation += 20 * sensitivityKeyboard * Time.deltaTime;*/ xtargetRotation += cameraVector.x * 20 * sensitivityKeyboard * Time.deltaTime; ytargetRotation -= cameraVector.y * 20 * sensitivityKeyboard * Time.deltaTime; ytargetRotation = Mathf.Clamp(ytargetRotation, yMin, yMax); xtargetRotation = xtargetRotation % 360; ytargetRotation = ytargetRotation % 360; transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, xtargetRotation, ytargetRotation), Time.deltaTime * 10 / smoothing); }
private void Update() { //Input var targetDirectionOffset = Quaternion.identity; Vector2 camVector = GameInput.CameraVector(CtrlType); Vector3 orientedCamVector = new Vector3(camVector.x, 0, camVector.y); if (orientedCamVector != Vector3.zero) { Quaternion camQuaternion = Quaternion.Slerp(Quaternion.identity, Quaternion.LookRotation(orientedCamVector), orientedCamVector.magnitude); targetDirectionOffset = camQuaternion; } if (Target != null) { //Rotate the camera towards the velocity of the rigidbody //Set the up vector, and make it lerp towards the target's up vector if the target has a Ball Vector3 targetUp = Vector3.up; Ball bc = Target.GetComponent <Ball>(); if (bc) { targetUp = bc.Up; } BallLocal bcLocal = Target.GetComponent <BallLocal>(); if (bcLocal) { targetUp = bcLocal.Up; } up = Vector3.Lerp(up, targetUp, Time.deltaTime * 10); //Based on how fast the target is moving, create a rotation bending towards its velocity. Quaternion towardsVelocity = (Target.velocity != Vector3.zero) ? Quaternion.LookRotation(Target.velocity, up) : Quaternion.identity; const float maxTrans = 20f; Quaternion finalTargetDir = Quaternion.Slerp(currentDirection, towardsVelocity, Mathf.Max(0, Mathf.Min(-10 + Target.velocity.magnitude, maxTrans) / maxTrans)); //Lerp towards the final rotation currentDirection = Quaternion.Slerp(currentDirection, finalTargetDir, Time.deltaTime * 2); //Look for a BallControlInput and set its look direction BallControlInput bci = Target.GetComponent <BallControlInput>(); if (bci != null) { bci.LookDirection = currentDirection; } BallControlInputLocal bciLocal = Target.GetComponent <BallControlInputLocal>(); if (bciLocal != null) { bciLocal.LookDirection = currentDirection; } //Set camera FOV to get higher with more velocity AttachedCamera.fieldOfView = Mathf.Lerp(AttachedCamera.fieldOfView, Mathf.Min(60f + (Target.velocity.magnitude), 100f), Time.deltaTime * 4); currentDirectionWithOffset = Quaternion.Slerp(currentDirectionWithOffset, currentDirection * targetDirectionOffset, Time.deltaTime * 2); transform.position = Target.transform.position + Vector3.up * orbitHeight + currentDirectionWithOffset * (Vector3.back * orbitDistance); transform.rotation = currentDirectionWithOffset; } }