void Update() { if (_controller.isGrounded) { _velocity.y = 0; } if (Input.GetButton(_buttons[Button.RIGHT])) { normalizedHorizontalSpeed = 1; if (transform.localScale.x < 0f) { transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z); } if (_controller.isGrounded) { _animator.Play(Animator.StringToHash("Run")); } if (!runs) { SoundK = SoundKit.instance.playSoundLooped(run); runs = true; } } else if (Input.GetButton(_buttons[Button.LEFT])) { normalizedHorizontalSpeed = -1; if (transform.localScale.x > 0f) { transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z); } if (_controller.isGrounded) { _animator.Play(Animator.StringToHash("Run")); } if (!runs) { SoundK = SoundKit.instance.playSoundLooped(run); runs = true; } } else { normalizedHorizontalSpeed = 0; if (_controller.isGrounded) { _animator.Play(Animator.StringToHash("Idle")); } if (runs) { runs = false; SoundK.stop(); } } // move pickupObject if (isHolding) { pickedUpObject.transform.position = new Vector3(transform.position.x + (transform.localScale.x / 2), transform.position.y + 1, transform.position.z);; } // we can only jump whilst grounded if (_controller.isGrounded && Input.GetButtonDown(_buttons[Button.A])) { _velocity.y = Mathf.Sqrt(2f * jumpHeight * -gravity); _animator.Play(Animator.StringToHash("Jump")); SoundKit.instance.playOneShot(jump); } // apply horizontal speed smoothing it. dont really do this with Lerp. Use SmoothDamp or something that provides more control var smoothedMovementFactor = _controller.isGrounded ? groundDamping : inAirDamping; // how fast do we change direction? _velocity.x = Mathf.Lerp(_velocity.x, normalizedHorizontalSpeed * runSpeed, Time.deltaTime * smoothedMovementFactor); // apply gravity before moving _velocity.y += gravity * Time.deltaTime; // if holding down bump up our movement amount and turn off one way platform detection for a frame. // this lets us jump down through one way platforms if (_controller.isGrounded && Input.GetButton(_buttons[Button.DOWN])) { _velocity.y *= 3f; _controller.ignoreOneWayPlatformsThisFrame = true; } _controller.move(_velocity * Time.deltaTime); // grab our current _velocity to use as a base for all calculations _velocity = _controller.velocity; if (Input.GetButtonDown(_buttons[Button.B])) { //TODO: b-button stuff! Debug.Log(_buttons[Button.B]); if (isHolding) { // if holding Throwable => Throw // calc force Vector2 force = new Vector2(transform.localScale.x * throwForce.x, throwForce.y); isHolding = false; pickedUpObject.Throw(force); pickedUpObject = null; } else { // if near Throwable => Pick up if (pickedUpObject != null) { pickedUpObject.StartHolding(); isHolding = true; // else => Punch } else { // punch } } } }