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
- Grundlæggende kendskab til Unity grænsefladen.
- Forståelse af Unity 'CharacterController'.
- FPS-controller-scriptet fra Unity FPS Controller tutorial.
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:
- 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.
- 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.
- 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.