Страница 1 из 1

Как лучше организовать работу с переменными

СообщениеДобавлено: 03 фев 2016, 22:18
DimeX
Всем привет.

Заранее прошу прощения, уверен, вопрос скудный. Я пытаюсь поискать информацию в интернете, но видно не знаю как правильно составить вопрос.

Ситуация такова, хочу понять, какой вариант был бы лучше:

Вариант 1 (использовать целые/с плавающей запятой значения)
Синтаксис:
Используется csharp
void InvokeBoatGo ()
        {
                transform.position -= transform.right * 0.05f;
                player.transform.position -= transform.right * 0.05f;
        }
public void setMis()
        {
                InvokeRepeating ("InvokeBoatGo", 0.0f, 0.03f);
                level_1_boat_coll.setMis ();
        }
 


Вариант 2 (использовать объявленные переменные для них)
Синтаксис:
Используется csharp
void InvokeBoatGo ()
        {
                transform.position -= transform.right * moveSpeed;
                player.transform.position -= transform.right * moveSpeed;
        }
public void setMis()
        {
                InvokeRepeating ("InvokeBoatGo", startTIme, repeatTime);
                level_1_boat_coll.setMis ();
        }
 


Просто мне интересно, если мы используем вариант №1, то получается при каждом вызове в память будет записываться float число, которое со временем сотрется сборщиком мусора? Получается, второй вариант будет лучше?

Поправьте пожалуйста меня, если я не прав.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 03 фев 2016, 22:23
DbIMok

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 03 фев 2016, 22:54
waruiyume
Без разницы, в первом варианте создаются константы.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 03 фев 2016, 22:58
DimeX
DbIMok писал(а):http://docs.unity3d.com/ru/current/Manual/UnderstandingAutomaticMemoryManagement.html

Спасибо, познавательно!
waruiyume писал(а):Без разницы, в первом варианте создаются константы.

Т.е. в первом случае создадутся 4 константы (0.05f, 0.05f, 0.0f, 0.03f). Во втором случае можно было бы сократить до трех (0.05f = x; 0.0f = y; 0.03f = z)
Верно?

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 03 фев 2016, 23:46
Paul Siberdt
Лучше создайте для себя же эти самые константы и разместите в удобном месте.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 04 фев 2016, 00:31
seaman
Без разницы, в первом варианте создаются константы.

Констант не создается. Числа прямо будут внутри MSIL кода.
Разница есть - в первом случае числа будут прямо внутри MSIL кода, во втором случае они сначала получаются из переменных. По времени разница, конечно невелика, но она есть.
Какой вариант выбрать зависит от того - переменные это значения или константы. Если по мере исполнения значения их меняются - конечно нужно использовать переменные. Если же значения постоянны - лучше, как написал Paul Siberdt определить константы с этими значениями и использовать их.
Синтаксис:
Используется csharp
public const float SPEED = 0.5f;

void InvokeBoatGo ()
        {
                transform.position -= transform.right * SPEED;
                player.transform.position -= transform.right * SPEED ;

Обратите внимание, что константами могут быть только примитивные типы. Для остальных (например вектор) есть зарезервированное слово readonly. Оно указывает, что значение такой переменной задается один раз при создании экземпляра класса и больше не меняется. Используется (может использоваться) компилятором для оптимизаций.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 04 фев 2016, 07:09
DimeX
Спасибо за развернутые ответы. Я как-то не подумал, стоит перелопатить весь код, ведь я совсем нигде не использовал константу.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 04 фев 2016, 07:36
waruiyume
Советую упырить мел, и не чинить, то, что не ломалось) Лучше, когда будите писать в следующий раз, там, где наверняка будет меняться значение, используйте переменную, тогда её можно будет крутить в инспекторе; в тех местах, где меняться не будет, и можно дать осмысленное имя, используйте константы. Главное не впадать в маразм- константы: ДВА и ПОЛОВИНА, используемые в формулах- ничего не дадут.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 04 фев 2016, 13:50
Paul Siberdt
Хе-хе... а у меня есть константы FIRST и SECOND. Пользовал для массива касаний вместо индексов 0 и 1. По ним проще было читать код и быстрее прыгать по точкам использования, правда, чичас уже предпочитаю ссылки FirstTouch и SecondTouch непосредственно на элементы массива touches. :)

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 05 фев 2016, 04:33
artk
Совет - не думайте об такой оптимизации вообще. Оптимизировать нужно самый узкие места.
Самое главное в коде - это читаемость и расширяемость.
Возьмите любой codestyle для C# и используйте его. В них в обязательном порядке будет написано, что нельзя использовать "магические числа" в коде, все нужно выносить в константы. В некоторых даже запрещено использовать строковые значения.
Почитайте «Чистый код»

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 05 фев 2016, 05:51
waruiyume
Только именованные константы- только хардкор \m/

Сумма арифметической прогрессии
((2a₁+d(n-1))/2)n

((2*a+d*(n-1))/2)*n

((2*firstIndex+step*(cout-1))/2)*count

((DOUBLE*firstIndex+step*(count-ONE))/TWO)*count

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 05 фев 2016, 21:34
DimeX
Благодарю, думаю да, стоит когда-то взяться за чистый код (подразумеваю книгу).

Вообще, по оптимизации, буквально неделю назад поменял очень много скриптов, т.к. после часовой игры резко начал падать фпс. Заметил, что я для вращения игрока в update постоянно создаю new Vector 3, понял, что видимо это гиблое дело. Убрал, заменил, все стало хорошо. Вот и решил подойти к вопросу переменных ещё ближе :)

P.s. правда, жалею, что решил обновиться до 5.3.2, шрифты полетели, спрайты полетели, расстроился актуальным билдом. Установил последний патч, вроде пофиксили, но текст не отображается, если канвас при старте сцены отключен. Вот такие дела, думал на актуальное версии будет незаметный прирост оптимизации.

Re: Как лучше организовать работу с переменными

СообщениеДобавлено: 05 фев 2016, 21:57
waruiyume
Первое правило оптимизации: не оптимизируй.
Второе правило оптимизации: не оптимизируй пока что.
Третье правило оптимизации: если решил оптимизировать, начинай с того, сначала смотришь в профайлер.

Заметил, что я для вращения игрока в update постоянно создаю new Vector 3, понял, что видимо это гиблое дело. Убрал, заменил, все стало хорошо.

Что-то я в этом сомневаюсь :-\