LineRenderer на секунду спавнится не в том месте [Unity 2D]

Есть небольшой опыт в программировании, но много чего не знаю

В моём проекте при нажатии на кнопку персонаж стреляет лучами и наносит врагам урон. Урон наносится одновременно всем врагам на определённой дистанции, лучи выполняют чисто косметическую функцию. При нажатии на кнопку считываются все враги в радиусе атаки, им наносится урон, в этот же момент спавнится префаб с компонентом LineRenderer, скрипт просчитывает, где находятся враги, и проводит лучи от ShotPoint'а игрока во врагов. Игрок может ходить по карте и, собственно, стрелять с любого места на карте. Всё работает отлично, но заметил проблему: при нажатии кнопки атаки вместе со всеми лучами появляется какой-то левый луч, который идёт от игрока в нулевые координаты (или от нулевых координат в игрока, не знаю). Он появляется буквально на полсекунды, но это очень некрасиво выглядит во время игры. Скрипт самого луча, Shocker:

    private LineRenderer lr;

    private Transform target;


    private void Awake()
    {
        lr = GetComponent<LineRenderer>();
    }

    public void AssignTarget(Vector3 startPos, Transform newTarget)
    {
        lr.positionCount = 2;
        lr.SetPosition(0, startPos);
        target = newTarget;
    }

    private void Update()
    {
        lr.SetPosition(1, target.position);
    }

Скрипт пушки, которая спавнит префаб луча:


    public List<EnemyHealth> enemies;
    private List<Shocker> allLines;
    public Shocker linePrefab;
    public GameObject shotpoint;
    public int damage;


    private void Awake()
    {
        allLines = new List<Shocker>();

    }
    public void Update()
    {
        if (Input.GetKeyDown(KeyCode.X))
        {
            ShockerShooting();
        }
    }
    public void ShockerShooting()
    {
        if (enemies.Count > 0)
        //это чтобы игрок не мог стрелять, когда в радиусе нет врагов
        {
            for (int d = 0; d < enemies.Count; d++)
            {
                Shocker newLine = Instantiate(linePrefab);
                allLines.Add(newLine);
                newLine.AssignTarget(shotpoint.transform.position, enemies[d].transform);
            }
            foreach (var enemy in enemies)
            {
                enemy.TakeDamage(damage);
                //скрипт врага, думаю, здесь не нужно показывать
            }
        }
    }
    /* это просто ищет игроков в радиусе, и я
    не думаю, что как-то связано с проблемой*/
    public void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Enemy"))
        {
            enemies.Add(other.GetComponent<EnemyHealth>());
        }
    }
    public void OnTriggerExit2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Enemy"))
        {
            enemies.Remove(other.GetComponent<EnemyHealth>());
        }
    }

В редакторе тот "лишний" луч появляется лишь иногда и на полсекунды, а при билде луч появляется каждый раз и чуть дольше. Думаю, это как-то связано со скоростью Юнити, мол, он не успевает задать правильное значение лучу и поэтому тот спавнится в начальных координатах. Ещё считаю важным подметить, что мои префабы лучей уничтожаются через определённое количество времени кодом, который висит на префабах (просто выполняет Destroy(gameObject) через float time времени). Когда я устанавливаю лучам, например, уничтожение через 5 секунд, а на экране только 3 врага, то спавнится 4 луча, три из которых направленны на врагов, а четвёртый в нулевые координаты. Четвёртый луч исчезает почти сразу, а те три луча уничтожаются только через пять секунд.

Как можно это всё исправить? Извините, если вопрос какой-то супер банальный или код супер кривой. Я вообще не шарю за LineRenderer и делал своё оружие по видео. Но в видео чувак делал фиксированное количество лучей, которые просто включаются/выключаются при нажатии кнопки и вылетает всегда из фиксировонного места, так что в своём куда я много чего поменял по "чуйке", но так как в лучах не разбираюсь, какие-то частички кода не понимаю.


Ответы (1 шт):

Автор решения: gord1402

Не уверен, но возможно проблема в том что в AssignTarget вы не устанавливаете положение врага, после без вызова Update в Shocker, Unity сразу запускает рендер из-за чего на 1 кадр появляется луч координаты игрока - 0,0. Хотя полсекунды слишком много для 1 кадра (При 60 fps в данном случаи луч появляется на ~16 миллисекунд). Попробуйте добавить установку координаты врага в AssignTarget.

→ Ссылка