Unity 2D 近战攻击教程

Unity 引擎 为创建 2D 和 3D 游戏提供了广泛的平台。许多动作游戏的基本元素之一是近战攻击。在 2D 环境中,此类攻击通常包括角色挥舞武器或挥拳,可以使用 Unity 动画、物理和脚本工具的组合来完成。

先决条件

1. 设置项目和场景

  • 创建 一个新的 2D Unity 项目(如果还没有)。
  • 导入或创建角色精灵。将其放置在场景中。

2. 设置近战攻击动画

  • 在“项目”窗口中,右键单击并创建一个 "Animator Controller"。将其命名为 "CharacterAnimator"。
  • 通过选择角色并将动画师拖动到 "Animator" 组件,将此动画师分配给角色。
  • 打开动画窗口。选择角色后,创建一个名为 "MeleeAttack" 的新动画。
  • 为简单起见,我们假设这次攻击是一次快速攻击。对精灵进行动画处理以模拟此操作。

3. 创建攻击命中框

  • 添加一个空的 GameObject 作为角色的子级。这将充当攻击的碰撞箱。
  • 和 "Box Collider 2D" 附加到空游戏对象。调整其大小和位置以匹配角色在出拳时击中的位置。
  • 通过取消选中 "Active" 框来停用 Hitbox。这确保它仅在攻击动画期间激活。

4. 编写攻击逻辑脚本

  • 创建 一个新脚本,将其命名为 "MeleeAttack",然后将以下代码粘贴到其中:

'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);
    }
}
  • 的"MeleeAttack"脚本附加到主角
  • 根据 animation 调整碰撞盒激活和停用时间。
  • 将 hitbox 碰撞器分配给 Hitbox variable

5. 处理碰撞

  • 将敌方游戏对象的标签更改为"Enemy"。
  • 创建 一个新脚本,将其命名为 "Hitbox",然后将以下代码粘贴到其中:

'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);
        }
    }
}
  • 将脚本 "Hitbox" 附加到 hitbox 对象。

需要解决的问题:

  1. hitbox 如何知道动画期间何时激活?:hitbox 由 'MeleeAttack.cs' 脚本中的 'Invoke' 函数激活。可以根据攻击应该发生的帧来调整时间。
  2. 如果碰撞箱同时与多个敌人碰撞会发生什么?:使用提供的'Hitbox'脚本,每个与碰撞箱碰撞的带有"Enemy"标签的敌人都会被摧毁。调整脚本以管理损坏或其他影响。
  3. 攻击按钮可以从空格键更改吗?:是的,在 'MeleeAttack.cs' 脚本中, if ('Input.GetKeyDown(KeyCode.Space)') 行检查空格键按下。将 'KeyCode.Space' 替换为另一个 'KeyCode' 值以更改攻击按钮。

结论

本指南提供了在 Unity 中实施 2D 近战攻击的基本框架。添加音效、视觉反馈以及细化命中检测逻辑等增强功能可以进一步增强近战攻击体验。