using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 6f; public float jumpForce = 6f; private Rigidbody rb; private bool isGrounded; void Start() { rb = GetComponent(); } void Update() { // Basic movement (WASD) float moveX = Input.GetAxis("Horizontal"); float moveZ = Input.GetAxis("Vertical"); Vector3 move = transform.right * moveX + transform.forward * moveZ; transform.position += move * speed * Time.deltaTime; // Jump if (Input.GetButtonDown("Jump") && isGrounded) { rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); } } void OnCollisionStay(Collision collision) { isGrounded = collision.gameObject.CompareTag("Ground"); } void OnCollisionExit(Collision collision) { if (collision.gameObject.CompareTag("Ground")) isGrounded = false; } } using UnityEngine; public class ThirdPersonCamera : MonoBehaviour { public Transform player; public float sensitivity = 2f; private float rotationX, rotationY; void LateUpdate() { rotationX += Input.GetAxis("Mouse X") * sensitivity; rotationY -= Input.GetAxis("Mouse Y") * sensitivity; rotationY = Mathf.Clamp(rotationY, -30, 60); transform.rotation = Quaternion.Euler(rotationY, rotationX, 0); transform.position = player.position - transform.forward * 5f + Vector3.up * 2f; } }