Hurken toevoegen aan FPS-speler in Unity

Het toevoegen van een crouching-mechanisme kan de onderdompeling verdiepen en tactische diepgang aan de gameplay geven, vooral in first-person en stealth-gebaseerde games. Deze handleiding bouwt voort op onze Unity FPS-controller-tutorial en laat zien hoe u een soepele hurken-functie kunt toevoegen in Unity.

Vereisten

Stappen

  • Voeg in de class met de naam 'SC_FPSController', uit de tutorial Unity FPS Controller, de volgende variabelen toe om het hurken af ​​te handelen:
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;
  • Wijzig de 'Start()'-methode om de oorspronkelijke hoogte van de 'CharacterController' op te slaan en cameraposities in te stellen:
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;
}
  • Controleer bij de 'Update()'-methode of de crouch-toets is ingedrukt en schakel de variabele 'isCrouching' in:
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Implementeer buiten het vorige blok de vloeiende overgang voor de camerapositie tussen gehurkt en staand:
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);
}
  • Pas de bewegingssnelheid van de speler aan op basis van de huidige status:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Vragen:

  1. Waarom 'Vector3.Lerp()' gebruiken voor camera-overgang tijdens het hurken? : De functie 'Vector3.Lerp()' wordt gebruikt om soepel tussen twee vectoren te interpoleren. In deze context zorgt het ervoor dat de camera vloeiend kan overschakelen tussen staande en gehurkte posities in plaats van abrupt te klikken.
  2. Wat is de rol van 'crouchTransitionSpeed'?: De 'crouchTransitionSpeed' bepaalt hoe snel de overgang tussen de hurkende en staande camerapositie plaatsvindt. Een hogere waarde resulteert in een snellere overgang.
  3. Is het mogelijk om de crouch-toets aan te passen?: Absoluut. De crouch-toets is momenteel ingesteld op 'C' ('KeyCode.C'). Vervang deze door de gewenste 'KeyCode' om de hurkende sleutel aan te passen.

Conclusie

Door in Unity een soepel hurken-mechanisme op te nemen, waarbij zowel de grootte van de collider als de camerapositie moeten worden aangepast, kan de onderdompeling van de speler aanzienlijk worden vergroot. Deze gids biedt een methode om dit te bereiken met een natuurlijke, vloeiende overgang.

Voorgestelde artikelen
Karaktercontroller Hoe u de mogelijkheid kunt toevoegen om starre lichamen in eenheid te duwen
Ondersteuning voor bewegende platforms toevoegen aan de karaktercontroller in Unity
Head Bobbing-effect toevoegen aan de camera in eenheid
Ondersteuning voor dubbele sprongen toegevoegd aan een 2D-platformgame-personagecontroller in Unity
Autocontroller voor Unity
Spelersbeweging in eenheid creëren
Unity Hoe u mobiele aanraakbedieningen maakt