Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Events;
- [RequireComponent(typeof(Rigidbody))]
- [RequireComponent(typeof(CapsuleCollider))]
- public class RigidbodyPlayer : MonoBehaviour
- {
- public float speed = 10.0f;
- public float gravity = 10.0f;
- public float maxVelocityChange = 10.0f;
- public bool canJump = true;
- public float jumpHeight = 2.0f;
- private bool grounded = false;
- private Rigidbody rb;
- void Awake()
- {
- rb = GetComponent<Rigidbody>();
- rb.freezeRotation = true;
- rb.useGravity = false;
- }
- void FixedUpdate()
- {
- if (Physics.CheckCapsule(transform.position + transform.up * 0.5f, transform.position + transform. up * -0.6f, 0.5f))
- {
- grounded = true;
- }
- // Calculate how fast we should be moving
- Vector3 targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
- targetVelocity = transform.TransformDirection(targetVelocity);
- targetVelocity *= speed;
- // Apply a force that attempts to reach our target velocity
- Vector3 velocity = rb.velocity;
- Vector3 velocityChange = (targetVelocity - velocity);
- velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
- velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
- velocityChange.y = 0;
- rb.AddForce(velocityChange, ForceMode.VelocityChange);
- if (grounded)
- {
- // Jump
- if (canJump && Input.GetButton("Jump"))
- {
- rb.velocity = new Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
- }
- }
- // We apply gravity manually for more tuning control
- rb.AddForce(new Vector3(0, -gravity * rb.mass, 0));
- grounded = false;
- }
- //void OnCollisionStay()
- //{
- // grounded = true;
- //}
- float CalculateJumpVerticalSpeed()
- {
- // From the jump height and gravity we deduce the upwards speed
- // for the character to reach at the apex.
- return Mathf.Sqrt(2 * jumpHeight * gravity);
- }
- void Start()
- {
- Cursor.lockState = CursorLockMode.Locked;
- }
- void Update()
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement