Thêm Cúi người vào Trình phát FPS trong Unity

Việc thêm cơ chế crouching có thể giúp bạn đắm chìm sâu hơn và mang lại chiều sâu chiến thuật cho lối chơi, đặc biệt là trong các trò chơi góc nhìn thứ nhất và trò chơi lén lút. Dựa trên hướng dẫn Unity Bộ điều khiển FPS của chúng tôi, hướng dẫn này trình bày cách thêm tính năng cúi người mượt mà trong Unity.

Điều kiện tiên quyết

bước

  • Trong class có tên 'SC_FPSController', từ hướng dẫn Unity FPS Controller, hãy thêm các biến sau để xử lý việc cúi người:
public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
  • Sửa đổi phương thức 'Start()' để lưu trữ chiều cao ban đầu của 'CharacterController' và đặt vị trí camera:
void Start()
{
    characterController = GetComponent<CharacterController>();
    originalHeight = characterController.height;

    // Define camera positions for standing and crouching
    cameraStandPosition = playerCamera.transform.localPosition;
    cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);

    // Lock cursor
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
}
  • Trong phương thức 'Update()', hãy kiểm tra xem có nhấn phím crouch không và chuyển đổi biến 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Bên ngoài khối trước, thực hiện chuyển đổi mượt mà cho vị trí của máy ảnh giữa cúi và đứng:
if (isCrouching)
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
  • Điều chỉnh tốc độ di chuyển của người chơi dựa trên trạng thái hiện tại:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Câu hỏi:

  1. Tại sao nên sử dụng 'Vector3.Lerp()' để chuyển đổi camera trong khi cúi xuống?: Hàm 'Vector3.Lerp()' được sử dụng để nội suy mượt mà giữa hai vectơ. Trong bối cảnh này, nó cho phép máy ảnh chuyển đổi linh hoạt giữa tư thế đứng và cúi người thay vì chụp đột ngột.
  2. Vai trò của 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' xác định quá trình chuyển đổi giữa vị trí máy ảnh cúi xuống và đứng diễn ra nhanh như thế nào. Giá trị cao hơn dẫn đến quá trình chuyển đổi nhanh hơn.
  3. Có thể tùy chỉnh phím crouch không?: Hoàn toàn có thể. Phím crouch hiện được đặt thành 'C' ('KeyCode.C'). Thay thế nó bằng bất kỳ 'KeyCode' nào bạn muốn để điều chỉnh phím cúi mình.

Phần kết luận

Việc kết hợp cơ chế cúi người mượt mà trong Unity, bao gồm việc điều chỉnh cả kích thước collider và vị trí máy ảnh, có thể nâng cao đáng kể sự đắm chìm của người chơi. Hướng dẫn này đã cung cấp một phương pháp để đạt được điều này bằng quá trình chuyển đổi tự nhiên, trôi chảy.