Суббота, 11 Мая 2024, 05:23

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Оптимизация функции
Оптимизация функции
SyankДата: Среда, 10 Января 2018, 14:45 | Сообщение # 1
участник
Сейчас нет на сайте
Добрый день!
Более-менее серьёзно в юнити что-то клепать начал чуть более недели назад.
И решил начать с переноса своей наработке в GMS. Суть - отрисовка траектории объекта который отправляется в полёт. Разобрался с расчётом. Но вот только этот расчёт понижает fps сразу до 15-20 в зависимости от повторения цикла. За шаг цикл делает 40 проходов, мне кажется для игры это не так и много. Может ошибаюсь?
Подскажите, что я сделал криво, почему такая низкая производительность.
Заранее спасибо =)
Код
    //функция отрисовки траектории
    void draw_trail(Vector2 vec)
    {
        GameObject oPlayer = GameObject.Find("objPlayer");
        Rigidbody2D rb = oPlayer.GetComponent<Rigidbody2D>();
        player_movement sc_pla_mv = oPlayer.GetComponent<player_movement>();
        float v_angle = (Vector2.Angle(vec, Vector2.right) * Mathf.Deg2Rad);//угол под которым совершается бросок
        float fspeed = vec.magnitude;
        float i = 0;
        Debug.Log("угол: " + v_angle + " НС: " + fspeed);
        do
        {
            float tr_x;
            float tr_y;
            float tr_px;
            float tr_py;
            float t = i;
            float pt = (i += 0.05f);
            float pl_x = oPlayer.transform.position.x;
            float pl_y = oPlayer.transform.position.y;
            float grav = Physics2D.gravity.y * rb.gravityScale;
            Debug.Log(grav);
            tr_x = fspeed * pt * Mathf.Cos(v_angle);
            tr_y = fspeed * pt * Mathf.Sin(v_angle) + ((grav * Mathf.Pow(pt, 2)) / 2);
            tr_px = fspeed * t * Mathf.Cos(v_angle);
            tr_py = fspeed * t * Mathf.Sin(v_angle) + ((grav * Mathf.Pow(t, 2)) / 2);
            Vector2 vector_from = new Vector2(tr_x + pl_x, tr_y + pl_y);
            Vector2 vector_to = new Vector2(tr_px + pl_x, tr_py + pl_y);
            //Debug.Log("Траектория проходит через точку" + i + " (" + tr_px + ";" + tr_py + ")");
            Debug.DrawLine(vector_from, vector_to, Color.red);
            i += 0.05f;
        } while (i < 2);

    }

Добавлено (10 января 2018, 14:45)
---------------------------------------------
Ох, простите. Пока проверял своё сообщение на ошибки заметил в коде, что много переменных которые не нужно определять 40 раз за шаг. Вывел их из цикла и всё стало хорошо.

Сообщение отредактировал Syank - Среда, 10 Января 2018, 14:36
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Оптимизация функции
  • Страница 1 из 1
  • 1
Поиск:

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