PlayerMovement | Unit 9
Tue May 17 2022 21:18:43 GMT+0000 (Coordinated Universal Time)
Saved by @BiscuitTinx #c#
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.PlayerLoop; public class Movement : MonoBehaviour { [SerializeField] private Transform orientation; private float playerHeight = 2; [Header("Movement")] public float speed = 6; public float groundMultiplier = 7f; public float airMultiplier = 0.4f; [Header("Sprinting")] public float walkSpeed = 4f; public float runSpeed = 6f; public float acceleration = 10f; [Header("Jumping")] public float jumpforce = 5f; public Transform groundCheck; public float groundDistance = 0.4f; [SerializeField] private LayerMask groundLayer; private bool isGrounded; [Header("Drag")] public float groundDrag = 6f; public float airDrag = 1f; private float horizontal; private float vertical; private Vector3 Input; private Vector3 slopeMoveDirection; new private Rigidbody rigidbody; RaycastHit slopeHit; private bool OnSlope() { if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 + 0.5f)) { if (slopeHit.normal != Vector3.up) { return true; } else { return false; } } return false; } private void Start() { rigidbody = GetComponent<Rigidbody>(); } private void Update() { isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundLayer); ControlDrag(); slopeMoveDirection = Vector3.ProjectOnPlane(Input, slopeHit.normal); } public void ReceiveInput (Vector2 _input) { horizontal = _input.x; vertical = _input.y; Input = orientation.forward * vertical + orientation.right * horizontal; } private void FixedUpdate() { if (isGrounded && !OnSlope()) { rigidbody.AddForce(Input.normalized * speed * groundMultiplier, ForceMode.Acceleration); } else if (isGrounded && OnSlope()) { rigidbody.AddForce(slopeMoveDirection.normalized * speed * groundMultiplier, ForceMode.Acceleration); } else if (!isGrounded) { rigidbody.AddForce(Input.normalized * speed * airMultiplier, ForceMode.Acceleration); } } public void ControlSpeed(bool sprintInput) { if (sprintInput && isGrounded) { speed = Mathf.Lerp(speed, runSpeed, acceleration * Time.deltaTime); } else { speed = Mathf.Lerp(speed, walkSpeed, acceleration * Time.deltaTime); } } private void ControlDrag() { if (isGrounded) { rigidbody.drag = groundDrag; } else { rigidbody.drag = airDrag; } } public void OnJumpPressed() { if (isGrounded) { rigidbody.velocity = new Vector3(rigidbody.velocity.x, 0, rigidbody.velocity.z); rigidbody.AddForce(transform.up * jumpforce, ForceMode.Impulse); } } }
Comments