Добрый день!
Более-менее серьёзно в юнити что-то клепать начал чуть более недели назад.
И решил начать с переноса своей наработке в 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 раз за шаг. Вывел их из цикла и всё стало хорошо.