Есть несколько видов оружия и у каждого есть свой префаб выстрела, не могу понять, как это реализовать
Код:
Класс, где выбирается оружие
Код
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);
}
Вот тут задается параметры оружия