Skip to content Skip to sidebar Skip to footer

Widget HTML #1

Create a Meele Combat System in Unity and C#


Melee combat systems are a fundamental aspect of many video games, providing players with a visceral and engaging experience. In this tutorial, we'll walk through the process of creating a simple melee combat system in Unity using C#. This system will include player input, animations, and collision detection to simulate melee attacks.

Learn More

Setting Up the Unity Project

Create a New Unity Project:

Open Unity and create a new 3D project. Ensure you have the latest version of Unity installed.

Import Assets:

For this tutorial, you'll need a 3D character model with animations. You can find free assets on the Unity Asset Store or use your own. Import the character model and animations into the project.

Set Up the Scene:

Create a new scene and place the character in the scene. Set up the camera to follow the character. Add any other elements you want in the scene, such as enemies or obstacles.

Player Movement

Let's start by implementing basic player movement.

Character Controller:

Attach a CharacterController component to your player character. This component will handle basic physics interactions.

Player Script:

Create a new C# script called PlayerController and attach it to the player GameObject. Open the script in your preferred code editor.


csharp

Copy code

using UnityEngine;


public class PlayerController : MonoBehaviour

{

    private CharacterController characterController;

    public float speed = 5f;


    void Start()

    {

        characterController = GetComponent<CharacterController>();

    }


    void Update()

    {

        MovePlayer();

    }


    void MovePlayer()

    {

        float horizontal = Input.GetAxis("Horizontal");

        float vertical = Input.GetAxis("Vertical");


        Vector3 movement = new Vector3(horizontal, 0f, vertical) * speed * Time.deltaTime;

        characterController.Move(movement);

    }

}

This script allows the player to move using the arrow keys or the joystick.

Melee Attack Animation

Now, let's implement a basic melee attack animation.

Animation Controller:

Create an Animation Controller for your character. Set up animation transitions and parameters for idle, walk, and attack animations.

Attack Animation:

Import or create a melee attack animation. Add it to the Animation Controller.

Player Script Update:

Update the PlayerController script to trigger the attack animation.

csharp

Copy code

public class PlayerController : MonoBehaviour

{

    // ... (previous code)


    public Animator animator;


    void Start()

    {

        // ... (previous code)

        animator = GetComponent<Animator>();

    }


    void Update()

    {

        MovePlayer();


        if (Input.GetButtonDown("Fire1"))  // Change "Fire1" to the input you want for attacking

        {

            Attack();

        }

    }


    void Attack()

    {

        animator.SetTrigger("Attack");

    }

}

Melee Combat Collision

To make the melee attack interact with the environment or enemies, we need to implement collision detection.

Create a Sword Object:

Add a child GameObject to your player representing the sword. Adjust its position and rotation to match the player's hand.

Player Script Update:

Modify the Attack method to handle collision detection.

csharp

Copy code

public class PlayerController : MonoBehaviour

{

    // ... (previous code)

    public Transform attackPoint;

    public float attackRange = 1f;

    public LayerMask enemyLayers;

    void Start()

    {

        // ... (previous code)

    }

    void Update()

    {

        MovePlayer();


        if (Input.GetButtonDown("Fire1"))

        {

            Attack();

        }

    }

    void Attack()

    {

        animator.SetTrigger("Attack");


        Collider[] hitEnemies = Physics.OverlapSphere(attackPoint.position, attackRange, enemyLayers);

        foreach (Collider enemy in hitEnemies)

        {

            // Handle damage or other interactions with the enemy

            // For example: enemy.GetComponent<EnemyHealth>().TakeDamage(damageAmount);

        }

    }

    void OnDrawGizmosSelected()

    {

        if (attackPoint == null)

            return;

        Gizmos.DrawWireSphere(attackPoint.position, attackRange);

    }

}

Enemy Interaction

If you don't have an enemy script, create one similar to the player script. Then, adjust the player script to interact with enemies.

csharp

Copy code

public class EnemyController : MonoBehaviour

{

    public int maxHealth = 100;

    private int currentHealth;


    void Start()

    {

        currentHealth = maxHealth;

    }

    public void TakeDamage(int damage)

    {

        currentHealth -= damage;


        // Play hit animation or effects

        if (currentHealth <= 0)

        {

            Die();

        }

    }

    void Die()

    {

        // Play death animation or effects

        Destroy(gameObject);

    }

}

Now, when the player attacks, the TakeDamage method of the enemy script is called.

Final Thoughts

This basic melee combat system can be expanded upon by adding combo attacks, different types of weapons, and more complex enemy behaviors. Experiment with Unity's animation events, particle systems, and sound effects to enhance the overall experience.

Remember, this is just a starting point, and you can customize and expand upon these ideas based on the specific requirements of your game. Happy coding!

View -- > Create a Meele Combat System in Unity and C#