Понедельник, 18 Ноября 2024, 01:32

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Оптимизация
defGMDefeloperДата: Вторник, 20 Февраля 2018, 12:51 | Сообщение # 1
частый гость
Сейчас нет на сайте
Моя главная проблема в том что я сначало пишу код,а потом его переделываю
Вот например

public Vector3 position;
public Transform transform;
нафига 2 раза хранить позицию спросите вы?
Звезды загружается из файла сохранения(координаты,цвет и т.д).
Логично будет написать transform.position = ReadLine...
Но не тут то было .Есть 2 метода:
Код

Первый инициализирует структуру по данным в файле,второй создает обьект и дополняет эти данные.Получается я не могу сразу записать координаты в несуществующий transform
Можно ли как -то сделать не криво?).А то получается координаты хранятся 2 раза.
И ещё кое что.


Корутин который отвечает за отрисовку звезд.Внутри запускается другие три:

Смешно то,что Масштаб и поворот 3д плайна с текстурой,быстрее чем Camera.main.WorldToScreenPoint
Что можно убрать/переписать.Самую большую нагрузку дают Vector3.Distance
и неявное обращение ==null.
Как лучше в плане производительности:

Планеты сделать подструктурой звезд,или сделать отдельную структуру,но тогда нужно будет сохранять данные о звезде в этой структуре

Буду премного благодарен)Надеюсь ещё не надоел.С архитектурой у меня проблемы всегда были.

Знаю вопросов много,но вся архитектура упираетс в это)я то кое-как сделаю,но хотелось бы по людски


Сообщение отредактировал defGMDefeloper - Вторник, 20 Февраля 2018, 20:30
drcrackДата: Вторник, 20 Февраля 2018, 17:40 | Сообщение # 2
старожил
Сейчас нет на сайте
Зачем все эти подчеркивания вокруг имен методов, переменных и аргументов?
defGMDefeloperДата: Вторник, 20 Февраля 2018, 18:40 | Сообщение # 3
частый гость
Сейчас нет на сайте
Там ещё есть структуры.Если иерархию не разделять можно запутаться).По крайней мере я пару раз запутался.Впрочем,это не совсем по теме)И комментарии на fps не влияют никак

Сообщение отредактировал defGMDefeloper - Вторник, 20 Февраля 2018, 18:46
seamanДата: Вторник, 20 Февраля 2018, 20:04 | Сообщение # 4
старожил
Сейчас нет на сайте
Цитата
Самую большую нагрузку дают Vector3.Distance

Используй везде не его, а sqrMagnitude. Он гораздо быстрее. Правда при этом все сравнения нужно менять.
Цитата
Зачем все эти подчеркивания

Не знаю как у топикастера, я всегда все приватные поля класса начинаю с подчеркивания. Сразу видно, что они приватные.
defGMDefeloperДата: Вторник, 20 Февраля 2018, 20:15 | Сообщение # 5
частый гость
Сейчас нет на сайте
Цитата
Используй везде не его, а sqrMagnitude. Он гораздо быстрее. Правда при этом все сравнения нужно менять.

Да у меня дистанция практически везде - это коефициент линейной интерполяции(текущая на максимальную),было 3 остался один.Два заменил на -offset.z.Зачем считать расстояние до камеры если оно уже есть).Тупанул.Остался 1.Т.к он сравнивается с константами- ничиго переписывать и не нужно.
А что насчет сктруктур?Как лучше сделать.
Трехэтажные структуры эт норм?(Star.Planet.Sputnik)


Сообщение отредактировал defGMDefeloper - Вторник, 20 Февраля 2018, 20:15
drcrackДата: Вторник, 20 Февраля 2018, 20:24 | Сообщение # 6
старожил
Сейчас нет на сайте
Для оптимизации, структуры можно передавать по ссылке, чтобы не копировать каждый раз
Больше ничем помочь не могу потому что копаться в этом коде желания нет, отформатируй его хотя бы)

Цитата
Сразу видно, что они приватные.

Во-первых это не нужно, во-вторых код начинает выглядеть как говно (точнее как код на Си из 1990 годов), в-третьих разработчики языка рекомендуют этого не делать: https://docs.microsoft.com/en-us....entions
DO NOT use underscores, hyphens, or any other nonalphanumeric characters.
Впрочем, дело твое)
defGMDefeloperДата: Вторник, 20 Февраля 2018, 20:30 | Сообщение # 7
частый гость
Сейчас нет на сайте
Структуру выровнял,и правда страшно выглядела)),но новая проблемка.
sqrMagnitude мне выдает заоблачные цифры.Из-за того что масштабы достаточно большие(.
Код
public float[] drawRange = new float[]{ _radius *4*_radius *4, _radius * 3*_radius * 3, _radius * 2*radius * 2};//const
dist2ship = (ship.transform.position - starrange[r].position).sqrMagnitude;


Ай,старый прикол,не правидёшь.Если Public оно ток в инспекторе меняется.
Сделал чтоб при вход в солнечную систему создавались планеты и крутились вокруг звезды.

Как запихнуть в 1 цикл я не придумал =(.Разве что bool[] создавать.

ВАЖНО
очень много обращений к transform.
Код
sw.WriteLine(load.target.transform.gameObject.name);
                    sw.WriteLine(load.ship.transform.position.x);
                    sw.WriteLine(load.ship.transform.position.y);
                    sw.WriteLine(load.ship.transform.position.z);
                    for (int i = 0; i < load.starrange.Count; i++)
                    {
                        if (!load.starrange[i].isGenerate)
                    continue;
                        stars.WriteLine(i);
                        for (int g = 0; g < galaxy._roundLayer; g++)
                        {
                            stars.WriteLine(load.stars[i, g].starName);  
                            stars.WriteLine(load.stars[i, g].position.x);
                            stars.WriteLine(load.stars[i, g].position.y);
                            stars.WriteLine(load.stars[i, g].position.z);
                            stars.WriteLine(load.stars[i, g].StarType);
                        }
                    }

Вот код,к примеру.Нужно ли создавать предварительно ссылку перед всеми этими обращениями,или это никак не влияет на производительность?


Сообщение отредактировал defGMDefeloper - Вторник, 20 Февраля 2018, 21:17
allodsДата: Воскресенье, 04 Марта 2018, 21:20 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Цитата defGMDefeloper ()
Вот код,к примеру.Нужно ли создавать предварительно ссылку перед всеми этими обращениями,или это никак не влияет на производительность?

обращение на прямую к компоненту всегда быстрее. Занесите Transform в переменную
  • Страница 1 из 1
  • 1
Поиск:

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