Tworzenie systemu walki wręcz w Unity
Walka wręcz w grach odnosi się do walki na bliski dystans, podczas której gracze używają broni lub własnego ciała do atakowania wrogów. Ten rodzaj walki ma kluczowe znaczenie w wielu gatunkach gier, w tym w przygodowych grach akcji, odgrywaniu ról i grach walki. Systemy walki wręcz dodają głębi rozgrywce, zapewniając graczom emocjonujące i wciągające wrażenia, różniące się od walki dystansowej. Implementacja systemu walki wręcz w Unity obejmuje skrypty, animacje i wykrywanie kolizji, aby zapewnić płynną i responsywną mechanikę walki.
W tym artykule przeprowadzimy Cię przez kolejne etapy tworzenia podstawowego systemu walki wręcz w Unity, odpowiedniego dla początkujących. Omówimy konfigurowanie postaci gracza, tworzenie animacji ataku wręcz, tworzenie skryptów logiki ataku i wdrażanie wykrywania kolizji w celu rejestrowania trafień.
Znaczenie walki wręcz w grach
Walka wręcz jest niezbędna w niektórych typach gier z kilku powodów:
- Wciągająca rozgrywka: Walka w zwarciu może zapewnić intensywną i wciągającą rozgrywkę, dzięki czemu gracze poczują się bardziej związani z akcją.
- Różnorodność: Dodanie walki wręcz do gry, która obejmuje głównie walkę dystansową, zapewnia różnorodność oraz sprawia, że rozgrywka jest świeża i interesująca.
- Budowanie postaci i świata: Walka w zwarciu może odzwierciedlać zdolności postaci i scenerię gry, poprawiając ogólną narrację i budowanie świata.
- Głębia strategiczna: Gracze muszą rozważyć ustawienie, wyczucie czasu i wybór broni, dodając do rozgrywki warstwy strategii.
Konfigurowanie postaci gracza
- Utwórz nowy projekt: Otwórz Unity i utwórz nowy projekt 3D.
- Dodaj postać gracza: Importuj lub utwórz model 3D swojej postaci gracza. W razie potrzeby możesz skorzystać z bezpłatnych zasobów z Unity Asset Store.
- Skonfiguruj kontroler animatora: Utwórz kontroler animatora do obsługi animacji gracza. Zaimportuj niezbędne animacje (bezczynność, chodzenie, atak) i skonfiguruj stany animacji oraz przejścia.
Tworzenie animacji ataku wręcz
- Importuj animacje ataku:
- Pobierz lub utwórz animacje ataku dla swojej postaci.
- Zaimportuj te animacje do Unity i dodaj je do kontrolera Animator.
- Skonfiguruj przejścia animacji:
- Twórz przejścia między stanami bezczynności, spaceru i ataku w kontrolerze Animator.
- Aby kontrolować te przejścia, użyj parametrów takich jak 'isAttacking'.
Skryptowanie logiki ataku
Napiszemy skrypt w języku C#, który obsłuży logikę ataku wręcz gracza, włączając w to uruchamianie animacji ataku i wykrywanie trafień.
- Utwórz nowy skrypt:
- Kliknij prawym przyciskiem myszy w oknie Projekt, wybierz 'Create -> C# Script' i nazwij go 'PlayerCombat'.
- Implementacja skryptu:
- Kliknij dwukrotnie skrypt, aby otworzyć go w preferowanym edytorze kodu (np. Visual Studio Code).
using UnityEngine; public class PlayerCombat : MonoBehaviour { public Animator animator; public Transform attackPoint; public float attackRange = 0.5f; public LayerMask enemyLayers; public int attackDamage = 40; public float attackRate = 2f; private float nextAttackTime = 0f; void Update() { if (Time.time >= nextAttackTime) { if (Input.GetButtonDown("Fire1")) { Attack(); nextAttackTime = Time.time + 1f / attackRate; } } } void Attack() { animator.SetTrigger("Attack"); // Detect enemies in range of the attack Collider[] hitEnemies = Physics.OverlapSphere(attackPoint.position, attackRange, enemyLayers); // Damage them foreach (Collider enemy in hitEnemies) { enemy.GetComponent().TakeDamage(attackDamage); } } void OnDrawGizmosSelected() { if (attackPoint == null) return; Gizmos.DrawWireSphere(attackPoint.position, attackRange); } }
- Przypisywanie skryptu:
- Dołącz skrypt 'PlayerCombat' do swojej postaci gracza.
- Ustaw 'Animator', 'Attack Point' i inne pola w Inspektorze.
Wdrażanie logiki wroga
- Utwórz skrypt wroga:
- Kliknij prawym przyciskiem myszy w oknie Projekt, wybierz 'Create -> C# Script' i nazwij go 'Enemy'.
- Kliknij dwukrotnie skrypt, aby otworzyć go w preferowanym edytorze kodu.
using UnityEngine; public class Enemy : MonoBehaviour { public int maxHealth = 100; int currentHealth; void Start() { currentHealth = maxHealth; } public void TakeDamage(int damage) { currentHealth -= damage; if (currentHealth <= 0) { Die(); } } void Die() { // Add death animation or effects Destroy(gameObject); } }
- Przypisywanie skryptu:
- Dołącz skrypt 'Enemy' do obiektów wroga.
Dodawanie informacji zwrotnych wizualnych i dźwiękowych
Poprawa wrażeń związanych z walką wręcz za pomocą informacji wizualnych i dźwiękowych ma kluczowe znaczenie dla zadowolenia gracza. Oto jak to zrobić:
- Dodaj efekty trafień:
- Twórz efekty cząsteczkowe, gdy atak trafi wroga.
- Utwórz instancję tych efektów metodą 'Attack', gdy wróg zostanie trafiony.
- Dodaj efekty dźwiękowe:
- Importuj efekty dźwiękowe ataku i uderzeń.
- Użyj komponentu 'AudioSource', aby odtworzyć te dźwięki podczas ataków i trafień wrogów.
using UnityEngine; public class PlayerCombat : MonoBehaviour { public Animator animator; public Transform attackPoint; public float attackRange = 0.5f; public LayerMask enemyLayers; public int attackDamage = 40; public float attackRate = 2f; private float nextAttackTime = 0f; public AudioClip attackSound; public AudioClip hitSound; private AudioSource audioSource; public GameObject hitEffect; void Start() { audioSource = GetComponent(); } void Update() { if (Time.time >= nextAttackTime) { if (Input.GetButtonDown("Fire1")) { Attack(); nextAttackTime = Time.time + 1f / attackRate; } } } void Attack() { animator.SetTrigger("Attack"); audioSource.PlayOneShot(attackSound); // Detect enemies in range of the attack Collider[] hitEnemies = Physics.OverlapSphere(attackPoint.position, attackRange, enemyLayers); // Damage them and play hit effect foreach (Collider enemy in hitEnemies) { enemy.GetComponent().TakeDamage(attackDamage); audioSource.PlayOneShot(hitSound); Instantiate(hitEffect, enemy.transform.position, Quaternion.identity); } } void OnDrawGizmosSelected() { if (attackPoint == null) return; Gizmos.DrawWireSphere(attackPoint.position, attackRange); } }
Wniosek
Implementacja systemu walki wręcz w Unity może znacznie poprawić wrażenia z rozgrywki, szczególnie w gatunkach, w których najważniejsza jest walka w zwarciu. Postępując zgodnie z tym przewodnikiem, możesz stworzyć podstawowy system walki wręcz, wraz z animacjami, logiką ataku i wykrywaniem kolizji. W miarę jak oswoisz się z Unity, będziesz mógł dalej udoskonalać system, aby dopasować go do swoich potrzeb.