private void Update() { // Временно, в будущем заменить, отделить ответственность. if (GetComponent <CharacterController>() && GetComponent <CharacterController>().isGrounded == false) { Fall?.Invoke(); } }
private void OnFalling(EventArgs e) { Fall?.Invoke(this, e); }
private void Movement() { _isGrounded = controller.isGrounded; if (!_isGrounded && _airTime > 0.3f && !_isJumping && !_beganFall) { Fall?.Invoke(); _beganFall = true; } if (!_isGrounded) { _airTime += Time.fixedDeltaTime; } else { _airTime = 0; _isJumping = false; if (_beganFall) { Land?.Invoke(); } _beganFall = false; } if (_isJumping && jumpTime < _airTime) { _isJumping = false; Fall?.Invoke(); } Vector3 camForward = Vector3.ProjectOnPlane(cam.transform.forward, Vector3.up).normalized; Vector3 dir = camForward * Input.GetAxis("Vertical") * (scrollCam ? 0 : 1) + cam.transform.right * Input.GetAxis("Horizontal"); if (_isDead) { dir = Vector3.zero; } Vector3 toMove = dir * (_isSprinting ? sprintSpeed : movementSpeed) + down * gravity * _airTime * (_isGrounded ? 0 : 1) + (_isJumping ? -down : Vector3.zero) * jumpForce * (1 - (_airTime / jumpTime) / 2); if (scrollCam) { toMove = Vector3.ProjectOnPlane(toMove, cam.transform.forward); } if (_isMoving) { controller.transform.rotation = Quaternion.LookRotation(camForward * (Input.GetAxis("Vertical") < 0 ? -1 : 1), Vector3.up) * Quaternion.AngleAxis(90 * Input.GetAxis("Horizontal") * (Input.GetAxis("Vertical") < 0 ? -1 : 1), Vector3.up); } controller.Move(Time.fixedDeltaTime * toMove); cam.transform.position = controller.transform.position + cameraOffset; if (down != Vector3.down) { controller.enabled = false; transform.position = Vector3.ProjectOnPlane(transform.position, Camera.main.transform.forward); controller.enabled = true; } if (dir.magnitude > 0) { CheckIfStartedMoving(); } else { CheckIfStoppedMoving(); } }