Adăugarea ghemuirii la FPS Player în Unity

Adăugarea unui mecanism crouching poate aprofunda imersiunea și poate oferi profunzime tactică jocului, în special în jocurile la persoana întâi și cele bazate pe stealth. Pe baza tutorialului nostru Unity FPS Controller, acest ghid arată cum să adăugați o funcție de ghemuire lină în Unity.

Cerințe preliminare

Pași

  • În class numită 'SC_FPSController', din tutorialul Unity FPS Controller, adăugați următoarele variabile pentru a gestiona ghemuirea:
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;
  • Modificați metoda 'Start()' pentru a stoca înălțimea inițială a 'CharacterController' și setați pozițiile camerei:
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;
}
  • În metoda 'Update()', verificați dacă apăsați tasta ghemuit și comutați variabila 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • În afara blocului anterior, implementați tranziția lină pentru poziția camerei între ghemuit și în picioare:
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);
}
  • Reglați viteza de mișcare a jucătorului în funcție de starea curentă:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Întrebări:

  1. De ce să folosiți 'Vector3.Lerp()' pentru tranziția camerei în timpul ghemuirii?: Funcția 'Vector3.Lerp()' este utilizată pentru a interpola fără probleme între doi vectori. În acest context, permite camerei să treacă fluid între pozițiile în picioare și ghemuit, mai degrabă decât să se blocheze brusc.
  2. Care este rolul lui 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' determină cât de repede are loc tranziția între pozițiile camerei ghemuite și cele în picioare. O valoare mai mare are ca rezultat o tranziție mai rapidă.
  3. Este posibil să personalizați tasta ghemuită?: Absolut. Tasta de ghemuire este setată în prezent la 'C' ('KeyCode.C'). Înlocuiți-l cu orice 'KeyCode' dorit pentru a regla cheia ghemuită.

Concluzie

Încorporarea unei mecanici de ghemuire lină în Unity, care implică ajustarea atât a dimensiunii collider, cât și a poziției camerei, poate crește semnificativ imersiunea jucătorului. Acest ghid a oferit o metodă pentru a realiza acest lucru cu o tranziție naturală, fluidă.