Dodanie kucania do odtwarzacza FPS w Unity
Dodanie mechanizmu kucania może pogłębić immersję i zapewnić taktyczną głębię rozgrywce, szczególnie w grach pierwszoosobowych i grach opartych na skradaniu. Opierając się na naszym samouczku Unity Kontroler FPS, ten przewodnik pokazuje, jak dodać funkcję płynnego kucania w Unity.
Warunki wstępne
- Podstawowa znajomość Unity interfejsu.
- Zrozumienie Unity 'CharacterController'.
- Skrypt kontrolera FPS z samouczka Unity Kontroler FPS.
Kroki
- W class o nazwie 'SC_FPSController', z samouczka Unity FPS Controller dodaj następujące zmienne, aby obsłużyć kucanie:
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;
- Zmodyfikuj metodę 'Start()', aby zapisać oryginalną wysokość 'CharacterController' i ustawić pozycje kamery:
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;
}
- W metodzie 'Update()' sprawdź, czy nie naciśnięto klawisza kucania, i przełącz zmienną 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
isCrouching = !isCrouching;
if (isCrouching)
{
characterController.height = crouchHeight;
walkingSpeed = crouchSpeed;
}
else
{
characterController.height = originalHeight;
walkingSpeed = 7.5f;
}
}
- Poza poprzednim blokiem zaimplementuj płynne przejście pozycji kamery pomiędzy kucaniem a staniem:
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);
}
- Dostosuj prędkość ruchu gracza w oparciu o bieżący stan:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;
Pytania:
- Po co używać 'Vector3.Lerp()' do przejścia kamery podczas kucania?: Funkcja 'Vector3.Lerp()' służy do płynnej interpolacji między dwoma wektorami. W tym kontekście umożliwia to płynne przechodzenie aparatu między pozycjami stojącymi i kucającymi, zamiast gwałtownego pstrykania.
- Jaka jest rola 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' określa, jak szybko następuje przejście między pozycją kamery w pozycji kucznej i stojącej. Wyższa wartość powoduje szybsze przejście.
- Czy można dostosować klawisz kucania?: Oczywiście. Klawisz kucania jest obecnie ustawiony na 'C' ('KeyCode.C'). Zastąp go dowolnym 'KeyCode', aby dostosować klawisz kucania.
Wniosek
Włączenie płynnej mechaniki kucania w Unity, która obejmuje dostosowanie zarówno rozmiaru collider, jak i położenia kamery, może znacznie zwiększyć immersję gracza. W tym przewodniku przedstawiono metodę osiągnięcia tego za pomocą naturalnego, płynnego przejścia.