Een melee-gevechtssysteem creëren in Unity (2024)

Melee-gevechten in games verwijzen naar gevechten op korte afstand waarbij spelers wapens of hun eigen lichaam gebruiken om vijanden aan te vallen. Dit soort gevechten is cruciaal in veel gamegenres, waaronder actie-avontuur, rollenspel en vechtgames. Melee-systemen voegen diepte toe aan de gameplay en bieden spelers een diepgewortelde en meeslepende ervaring die verschilt van gevechten op afstand. Het implementeren van een melee-systeem in Unity omvat scripting, animatie en botsingsdetectie om soepele en responsieve gevechtsmechanismen te garanderen.

In dit artikel begeleiden we je door de stappen om een ​​basis melee-gevechtssysteem in Unity te creëren, geschikt voor beginners. We behandelen het instellen van het personage van de speler, het maken van melee-aanvalsanimaties, het scripten van de aanvalslogica en het implementeren van botsingsdetectie om treffers te registreren.

Het belang van melee-gevechten in games

Melee-gevechten zijn om verschillende redenen essentieel in bepaalde soorten games:

  • Meeslepende gameplay: gevechten van dichtbij kunnen intense en boeiende gameplay-ervaringen creëren, waardoor spelers zich meer verbonden voelen met de actie.
  • Variatie: Het toevoegen van melee-gevechten aan een spel dat voornamelijk afstandsgevechten bevat, zorgt voor variatie en houdt de gameplay fris en interessant.
  • Karakter- en wereldopbouw: Melee-gevechten kunnen de capaciteiten van het personage en de setting van het spel weerspiegelen, waardoor het algehele verhaal en de wereldopbouw worden verbeterd.
  • Strategische diepte: Spelers moeten rekening houden met positionering, timing en wapenkeuze, waardoor strategische lagen aan de gameplay worden toegevoegd.

Het spelerspersonage instellen

  1. Maak een nieuw project: Open Unity en maak een nieuw 3D-project.
  2. Een spelerspersonage toevoegen: Importeer of maak een 3D-model voor uw spelerspersonage. U kunt indien nodig gratis middelen uit de Unity Asset Store gebruiken.
  3. De animatorcontroller instellen: Maak een animatorcontroller om de animaties van de speler te beheren. Importeer de benodigde animaties (inactief, lopen, aanvallen) en stel de animatiestatussen en -overgangen in.

Melee Attack-animaties maken

  1. Importeer aanvalsanimaties:
    • Download of maak aanvalsanimaties voor je personage.
    • Importeer deze animaties in Unity en voeg ze toe aan uw Animator Controller.
  2. Animatieovergangen instellen:
    • Creëer overgangen tussen de inactieve, loop- en aanvalsstatussen in de Animator Controller.
    • Gebruik parameters zoals 'isAttacking' om deze overgangen te besturen.

De aanvalslogica scripten

We zullen een C#-script schrijven dat de logica van de melee-aanval van de speler afhandelt, inclusief het activeren van de aanvalsanimatie en het detecteren van treffers.

  1. Maak een nieuw script:
    • Klik met de rechtermuisknop in het projectvenster, selecteer 'Create -> C# Script' en noem deze 'PlayerCombat'.
  2. Scriptimplementatie:
    • Dubbelklik op het script om het te openen in de code-editor van uw voorkeur (bijvoorbeeld 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); }}
  3. Het script toewijzen:
    • Voeg het 'PlayerCombat'-script toe aan het personage van je speler.
    • Stel de velden 'Animator', 'Attack Point' en andere velden in het infovenster in.

Vijandelijke logica implementeren

  1. Maak een vijandelijk script:
    • Klik met de rechtermuisknop in het projectvenster, selecteer 'Create -> C# Script' en noem deze 'Enemy'.
    • Dubbelklik op het script om het te openen in de code-editor van uw voorkeur.
    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); }}
  2. Het script toewijzen:
    • Voeg het 'Enemy'-script toe aan je vijandelijke objecten.

Visuele en audiofeedback toevoegen

Het verbeteren van de melee-gevechtservaring met visuele en audiofeedback is cruciaal voor de tevredenheid van spelers. Hier leest u hoe u het moet doen:

  1. Hit-effecten toevoegen:
    • Creëer deeltjeseffecten voor wanneer een aanval een vijand treft.
    • Creëer deze effecten met de 'Attack'-methode wanneer een vijand wordt geraakt.
  2. Voeg geluidseffecten toe:
    • Importeer geluidseffecten voor de aanval en de impact.
    • Gebruik de component 'AudioSource' om deze geluiden af ​​te spelen tijdens aanvallen en wanneer vijanden worden geraakt.
    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); }}

Conclusie

Het implementeren van een melee-vechtsysteem in Unity kan de gameplay-ervaring aanzienlijk verbeteren, vooral in genres waarin gevechten van dichtbij essentieel zijn. Door deze handleiding te volgen, kun je een basisgevechtssysteem creëren, compleet met animaties, aanvalslogica en botsingsdetectie. Naarmate u zich meer op uw gemak voelt met Unity, kunt u het systeem verder verfijnen om aan uw behoeften te voldoen.

Een melee-gevechtssysteem creëren in Unity (2024)

References

Top Articles
Latest Posts
Article information

Author: Chrissy Homenick

Last Updated:

Views: 6392

Rating: 4.3 / 5 (54 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Chrissy Homenick

Birthday: 2001-10-22

Address: 611 Kuhn Oval, Feltonbury, NY 02783-3818

Phone: +96619177651654

Job: Mining Representative

Hobby: amateur radio, Sculling, Knife making, Gardening, Watching movies, Gunsmithing, Video gaming

Introduction: My name is Chrissy Homenick, I am a tender, funny, determined, tender, glorious, fancy, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.