GameVsJam/3d Prototyp/Assets/Character.cs

107 lines
2.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Character : MonoBehaviour
{
[Header("Movement")]
public float moveSpeed = 2f;
public float groundDrag = 1f;
private float horizontalInput, verticalInput;
private Vector3 moveDirection;
private Rigidbody rb;
public float speed = 2f;
[Header("Keybindings")]
public KeyCode jumpKey = KeyCode.Space;
public float jumpForce;
public float jumpCooldown;
bool readyToJump = true;
[Header("Groud Check")]
public float playerHeight;
public LayerMask whatIsGround;
public bool grounded;
// Start is called before the first frame update
void Start()
{
rb = gameObject.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
grounded = Physics.Raycast(transform.position, Vector3.down, playerHeight * 0.5f, whatIsGround);
MyInput();
SpeedControl();
if(grounded)
{
rb.drag = groundDrag;
}
else
{
rb.drag = 0;
}
}
private void FixedUpdate()
{
MovePlayer();
}
private void MyInput()
{
horizontalInput = Input.GetAxisRaw("Horizontal");
verticalInput = Input.GetAxisRaw("Vertical");
if(Input.GetKey(jumpKey) && readyToJump && grounded)
{
readyToJump = false;
Jump();
Invoke(nameof(ResetJump), jumpCooldown);
}
}
private void MovePlayer()
{
moveDirection = new Vector3(0, 0, verticalInput) + new Vector3(horizontalInput, 0, 0);
rb.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);
}
private void SpeedControl()
{
Vector3 flatVel = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
if(flatVel.magnitude > moveSpeed)
{
Vector3 limitedVel = flatVel.normalized * moveSpeed;
rb.velocity = new Vector3(limitedVel.x, rb.velocity.y, limitedVel.z);
}
}
private void Jump()
{
rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
rb.AddForce(transform.up * jumpForce, ForceMode.Impulse);
}
private void ResetJump()
{
readyToJump = true;
}
}