Hinzufügen von Crouching zum FPS-Player in Unity
Das Hinzufügen eines hockenden-Mechanismus kann das Eintauchen vertiefen und dem Gameplay taktische Tiefe verleihen, insbesondere in First-Person- und Stealth-basierten Spielen. Aufbauend auf unserem Unity FPS-Controller-Tutorial zeigt diese Anleitung, wie man in Unity eine sanfte Hockfunktion hinzufügt.
Voraussetzungen
- Grundlegende Vertrautheit mit der Unity Schnittstelle.
- Verständnis des Unity 'CharacterController'.
- Das FPS-Controller-Skript aus dem Tutorial Unity FPS Controller.
Schritte
- Fügen Sie in der Klasse mit dem Namen 'SC_FPSController' aus dem Tutorial Unity FPS Controller die folgenden Variablen hinzu, um das Hocken zu handhaben:
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;
- Ändern Sie die Methode 'Start()', um die ursprüngliche Höhe von 'CharacterController' zu speichern und die Kamerapositionen festzulegen:
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;
}
- Überprüfen Sie in der Methode 'Update()', ob die Hock-Taste gedrückt wird, und schalten Sie die Variable 'isCrouching' um:
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
isCrouching = !isCrouching;
if (isCrouching)
{
characterController.height = crouchHeight;
walkingSpeed = crouchSpeed;
}
else
{
characterController.height = originalHeight;
walkingSpeed = 7.5f;
}
}
- Implementieren Sie außerhalb des vorherigen Blocks den fließenden Übergang für die Kameraposition zwischen geduckt und stehend:
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);
}
- Passen Sie die Bewegungsgeschwindigkeit des Spielers basierend auf dem aktuellen Status an:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;
Fragen:
- Warum 'Vector3.Lerp()' für den Kameraübergang beim Hocken verwenden?: Die Funktion 'Vector3.Lerp()' wird verwendet, um reibungslos zwischen zwei Vektoren zu interpolieren. In diesem Zusammenhang ermöglicht es der Kamera, fließend zwischen stehender und geduckter Position zu wechseln, anstatt abrupt zu schnappen.
- Welche Rolle spielt 'crouchTransitionSpeed'?: Das 'crouchTransitionSpeed' bestimmt, wie schnell der Übergang zwischen der geduckten und stehenden Kameraposition erfolgt. Ein höherer Wert führt zu einem schnelleren Übergang.
- Ist es möglich, die Hocktaste anzupassen?: Auf jeden Fall. Die Hock-Taste ist derzeit auf 'C' ('KeyCode.C') eingestellt. Ersetzen Sie es durch ein beliebiges 'KeyCode', um den Hockschlüssel anzupassen.
Abschluss
Durch die Integration einer reibungslosen Hock-Mechanik in Unity, bei der sowohl die Größe des Colliders als auch die Kameraposition angepasst werden müssen, kann das Eintauchen des Spielers erheblich gesteigert werden. Dieser Leitfaden bietet eine Methode, um dies mit einem natürlichen, fließenden Übergang zu erreichen.