![]() |
Ответ: Передача переменной в метод
отлично, сегодня вечером попробую применить на практике )) уже придумал как, главное что-бы сработало )
|
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Передача переменной в метод
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Складывай боундсы всех моделей, чтобы получить общий
http://docs.unity3d.com/ScriptRefere...capsulate.html |
Ответ: Проблемы разработки от EvilOkta
что можно почитать про отложенное выполнение методов? Не знаю как сформулировать, даже не знаю термин. Рылся в справках. Мне нужно что-то типа пула (очереди) выполнения методов с последовательным выполнением, т.е. при выполнении одного метода активируется очередь других методов, которые начинают исполняться один за другим.
Немного топорно объяснил, попробую на примере: Есть условная ловушка - при попадании в нее с объектом производятся определеннные манипуляции. Задача завершить выполнение предыдущего метода (который обеспечил попадание в ловушку) при этом не начиная следующего, пока не сработает ловушка. Ловушка срабатывает через корутину - сначала она определяет, что объект в ее зоне действия, после этого ожидает секунду (для завершения предыдущего метода) и запускает собственный механизм ловушки (объекту отправляется сообщение что он в ловушке, чтобы он заблокировал свои методы перемещения). При этом косяк в том, что во время этой секунды методы не заблокированы и объект спокойно может уйти из ловушки, а она затем сработает естественно вызвав баги в логике кода. Если жестко зафиксировать отлов события срабатывания ловушки как только (!) объект оказывается в его зоне действия, то еще веселее: ловушка срабатывает до того, как объект попал в зону действия (на самом краю срабатывания триггера - объект не вошел целиком в триггер, это важно!) - как результат ломается логика кода, объект начинает колбасить Как я вижу ситуацию: объект попадает в ловушку, скрипт должен дозавершить текущий метод, которым он попал в ловушку, но при этом зная, что следующим должен сработать метод ловушки, а не перемещения дальше. Своего рода предзнание. Куда копать? |
Ответ: Проблемы разработки от EvilOkta
PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
и еще - Action - это делегат, который не нужно явно объявлять, он как бы доступен по умолчанию, я правильно понял - это он? https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx |
Ответ: Проблемы разработки от EvilOkta
yield это твои действия любые, которые делают задержку.
Action и его вариации находятся в System да. Шаблонные вариации Action можно использовать как методы с параметрами (например при вызове метода надо передать что за ловушка сработала). Есть еще готовый делегат Func, который возвращает значение TResult. Если тебе надо выполнить цепочку действий, то можешь сделать список экшенов для выполнения List<Action<T>> к примеру, которые принимают для обработки объект типа T. |
Ответ: Проблемы разработки от EvilOkta
вроде работает, единственное вместо делегата Action поставил запуск анимации с навешанными событиями, которые делают все остальное, надеюсь такой алгоритм будет стабильным в дальнейшем )
|
Ответ: Проблемы разработки от EvilOkta
Такой вопрос, может подскажете - есть у меня статический класс который управляет привязкой камеры. Все работает, но в методах в каждой строчке у меня происходит Getcomponent. Визуально видно, что проще один раз инициализировать объект, который используется для поиска элементов, а потом использовать в методах.
Встала проблема - как инициализировать статический класс? Опять могу путать терминологию, но в обычном классе наследнике от Моно есть возможность использовать Start(). Можно что-то подобное сделать в статическом классе, чтобы перед исполнением методов инициализировать поле скрипта ссылкой на объект? PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Тебе поможет синглтон
PHP код:
PS: у тебя проблема не в GetComponent, а в Find. Вот самая медленная операция, а особенно несколько раз подряд искать одно и то же. |
Ответ: Проблемы разработки от EvilOkta
Цитата:
Почему нельзя просто сделать property CameraNav ? Код:
public static CameraNavigation CameraNav |
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Читаю в mdsn описание Array. Вопрос такой. Есть ли методы, которые позволят из одномерного массива получить минимальное значение (максимальное тоже) и номер элемента этих значений? Сейчас реализовано через foreach но получается приходится вызывать в методе foreach аж 6 раз для разных исходных данных.
Метод делает на самом деле простую вещь - определяет, какие значения на каких гранях кубика NumberChild - коллекция значений на гранях кубика (от 1 до 6) PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Ну на ум пришло не очень быстрое решение в две строчки
PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Pax, а разве в C# нельзя понадеяться на ленивую загрузку классов и реализовать синглтон в виде: private static MyClass _instance = new MyClass();
public static MyClass intance {get{return _instance}} ? Например, если в java писать public static final MyClass instance = new MyClass(), то во время первого обращения к этому классу извне (т.е., только когда он понадобится, и не раньше), будет выполнена инициализация и всё ок. |
Ответ: Проблемы разработки от EvilOkta
Почему нельзя? Можно.
|
Ответ: Проблемы разработки от EvilOkta
А зачем тогда пример синглтона с кучей кода в блоке get{}?
|
Ответ: Проблемы разработки от EvilOkta
Подобным образом можно сделать синглтоном скрипты (new GameObject().AddComponent())
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
Поэтому для скриптов, которые Вы хотите повесить на объект не пойдет Код:
private static MyClass _instance = new MyClass(); |
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Не знаю как эквивалентное выражение Линк работало бы. Но тут же не просто перебор - тут сортировка. Сортировка по идее медленней чем просто перебор массива.
PS: нашел статью по сравнению for foreach и ForEach(из Linq). Что быстрее? foreach vs. List.ForEach vs. for-loop |
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
при 100000 вызовах что foreach, что linq выражение даст такой же эффект, зато строк стало поменьше
|
Ответ: Проблемы разработки от EvilOkta
подскажите по использованию UI системы. В общем какая проблема возникла:
Меню может появляться/исчезать по щелчку мыши на игровом поле. Управляется это так PHP код:
PHP код:
Планируемый алгоритм: - Меню появляется при щелчке мыши по игровому объекту - Меню пропадает при щелчке мыши по игровому полю - Когда меню активно в логике кода должна происходить проверка на пересечение курсора мыши области UI. Где копать? |
Ответ: Проблемы разработки от EvilOkta
А если так?
PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Подскажите, в новой системе UI каким образом можно снять выделение "Highlighted" с кнопки с помощью кода? Не могу найти какое свойство за это отвечает...
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
GetComponent<Button>().transition = Selectable.Transition.None; Или руками настроить цвет для хайлаита: Создать ColorBlock. Настроить у него highlightedColor и присвоить его к button.colors. |
Ответ: Проблемы разработки от EvilOkta
Возник вопрос, для понимания ситуации.
Есть субклассы, наследуемые от базового класса. Если создан экземпляр одного субкласса, может он каким-то образом превратиться в экземпляр другого субкласса? Паттерн состояние - это то? Мне пока на ум пришло только уничтожение экземпляра субкласса и создание нового другого субкласса с переносом необходимых данных - так вообще делают или это плохая практика? |
Ответ: Проблемы разработки от EvilOkta
Цитата:
Паттерн состояние не превращает один класс в другой. Данные можно перетащить из треугольника в квадрат через reflection в рамках родительского класса (фигуры). |
Ответ: Проблемы разработки от EvilOkta
Ясно, спасибо! А как тогда лучше всего проектировать? Про треугольники и квадраты аналогия понятна.
Допустим базовый класс "работник"; субклассы "электрик", "менеджер", "ремонтник". Экземпляр класса "электрик" сменил работу и стал "менеджер" и должен теперь реализовывать другой набор функций. Upcasting и Downcasting тоже не помогут? |
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Еще вопрос. Как вести документацию по составу класса? Для описания методов есть XML комментарии - это понятно, но интересует другое. Когда кол-во классов становится большим становится сложно в голове удерживать какие методы они реализуют, интерфейсы наследуют и какими свойствами обладают.
Может есть какие-то инструменты для создания базы данных о классах, их взаимодействии и структуре? Интересно для общего развития. Или все банально сводится к тому, что в коде открываешь сам класс и вспоминаешь?) |
Ответ: Проблемы разработки от EvilOkta
Вложений: 1
В VS (не Community) есть средство создания диаграмм классов
Вложение 23060 |
Ответ: Проблемы разработки от EvilOkta
Цитата:
2EvilOkta: Лучше называть классы именами, описывающими функции, которые они выполняют. И организовывать в пространства имен/папки по тому же принципу. Ничего вспоминать не потребуется, все будет понятно по наименованию классов. Много ли вы диаграмм видели в справке по .net? Я часто так же использую ключевое слово partial, чтобы разделить класс на несколько частей, если часть функций можно объединить в группы. Тогда в структуре проекта это представлено несколькими файлами, имена которых так же отвечают на вопрос, что там внутри (например LevelEditor.cs и LevelEditor.LoadSave.cs). |
Ответ: Проблемы разработки от EvilOkta
Спасибо ) энтерпрайз дорого (я ж не зарабатываю программированием), идея с partial интересная. Параллельно в Excel заношу публичные методы классов и их сигнатуры, на всякий случай.
Продолжаю закидывать страшными вопросами. Я наконец-то разобрался со свойствами (pax за это отдельное спасибо), но терзают сомнения, можно ли их применять вот так: PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
как на некий набор общепринятых практик по написанию легко поддерживаемого кода. Естественно всё и сразу не надо пытаться исполнять, начать можно с "SRP", а "DI" оставить до лучших времён, когда он действительно тебе будет нужен. |
Ответ: Проблемы разработки от EvilOkta
Цитата:
Цитата:
PHP код:
PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
Цитата:
Как вариант PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
Цитата:
Цитата:
Чтобы не заниматься ответом на цитаты, вопрос для понимания - в каком формате лучше использовать и хранить БД в Unity? Или вообще без разницы? upd конкретизирую вопрос - для проекта нужно подкачивать массивы информации в текстовом виде, в чем их лучше хранить и динамически при необходимости загружать - csv, txt, xml, xls и т.п.? |
Ответ: Проблемы разработки от EvilOkta
И снова здравствуйте! Понимаю, что людей тут мало осталось, но вдруг кто поможет:
Код:
private void ResetBoolState(params bool[] ResetState) Задача - передать несколько bool параметров в метод и сбросить их состояния. |
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
Примеры тут: https://alemil.com/bitmask |
Ответ: Проблемы разработки от EvilOkta
Цитата:
PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Созрел новый вопрос.
Есть лист объектов, который заполняется при старте игры. PHP код:
Есть событие на которое нужно подписать все эти методы с каждого объекта. Делегат и событие создано, но никак не могу понять как получить имя метода с объекта в листе, для подписки. Копаю в эту сторону, но дает ошибку - явно не так. PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Цитата:
PHP код:
Ну и IAmBusy это же метод, а не тип, как ты его через GetComponent получать собрался? И конечно же сигнатура метода IAmBusy должна подходить под делегат в твоём событии, но это, я думаю, ты и так понимаешь. |
Ответ: Проблемы разработки от EvilOkta
Цитата:
По поводу EventSystem еще не разбирался что это за зверь такой, надо почитать. Пока тренируюсь на создании делегатов и эвентов, раньше и это было сложно - сейчас проще. Ну и как я понимаю эвенты и подписки создают слабую связность, что тоже хочется закрепить практикой ) |
Ответ: Проблемы разработки от EvilOkta
Цитата:
|
Ответ: Проблемы разработки от EvilOkta
Кстати по поводу событий и прочего. Я знаю, что плохая практика в Update постоянно проверять кучу состояний для управления объектом, но возник следующий вопрос. Попробую объяснить.
Допустим есть NPC, у него есть методы, отвечающие за различные "действия" - идти, сесть, стоять и т.п. Все эти методы выведены под общую сигнатуру, для того чтобы ими можно было бы управлять через события и т.п. Но в чем подвох. Например метод "идти" получает точку назначения и включает NavAgent типа так: PHP код:
Какие есть способы управления такими последовательностями? У меня пока в голове только идея сделать какой-то промежуточный менеджер, который в апдейте каждую итерацию (что уже заставляет задуматься) проверяет достиг ли активный метод цели и если да, то активировать следующий в цепочке метод. Это нормальная практика, или костыли? Надеюсь правильно объяснил задачу. |
Ответ: Проблемы разработки от EvilOkta
Тебе нужно копать в сторону State Machine (машина состояний). В Unity есть встроенная в Animator'е. Её иногда можно приспособить для логики. Вот пример:
Можешь найти готовую машину состояний, на ассет сторе много разного. Поищи например так: https://assetstore.unity.com/?q=Beha...rees&orderBy=1 |
Ответ: Проблемы разработки от EvilOkta
Машина состояний постепенно пилится на базе аниматора (спасибо pax за видео), столкнулся со следующей задачкой, видимо туплю где-то.
Есть такой кусок кода: PHP код:
|
Ответ: Проблемы разработки от EvilOkta
Иметь в игре один rnd (статический), получать там где надо rnd.Next(0,1), приводить к нужному диапазону уже в объекте.
|
Ответ: Проблемы разработки от EvilOkta
Есть уже статический рандом в Unity
https://docs.unity3d.com/ScriptRefer...dom.Range.html |
Ответ: Проблемы разработки от EvilOkta
Немного странный вопрос. Дебаггером сейчас прохожу свой код, внутри аниматора. И вижу что порядок выполнения команд такой, что аниматор как-бы находится одновременно в двух разных State. Я так подозреваю это в момент transition происходит. Как то можно отловить такой момент чтобы отфильтровать? А то получается логика в разных стейтах начинает друг друга перебивать.
|
Ответ: Проблемы разработки от EvilOkta
Ну тебе надо настроить транзишн так, чтобы у него Has Exit Time галка была снята и длительность (duration) была 0.
|
Ответ: Проблемы разработки от EvilOkta
Попробуй просто после использования через какое-то время вызвать сборщик мусора GC.Collect(). Память сразу обычно не очищается.
|
Часовой пояс GMT +4, время: 02:04. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot