Tutorial de atac corp la corp 2D pentru Unity
Motorul Unity oferă o platformă extinsă pentru crearea de jocuri 2D și 3D. Unul dintre elementele de bază în multe jocuri de acțiune este atacul corp la corp. Într-un mediu 2D, un astfel de atac constă adesea într-un personaj care aruncă o armă sau aruncă un pumn și poate fi realizat folosind o combinație de animații Unity, fizică și instrumente de scripting.
Cerințe preliminare
- Unity Motor instalat și configurat.
- Familiaritate de bază cu interfața Unity și spațiul 2D.
1. Configurarea proiectului și a scenei
- Creați un nou proiect 2D Unity (dacă nu ați făcut-o încă).
- Importați sau creați un sprite de caracter. Pune-l în scenă.
2. Configurarea animației de atac corp la corp
- În fereastra Proiect, faceți clic dreapta și creați un "Animator Controller". Numele-i "CharacterAnimator".
- Atribuiți acest animator personajului selectând personajul și trăgând animatorul în componenta "Animator".
- Deschide fereastra Animație. Cu personajul selectat, creați o nouă animație numită "MeleeAttack".
- Pentru simplitate, să presupunem că acest atac este un pumn rapid. Animați sprite-ul pentru a simula această acțiune.
3. Crearea Hitbox-ului de atac
- Adăugați un GameObject gol ca copil la personaj. Acesta va acționa ca hitbox pentru atac.
- Atașați un "Box Collider 2D" la GameObject gol. Ajustați-i dimensiunea și poziția pentru a se potrivi cu locul în care personajul ar lovi în timpul lovirii.
- Dezactivați caseta de accesare debifând caseta "Active". Acest lucru asigură că se activează numai în timpul animației de atac.
4. Scriptarea logicii de atac
- Creați un nou script, denumiți-l "MeleeAttack" apoi inserați codul de mai jos în el:
'MeleeAttack.cs'
using UnityEngine;
public class MeleeAttack : MonoBehaviour
{
private Animator animator;
private BoxCollider2D hitbox;
private void Start()
{
animator = GetComponent<Animator>();
hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
{
animator.SetTrigger("MeleeAttack");
Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
}
}
void ActivateHitbox()
{
hitbox.gameObject.SetActive(true);
}
void DeactivateHitbox()
{
hitbox.gameObject.SetActive(false);
}
}
- Atașați scriptul "MeleeAttack" la personajul principal.
- Ajustați timpul de activare și dezactivare a casetei de accesare pe baza animației.
- Atribuiți coliderul Hitbox variabilei Hitbox.
5. Gestionarea coliziunilor
- Schimbați etichetele obiectelor de joc inamice în "Enemy".
- Creați un nou script, denumiți-l "Hitbox" apoi inserați codul de mai jos în el:
'Hitbox.cs'
using UnityEngine;
public class Hitbox : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Enemy"))
{
// Damage or destroy the enemy.
Destroy(collision.gameObject);
}
}
}
- Atașați scriptul "Hitbox" la obiectul hitbox.
Întrebări de adresat:
- Cum știe caseta de accesare când să se activeze în timpul animației?: caseta de accesare este activată de funcția 'Invoke' din 'MeleeAttack.cs' script. Timpul poate fi ajustat în funcție de cadrul în care ar trebui să aterizeze atacul.
- Ce se întâmplă dacă hitbox-ul se ciocnește de mai mulți inamici simultan?: folosind scriptul 'Hitbox', fiecare inamic cu eticheta "Enemy" care se ciocnește cu hitbox-ul va fi distrus. Ajustați scriptul pentru a gestiona daunele sau alte efecte.
- Butonul de atac poate fi schimbat din tasta Spațiu?: Da, în scriptul 'MeleeAttack.cs', linia dacă ('Input.GetKeyDown(KeyCode.Space)' ) verifică apăsarea tastei Space. Înlocuiți 'KeyCode.Space' cu o altă valoare 'KeyCode' pentru a schimba butonul de atac.
Concluzie
Acest ghid oferă un cadru de bază pentru implementarea unui atac corp la corp 2D în Unity. Îmbunătățiri precum adăugarea de efecte sonore, feedback vizual și perfecționarea logicii de detecție a loviturilor pot îmbunătăți și mai mult experiența atacului corp la corp.