Implementering af Parkour System i Unity
Konceptet parkour, en træningsdisciplin fokuseret på at overvinde fysiske forhindringer ved hjælp af bevægelse, har oplevet enorm popularitet i videospil, og tilbyder spillerne et interaktivt og engagerende miljø. Implementering af dette system i Unity kan hæve spiloplevelsen. Denne vejledning vil guide dig gennem processen med at konfigurere et grundlæggende parkour-system i Unity, med fokus på vægløb og hvælving.
Aktiver påkrævet
- En grundlæggende karaktercontroller: Vi vil bruge en spillercontroller fra tredjepersonskameraet i Unity som basisklasse for ændringer.
- Parkour-animationer: vægløb, hvælving osv.
1. Indstilling af scenen
- Sørg for, at miljøet har vægge og forhindringer mærket korrekt, ved at bruge "Wall" til vægge og "Obstacle" til hvælvinger.
2. Ændring af 'SC_TPSController' scriptet til Wall Running
2.1. Registrering af en væg:
- Denne metode kontrollerer, om karakteren er ved siden af en væg ved hjælp af raycasting.
bool IsBesideWall(Vector3 direction)
{
RaycastHit hit;
if (Physics.Raycast(transform.position, direction, out hit, 1f))
{
if (hit.transform.CompareTag("Wall"))
{
return true;
}
}
return false;
}
2.2. Vægløb
- Denne coroutine klarer vægløb.
public float wallRunTime = 2f; // Duration of the wall run.
IEnumerator WallRun(Vector3 direction)
{
float startTime = Time.time;
canMove = false; // Disable regular movement during wall run.
while (Time.time - startTime < wallRunTime)
{
characterController.Move(direction * speed * Time.deltaTime);
yield return null;
}
canMove = true; // Enable regular movement after wall run.
}
- Integrer vægløb i 'Update()' metoden:
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
StartCoroutine(WallRun(-transform.right));
}
3. Ændring af 'SC_TPSController' for Vaulting
3.1. Opdagelse af en forhindring
- Tjek efter en hvælvingbar forhindring foran karakteren.
bool IsObstacleInFront()
{
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
{
if (hit.transform.CompareTag("Obstacle"))
{
return true;
}
}
return false;
}
3.2. Hvælving
- Tilføj en vaulting-metode:
void Vault()
{
canMove = false; // Disable regular movement during vaulting.
// Translate the player over the obstacle.
Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
characterController.Move(vaultMovement);
canMove = true; // Enable regular movement after vaulting.
}
- Integrer hvælving i 'Update()' metoden:
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
Vault();
}
Konklusion
Disse ændringer vil introducere wall running og vaulting-funktionaliteter til den eksisterende tredjeparts-afspillercontroller. Test disse nye bevægelser i forskellige scenarier for at sikre, at de fungerer efter hensigten. Justeringer kan være nødvendige afhængigt af spillets specifikke miljø eller den ønskede parkour-mekanik.