Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using Microsoft.Win32.SafeHandles;
- using UnityEngine;
- public class CharacterMovement : MonoBehaviour
- {
- [SerializeField] private float walkSpeed = 2f;
- [SerializeField] private float runSpeed = 4f;
- [SerializeField] private float jumpForce = 4f;
- private float currentSpeed = 0f;
- private float speedSmoothVelocity = 0f;
- private float speedSmoothTime = 0.1f;
- private float rotationSpeed = 0.1f;
- private float gravity = 3f;
- private Transform mainCameraTransform;
- private CharacterController characterController;
- private Animator animator;
- private void Start()
- {
- characterController = GetComponent<CharacterController>();
- animator = GetComponent<Animator>();
- mainCameraTransform = Camera.main.transform;
- }
- private void Update()
- {
- Move();
- }
- private void Move()
- {
- Vector3 movementInput = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).normalized;
- Vector3 forward = mainCameraTransform.forward;
- Vector3 right = mainCameraTransform.right;
- //forward.y = 0;
- //right.y = 0;
- forward.Normalize();
- right.Normalize();
- Vector3 desiredMoveDirection = (forward * movementInput.z + right * movementInput.x).normalized;
- Vector3 gravityVector = Vector3.zero;
- if (!characterController.isGrounded)
- {
- gravityVector.y -= gravity;
- }
- if (desiredMoveDirection != Vector3.zero)
- {
- transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(desiredMoveDirection),
- rotationSpeed);
- }
- float targetSpeed = walkSpeed * movementInput.magnitude;
- if (Input.GetKey(KeyCode.LeftShift))
- {
- targetSpeed = runSpeed * movementInput.magnitude;
- }
- currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, speedSmoothTime);
- characterController.Move(desiredMoveDirection * currentSpeed * Time.deltaTime);
- characterController.Move(gravityVector * Time.deltaTime);
- animator.SetFloat("MovementSpeed", 0.5f*movementInput.magnitude, speedSmoothTime, Time.deltaTime);
- if (Input.GetKey(KeyCode.LeftShift))
- {
- animator.SetFloat("MovementSpeed", 1f * movementInput.magnitude, speedSmoothTime, Time.deltaTime);
- }
- if (Input.GetKeyDown(KeyCode.Space) && characterController.isGrounded)
- {
- gravityVector.y = jumpForce;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement