год и 5 месяцев назад
Наследование в Unity на примере системы оружия
Как использовать наследование для создания системы оружия в Unity
В любой игре с боевой системой есть разные виды оружия: мечи, луки, огнестрел. Вместо того, чтобы дублировать код для каждого типа оружия, мы можем использовать наследование, чтобы создать гибкую и расширяемую систему.
Сегодня мы создадим базовый класс оружия и несколько его подклассов с разными механиками атаки.
Базовый класс Weapon
Создадим базовый класс Weapon, который будет содержать общие характеристики и методы:
Этот класс определяет имя оружия, урон, перезарядку атаки и саму атаку. Теперь создадим разные виды оружия.
Ближнее оружие (MeleeWeapon)
Создадим класс для ближнего оружия, например меча:
Этот класс наследует все свойства Weapon, но дополняет их логикой ближнего боя.
Дальнобойное оружие (RangedWeapon)
Теперь создадим класс для дальнобойного оружия, например пистолета:
Теперь при атаке создается снаряд, который можно запрограммировать на движение и нанесение урона.
Использование системы
Добавляем оружие на персонажа:
Теперь можно назначать игроку разные виды оружия, и система сама будет использовать нужную механику атаки.
Использование наследования позволяет легко добавлять новые типы оружия, не дублируя код. Нужно добавить огнемет? Просто создаем Flamethrower : Weapon и переопределяем Attack().
Таким образом, мы получаем гибкую, масштабируемую и удобную систему.
Какой вид оружия вы бы добавили в свою игру?
Наследование в Unity на примере системы оружия
Как использовать наследование для создания системы оружия в Unity
В любой игре с боевой системой есть разные виды оружия: мечи, луки, огнестрел. Вместо того, чтобы дублировать код для каждого типа оружия, мы можем использовать наследование, чтобы создать гибкую и расширяемую систему.
Сегодня мы создадим базовый класс оружия и несколько его подклассов с разными механиками атаки.
Базовый класс Weapon
Создадим базовый класс Weapon, который будет содержать общие характеристики и методы:
using UnityEngine;
using System.Collections;
public abstract class Weapon : MonoBehaviour
{
public string weaponName;
public int damage;
public float attackCooldown;
protected bool canAttack = true;
public virtual void Attack()
{
if (canAttack)
{
Debug.Log($"{weaponName} атакует с уроном {damage}");
StartCoroutine(AttackCooldown());
}
}
private IEnumerator AttackCooldown()
{
canAttack = false;
yield return new WaitForSeconds(attackCooldown);
canAttack = true;
}
}
Этот класс определяет имя оружия, урон, перезарядку атаки и саму атаку. Теперь создадим разные виды оружия.
Ближнее оружие (MeleeWeapon)
Создадим класс для ближнего оружия, например меча:
public class MeleeWeapon : Weapon
{
public float attackRange;
public override void Attack()
{
base.Attack();
Debug.Log($"Ближняя атака мечом {weaponName} на расстоянии {attackRange}");
// Здесь можно добавить логику удара по врагу в радиусе атаки
}
}
Этот класс наследует все свойства Weapon, но дополняет их логикой ближнего боя.
Дальнобойное оружие (RangedWeapon)
Теперь создадим класс для дальнобойного оружия, например пистолета:
public class RangedWeapon : Weapon
{
public GameObject projectilePrefab;
public Transform shootPoint;
public override void Attack()
{
if (canAttack)
{
base.Attack();
GameObject projectile = Instantiate(projectilePrefab, shootPoint.position, shootPoint.rotation);
Debug.Log($"Выстрел из {weaponName}");
}
}
}
Теперь при атаке создается снаряд, который можно запрограммировать на движение и нанесение урона.
Использование системы
Добавляем оружие на персонажа:
public class Player : MonoBehaviour
{
public Weapon currentWeapon;
void Update()
{
if (Input.GetMouseButtonDown(0)) // ЛКМ - атака
{
if (currentWeapon != null)
currentWeapon.Attack();
}
}
}
Теперь можно назначать игроку разные виды оружия, и система сама будет использовать нужную механику атаки.
Использование наследования позволяет легко добавлять новые типы оружия, не дублируя код. Нужно добавить огнемет? Просто создаем Flamethrower : Weapon и переопределяем Attack().
Таким образом, мы получаем гибкую, масштабируемую и удобную систему.
Какой вид оружия вы бы добавили в свою игру?
