Среда, 01 Мая 2024, 15:36

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Смена префаба выстрела при смене оружия
Смена префаба выстрела при смене оружия
ShadiestColtДата: Суббота, 02 Декабря 2023, 10:30 | Сообщение # 1
уже был
Сейчас нет на сайте
Есть несколько видов оружия и у каждого есть свой префаб выстрела, не могу понять, как это реализовать
Код:
Класс, где выбирается оружие
Код

public class Weapon : Item
{
    public int minDamage;
    //public GameObject bulletPrefabSteel;
    //public GameObject bulletPrefabBone;
    public override bool use(PlayerMove player, ItemInstance itemData)
    {
        player.activeItem = itemData;
        player.damage.damage = minDamage;
       //player.bulletPrefab.bulletPrefab = bulletPrefabSteel;
        //player.bulletPrefab.bulletPrefab = bulletPrefabBone;
        return false;
    }
}

Класс экземпляра предмета
Код

public class ItemInstance
{
    [SerializeReference] public Item itemData;
    [SerializeField] public int damage;

    public bool use(PlayerMove player)
    {
        return itemData.use(player, this);
    }
}

Класс выстрелов
Код

public class Shooting : MonoBehaviour
{
    public Transform firePoint;
    public GameObject bulletPrefab;
    public Animator animator;
    public Camera cam;
    public float bulletForce = .001f;

    public float range = 10f;
    [HideInInspector]
    public float offset = 270;

    private float attackTime = .75f;
    private float attackCounter = .75f;

    public float shootRate = 1f;
    public float nextShoot = 1f;
    private bool isAttack;

    // Update is called once per frame
    void Update()
    {
        if (isAttack)
        {
            attackCounter -= Time.deltaTime;
            if (attackCounter <= 0)
            {
                animator.SetBool("isAttack", false);
                isAttack = false;
            }
        }
        if (Input.GetMouseButtonDown(0) && Time.time>=nextShoot)
        {
            nextShoot= Time.time +1/shootRate;
            attackCounter = attackTime;
            animator.SetBool("isAttack", true);
            Shoot();
            isAttack = true;
        }
        Vector3 dif = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        float rotZ = Mathf.Atan2(dif.y, dif.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);
    }
    void Shoot()
    {
        GameObject bullet = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
        Rigidbody2D rb = bullet.GetComponent<Rigidbody2D>();
        rb.AddForce(firePoint.up * bulletForce, ForceMode2D.Impulse);
    }
}

И кусок кода, который выбирает выбранное оружие, чтобы его использовать
Код

public void use(int i)
    {
        ItemInstance item = GetComponent<Inventory>().getItem(i);
        if (item == null) return;

        if(item.use(this))
            GetComponent<Inventory>().removeItem(i);
    }

Вот тут задается параметры оружия



Сообщение отредактировал ShadiestColt - Суббота, 02 Декабря 2023, 10:31
killing002Дата: Понедельник, 05 Февраля 2024, 00:24 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Как вариант - разделить дату предметов на статическую и динамическую. Все статические данные закинуть в scriptableObject'ы и настраивать эти ассеты в редакторе. Для разных префабов проджектайлов просто создать разные ассеты.

123
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Смена префаба выстрела при смене оружия
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг