cs using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 5f; // Speed of player movement
public float jumpForce = 5f; // Force applied when jumping
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.useGravity = true; // Ensure Unity's gravity is applied
}
void Update()
{
Move();
if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
{
Jump();
}
}
void Move()
{
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");
Vector3 moveDirection = new Vector3(moveX, 0, moveZ).normalized;
Vector3 moveVelocity = moveDirection * moveSpeed;
rb.linearVelocity = new Vector3(moveVelocity.x, rb.linearVelocity.y, moveVelocity.z);
}
void Jump()
{
rb.linearVelocity = new Vector3(rb.linearVelocity.x, jumpForce, rb.linearVelocity.z);
}
bool IsGrounded()
{
// Check for grounding to prevent floating or upward dragging
return Physics.Raycast(transform.position, Vector3.down, 1.1f);
}
void FixedUpdate()
{
// Extra safeguard to force Rigidbody's velocity in case of erratic behavior
if (rb.linearVelocity.y > 0 && !Input.GetKey(KeyCode.Space))
{
rb.linearVelocity = new Vector3(rb.linearVelocity.x, 0, rb.linearVelocity.z);
}
}
}