Tilføjelse af Crouching til FPS Player i Unity

Tilføjelse af en crouching-mekanisme kan uddybe fordybelsen og give taktisk dybde til gameplayet, især i first-person og stealth-baserede spil. Med udgangspunkt i vores Unity FPS Controller tutorial viser denne vejledning, hvordan du tilføjer en glat krøjefunktion i Unity.

Forudsætninger

Trin

  • I klassen navngivet 'SC_FPSController', fra Unity FPS Controller tutorial, skal du tilføje følgende variabler for at håndtere crouching:
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;
  • Rediger 'Start()'-metoden for at gemme den oprindelige højde af 'CharacterController' og indstil kamerapositioner:
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;
}
  • I 'Update()'-metoden skal du kontrollere, om der er tryk på crouch-tasten, og du skifter til variablen 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Uden for den forrige blok skal du implementere den glatte overgang for kameraets position mellem at sidde på huk og at stå:
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);
}
  • Juster spillerens bevægelseshastighed baseret på den aktuelle tilstand:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Spørgsmål:

  1. Hvorfor bruge 'Vector3.Lerp()' til kameraovergang under sammenkrøbning?: 'Vector3.Lerp()'-funktionen bruges til at interpolere jævnt mellem to vektorer. I denne sammenhæng giver det kameraet mulighed for at skifte flydende mellem stående og krøbende positioner i stedet for at snappe brat.
  2. Hvad er 'crouchTransitionSpeed''s rolle?: 'crouchTransitionSpeed' bestemmer, hvor hurtigt overgangen mellem kamerapositionerne, der sidder på huk og stående, finder sted. En højere værdi resulterer i en hurtigere overgang.
  3. Er det muligt at tilpasse crouche-nøglen?: Absolut. Kroktasten er i øjeblikket indstillet til 'C' ('KeyCode.C'). Udskift den med en hvilken som helst ønsket 'KeyCode' for at justere krøjningsnøglen.

Konklusion

Inkorporering af en glat bøjet mekanik i Unity, hvilket involverer justering af både collider størrelse og kameraposition, kan øge spillerens fordybelse betydeligt. Denne guide har givet en metode til at opnå dette med en naturlig, flydende overgang.

Foreslåede artikler
Tilføjelse af Double Jump Support til en 2D Platformer Character Controller i Unity
Player 3D og 2D Wall Jump Tutorial for Unity
Rigidbody-baseret Planetary Player Controller til Unity
Tilføjelse af Head Bobbing-effekt til kameraet i enhed
Top-Down Player Controller Tutorial til Unity
Bilcontroller til Unity
Character Controller Sådan tilføjes evnen til at skubbe rigidbodies i enhed