@Void59

Как создать переменную, которую можно приравнять к любому скрипту через GetComponent?

Доброго времени суток!
Я делаю скролл-шутер на Unity. У разных врагов разные скрипты, но они используют один префаб пули. Пуля должна брать переменную вектора из скрипта врага, но при написании скрипта возникает проблема: для разных врагов приходится писать отдельную переменную скрипта. Более того, при появлении приравнение переменной к скрипту через GetComponent происходит в блоке try-catch, из-за чего часто у пули просто не получается получить вектор и она остается висеть на месте. Как можно решить мою проблему?
Скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBullet : MonoBehaviour
{
    [SerializeField] Rigidbody2D rb;
    [SerializeField] float speed;
    Vector2 dir;
    bool is_changed = false;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player")) { Destroy(this.gameObject); }

        if (collision != null)
        {
            if (!is_changed)
            {
                try
                {
                    try
                    {
                        dir = collision.GetComponent<EnemyCannon>().direction;
                    }
                    catch { }
                    try
                    {
                        dir = collision.GetComponent<CrossEnemyCannon>().direction;
                    }
                    catch { }
                    is_changed = true;
                }
                catch { }
            }
        }
    }

    private void FixedUpdate()
    {
        rb.velocity = dir.normalized * speed;
    }
}
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Crebor
А если управлять пулей из скрипта врага? Такой вариант не рассматриваете? Например:
public Rigidbody shoot;
void fire1 () 
	{   
		
        Rigidbody rocketClone = (Rigidbody) Instantiate(shoot, transform.position, transform.rotation);	
	rocketClone.velocity = cannon.transform.forward *100f;
		
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы