Это копия, сохраненная 7 марта 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Есть класс, который содержит enum, массив, буллевую переменную и т.п.
Как грамотно сделать так, чтобы в зависимости от выбора в дропдауне, отображалась нужна приблуда (или массив или переменная, а не все сразу)?
Если я ставлю Translate duration = 0, то появляется ворнинг Difference in effective length between states is too big. Transition preview will be disabled.
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Когда-то умел в C#, хоть и забыл все, внезапно дернуло написать очередной симулятор ограбления корованов, курю маны по шарпу и юнити. Туториалов дохуя, но ощущение, что большая часть построена по принципу повторения, не объясняя, почему была выбрана конкретная архитектура.
Инб4 ссылка на вики о паттернах ООП.
При чем тут это, во первых если не можешь можешь делать не пиздато, а во вторых вместо книжки мог бы заняться чем то более полезным.
Изи же. Return - это то, что выдает метод в ответ на вызов. Ничего не выдает - значит метод void.
Вместо того, чтобы написать значение переменной вручную, можно вызвать метод.
Например время = Вася.СпроситьВремя().
Немного пьян, мб объясняю через жопу.
мимонуб.
>>19501
Лол, половина юнити это "сделать пездато". За этим тут и сидим.
Ну че маньки кармаки, все еще мечтаете в одиночку выпустить разящий шин? Напоминаю, что эта индустрия доживает свои последние деньки. Рынок перенасыщен дешевой рабочей силой готовой усераться по 20 часов за еду. А доходы крупных компаний едва покрываю собственные расходы. Денег тут нет и никогда не будет. Бегите пока не поздно еще успеете выучится на сварщиков.
Ну а хули делать, хотел в науку и съебать за границу. Потом оказалось что я долбоеб и хуй простой, так что остается работать за еду, а геймдев - использовать как хобби, отвлечься от тлена бытия.
Если ты неудачник, то это не значит что все такие же
Учи шарпы отдельно дучше
Когда-то использовал UniLua для использования скриптов в игре скриптов, но сейчас пригляделся и оказалось говнище. Можете посоветовать норм рантайм интерпретатор?
Пока остановился на https://assetstore.unity.com/packages/tools/moonsharp-33776 . Позже его поизучаю
Сам его юзаю. Советую
> Можете посоветовать норм рантайм интерпретатор?
Свой напиши. Интерпретатор же. Нихуя сложного один большой свич внутри игры. На вход подавай ему свой йобаскрипт. Внутри он будет делать примерно так:
switch (token){
case "var":
DoVariableAdd(token);
break;
case "if":
DoIfElse(token);
}
Бля, как устранять подрагивания при движении мышкой? FP-Шутан. У меня нихуя не получается от них избавиться. А в коммерческих играх такого подрагивания нет. В чём секрет?
using System.Threading;
>>19605
https://answers.unity.com/questions/192895/hideshow-properties-dynamically-in-inspector.html
Копай в сторону CustomEditor. Там чувак в комментариях реализовал что-то похожее.
Оптимально PNG. Юзай атласы.
Когда игра будет собрана в логах едитора есть информация о файлах, которые прошли в билд и их вес. Обходишь по этому списку и в настройках импорта файла устанавливаешь размеры, сжатие и мипмапу.
Если ты совсем хардкорщик, то генерируй текстуры процедурно.
Спасибо!
Не имеет значения, так как юнити перегоняет картинки любых форматов в DDS при импорте.
Допустим, хочу добавить в игру возможность приглашать других игроков через стим к себе в партию.
Насколько это мозгоебство будет? Вариант самому сделать, или лучше сразу забить и пригласить в проект опытного программиста?
Вообще идея была сначала сделать браузерный мультиплеер с системой логинов/паролей, потом понял, что это вообще почти-что ммо писать с нуля. Потом подумал, что если уже есть у людей аккаунты типа Стима/Гугл Плея или тех же аккаунтов ВК и FB, то нахуя городить еще свою систему логинов паролей.
Получается, мне просто надо брать данные аккаунта игрока из "социальных сетей" и сопоставлять со своей базой данных или типа того.
Ебать, как сложно нахуй.
Еще вот такую штуку нашел, пробовал кто?
https://www.photonengine.com/en-US/Photon
Фотон довольно несложный, если хочешь учиться мультиплееру то начни с него. А вообще да, любой мультиплеер не для новичков
Вот допустим я двигаю объект с помощью велосити, то мне надо нормалайзить вектор движения или нет? Я вот попробовал в тестовой сцене, вроде разницы не вижу в движении на разных скоростях.
В JSON файле.
> Как белые люди делают мультиязычность?
Открывают документацию и смотрят, какие способы и10ции предлагают юнитеки.
И логику тоже в файлах держи.
Пусть у нас на одной сцене есть несколько десятков тысяч одинаковых объектов (т.е. инстансов одного префаба) и нужно для каждого из них детектить столкновения, причем чтобы было хотябы 60 фпс. Пробовал повесить на них ригидбоди и в настройках увеличить промежуток времени между вызовами fixedUpdate, но меня послали нахуй, ведь они хотели столкновения вообще без использования физики. Идея просчитывать в Update дистанцию до всех остальных объектов явно не вариант.
Сам вопрос: можно ли как-то детектить столкновения одинаковых объектов без использования ригидбоди и с хорошей производительностью?
Спасибо, анончик, но теперь я столкнулся со следующей проблемой:
Благодаря тебе, я смог детектить столкновения между двумя объектами, например:
Collider collider1 = Obj1.GetComponent<Collider>();
Collider collider2 = Obj2.GetComponent<Collider>();
bool doesIntersect = collider1.bounds.Intersects(collider2.bounds);
if (doesIntersect) {
// что-то делаю
}
Но теперь, поскольку методы OnTrigger/OnCollision не будут вызываться, то я не могу сделать что-то уровня:
Obj1.GetComponent<Collider>().bounds.Intersects(Любой другой коллайдер);
Я пробовал запихнуть каждый этот объект в Коллекцию или массив, а потом по нему проходиться, но все стало только хуже.
Есть у тебя идея как мне этим способом детектить коллизии от всего?
Вас понято, спасибо.
> Есть у тебя идея как мне этим способом детектить коллизии от всего?
Извини, на этом мои знания заканчиваются. Ждём более грамотного анона.
Спустя пару дней, вернулся к return, с новыми силами. Как сказал один мудрый человек - "Самое сложное - это понять, насколько все на самом деле просто". Не сдавайся анончег, если чего-то не понимаешь, оторвись, отдохни и затем вернись с новыми силами. Это работает.
Не могу себе представить, каково это, когда не можешь понять, что такое ВОЗВРАТ значения функции.
Наверное, это сишное семейство языков так сбивает с толку нубов. Ведь в си всё - функции, а в си++/сишарп всё - методы. Когда всё - функции, нуб не придаёт значения тому факту, что функции - есть программная абстракция, ВОЗВРАЩАЮЩАЯ значение, даже если это значение - void.
А вот у нас в паскале... Были функции и процедуры. Функции возвращают значение, процедуры - нет. Никакого void тоже не было. Поэтому нубы сразу понимали суть и смысл функций. Ретурна тоже не было, но при переходе к си-подобным языкам, вопросов (у меня по крайней мере) вообще не возникло.
Правду же говорят, что паскаль - лучший для обучения кодингу с нуля.
Эддтунамберс можешь упростить вот так:
return firstNumber + second number
И не придется объявлять никаких переменных внутри метода.
GetComponent очень дорогая операция. Попробуй избавиться от неё. Например, хранить список коллайдеров.
Если не боишься сложностей, то почитай про unity ECS.
Удачи, анон. Она тебе понадобится, когда дойдешь до корутин.
Мимонедавно дочитал тутор по шарпу.
Опа, гет проебался.
В аниматоре выделяешь переход и убираешь галку has exit time.
Начать делать игру и по ходу искать ответы на конкретные вопросы.
Я попробовал сделать так: Создать пустой объект, который будет создавать остальные объекты. Как только он создаст объект, я сразу получу коллайдер и запихну в массив. Это все в методе Start(). В итоге я буду иметь к концу Start() весь список коллайдеров. Но теперь вопрос как мне детекить столкновения.
Один из вариантов был в Апдейте двойным лупом чекать каждый коллайдер, но Юнити тогда даже не запускает игру.
Другой вариант это создать классовую (static) переменную в создаваемом обьекте, которая будет хранить список коллайдеров. Тогда в апдейте я смогу в один цикл проверить на столкновения, но поскольку этих объектов куча, то Юнити опять не запускает игру.
Я что-то делаю не так?
Точна! Спасибо анончег
1.При настройке ригов левая рука подсвечивается будто там ошибка. И после завершения тоже сообщение об ошибке. Что надо исправить?
2.Обязательно ли чтобы модель была в Т-позе?
3.Головной убор стал снизу невидимым после импорта в редактор. Как это исправить?
Только через ECS+многопоточность ты сможешь достичь производителтности в 60 фпс при обработке тысяч объектов на проверку столкновений. Но, судя по твоим перлам итт, тебе туда ранл соваться, один хер не поймешь ниче, но попроьовать можешь, конечно, иногда просраться тоже полезно.
по нажатию кнопки стреляю во врага, но хотелось бы чтобы при удерживании кнопки тоже происходила стрельба
я уже даже завёл переменную которую чекаю в update() и меняю её состояние при нажатии / отпускании кнопки - но между вызовами update сбрасывается состояние "нажатости" в то, которое задано при start. как быть?
унаследуйся от кнопки, добавь в неё проверку на нажатие каждый кадр и инвокай делегат каждый кадр.
Пока придумал следующие: навешу на противника конусообразный коллайдер. Как только игрок окажется в нем, будет бросаться raycast от врага в сторону игрока. Если луч столкнулся именно с игроком, значит, можно нападать на него. Если столкнулся с препятствием, значит, игрок спрятался, не виден, игнорим.
Ладно. Думаю, постоянная проверка в update на расстояние и угол не такая затратная процедура, всего лишь математические операции с векторами. Но с коллайдером вычисления можно было бы делать только во время триггера.
тяжелая наука
>>20172
если так хочется триггерами пользоваться то начинай проверять угол и расстояние когда игрок попадает в круглый триггер вокруг вражины. хоть не придется возится с конусом.
хотя если хочется вообще вот оптимизону накотить чтобы вообще вот прямо ух то хули, делай там себе октодерево, всю хуйню, сам проверяй баундинг боксы чтобы триггерить только правильных вражин своим присутствием. будут у тебя там тыщи врагов триггерится только когда надо.
но зачем? делай так чтобы было удобно сейчас и не прошлось переделывать слишком много потом, когда захочется сделать получше.
>>20175
проверку по дистанции забыл лол. и все эти ифы можно в один написать.
>хоть не придется возится с конусом
Что там с ним возится.
Я бы сделал этот конус в блендере в два клика, и закинул его в mesh collider. Но вообще сделаю как проще, расстояние+угол. Все равно только один враг будет, на оптимизацию можно забить
разбей мир на грид соответствующий радиусу обьектов, суй в этот грид обьекты (что разумеется мегабыстро так как нужный индекс говорит тебе кордината), для каждого обьекта проверяй только 3 на 3 пространство вокруг него на столкновения. и сделай это всё кэшфрендли. будет мегабыстро.
>>20143
https://docs.unity3d.com/ScriptReference/WaitForSeconds.html
>>20152
какую-то ужасную хуйню делаешь.
>Что надо исправить?
иерархию костей? указывай нужные кости самостоятельно.
>Обязательно ли чтобы модель была в Т-позе?
не обязательно, Т позу настраиваешь после экспорта в самом юнити.
>Головной убор стал снизу невидимым после импорта в редактор. Как это исправить?
поменять шейдор на тот который будет тебе задние стороны полигонов рисовать.
>>20177
такой хочешь поменять конус на пару градусов и обана. надо включать блендор, искать эту модельку конуса, делать там свои два клика, сохранять, ждать когда юнити поймет что эту хуйню надо экспортировать. да ну его нахуй. а вдруг у тебя там конусов много будет? много вражин вот? не тот конус поменяешь и чет будет не так!
проще залезть в инспектор и нужное число там ввести. и при очень большом желании каких-то няшных гизмосов добавить, хандлесов чтобы тягая за пиптики в сцене менять этот угол.
t = t + Time.deltaTime / states[index + 1].time;
if (t > 1) {
t = 1;
}
transform.position = Vector3.Lerp(
states[index].vector,
states[index + 1].vector,
t
);
t плавно меняется с 0, 0.1, 0.2, ... 0.9
А хотелось бы 0 0.1 0.13 0.2 0.24 0.43..., что бы и убрало плавность.
Вот например, я этот скрипт использую, чтобы игрок (а точнее камера с character controller) заползал под кровать или в шкаф, но не хотелось бы, чтобы он плавно туда въезжал, а как бы по натуральному
доп.
Можно было бы добавить строчку
t = t + рандомное_число(-0.2, 0.2), но в этом случае трансформация может закончится раньше или позже указанного времени (states[index + 1].time)
Спасибо, кажется то, что нужно
https://gist.github.com/Fonserbc/3d31a25e87fdaa541ddf
Есть еще Time.realtimeSinceStartup и стандартное шарповое DateTime.Now. Хз какую ты задачу решаешь.
Коллайдер же не бесплатный, простой рейкаст явно дешевле.
Ни один дебаг не возвращает 0.
Какой то из них в принципе возвращает 90, когда объекты на одной плоскости, и 0, когда друг на друге, так что можно использоваться эти данные, но мне скорее просто интересно, а как получить именно 0 и 90
ахах, не обучаемый
Проверка
if (Vector3.Distance(destination, target.position) > 1.0f)
быстрее, чем
if (Vector3.Distance(agent.destination, target.position) > 1.0f)
?
> После нескольких лет впервые зашел в /гд.
> Решил глянуть что там в юнити треде.
> Йоахим дал им ецс, нативные контейнеры, бурст
> Нет хотим жрать говно, весь тред в монобихевиорах
Пиздец братишки
agent.destination - это же не поле а свойство, то есть функция по сути. Наверно, вызов функции будет чуть более медленным.
сложно пользоваться. а нативные контейнеры сами по себе чет нихуя не быстрые.
но я вот пользуюсь
>экспериментальная штука, которую еще допиливать будут
>нужно для оптимизации кода, когда полтреда пилит платформеры, а не РТС
>почему не пользуются?
Как так вышло, что для разработки инди-игрушки нужна целая команда программистов, 3д-моделлеров, текстурщиков, аниматорщиков, звукачей и т.д? Т.е. в одиночку заниматься разработкой игры можно только как хобби, которое никогда не принесет никаких денег.
Используй бесплатные ресурсы. Остаётся только программирование
>лет через 7-10
Кому всралось класть на разработку игры всю свою жизнь, чтобы по итогу она не принесла ни копейки, либо продалась тиражом в 3 экземпляра и ты мог на эти "деньги" охоту крепкую себе купить в магазе, лол?
мне
Какого ответа ты хочешь ёпта? Просто решил высрать свое мнение?
>как так вышло
Перенасыщение рынка. Ты же не бугуртишь, что фильм одного семена не получится вывести в прокат, а нужны связи, актеры и прочее?
>никогда не принесет денег
Из недавнего вспоминается Stardew Valley, где разраб чего-то да заработал.
Или жабецкий, который аутично пилит дворфов за донаты.
Или сделанные на коленке порноигры, которые расхватываются задротами.
Про обмазанное микроплатежами мобилоговно даже не говорю сейчас.
Просто не надо пытаться конкурировать с AAA на их поле.
>не надо пытаться конкурировать с AAA
Ничего другого не приходит в голову. Если не прикрутить графон, то никто не купит игрулю.
Да и кому тогда всрался твой уеч, когда есть божественный юнити?
Есть события юнити, Unity Event. Это когда появляется такая менюшка в инспекторе и ты нажимаешь плюсик и настраиваешь там действия по событиям. С этим вроде бы все понятно.
А есть еще какие-то C# события, на которые надо подписываться, отписываться и т.д. С ними непонятно, но пытаюсь разобраться.
И я так понял, есть еще третий вид событий, тоже юнитевский, но что-то между первым вариантом и вторым. Типа он тоже передает события, но не делает менюшек.
Что это вообще значит всё? Как в этом разобраться? Когда какие ивенты лучше использовать?
agent.destinatoin = player_pos;
animator.SetBool("walk", false);
animator.SetBool("run", true);
Но зомбак сначала как-будто скользит.
Вроде пофиксил. У меня на связи walk->run было условие run == true, а на run->walk условие walk == true. Это ведь неправильно? На этих стрелка должна быть проверка одного булева значения?
Не, я просто ебучая newbie и не знал, что каждый класс, унаследованный от монобеха, должен иметь свой объект в иерархии.
> Как так вышло, что для разработки инди-игрушки нужна целая команда программистов, 3д-моделлеров, текстурщиков, аниматорщиков, звукачей и т.д?
Возможно потому что делать игры сложно и нужны усилия людей шарящих во множестве дисциплин?
Если я верно понимаю, то у тебя каждый цикл будет компонент заново искать, что немного влияет на производительность. Лучше присвой значение переменной до цикла.
Скользит? Может анимация бега не началась в момент увеличения скорости?
>>20515
Зачем держать две переменные? Возьми одну "isRun". На walk->run условие isRun=true, а в обратную сторону isRun=false.
Но я бы сделал плавный переход из одной анимации в другую через blend trees. И все три анимации будут в одном ноде и всё это управляется через одно число.
Он ругается на 17 строку. Я так понял, что эта строка с получением компонента текста. В следующий раз попробуй разбить строку на строки короче и в след запуске ошибка укажет точно место.
Маня, раз уж кидаешь лучик, то оптимизируй сравнение тэгов через компэйр.
Очень существенный минус в твоей схеме то, что колижины считаются несколько раз за тик, что сказывается на производительности. Лучше кидать лучи с ограничением по "углу обзора" дальности и т.д. как там аноны писали. Плюс использовать лэйеры.
Как так вышло что для соло- изготовления любого продукта, требуещего знаний и навыков во множестве областей, требуется несколько лет, маня?
Ты реально тупорылый долбоеб очевидных вещей не понимаешь что нельзя быть экспертом во всем и что разделение труда позволяет ускорить процесс изготовления любого продукта, а не только кудахтерных игр?
При нажатии на кнопку вызывается метод OnClickButton, который, в свою очередь, вызывает другой метод.
Чтобы сделать код читаемым, я хочу перенести методы в разные файлы.
Вопрос: каким отношением связать файлы, чтобы не создавать дополнительные экземпляры? Так как метод программ основной, и с ним вообще много что связано
Если точнее, то с классом Game много что связано. Это как бы основной класс в программе.
Низкий поклон тебе
Вообще партиал-классы не затем придумали, чтобы в них логику дробить. Это просто неудобно когда в дебаге придется по файлам шариться и еще в голове держать другую часть кода.
Партиал-классы запилили для разделения кода написанного программистом и автогенератором. Это упрощает им работу - автогенератор знает, что он владеет частью кода один и может смело сразу перезаписывать весь файл без опасений загубить чужой код, в свою очередь деву не приходится ломать ноги в автокоде и бояться его поломать убрав лишний перенос строки.
1) Зачем здесь умножение?
2) Как включить режим отладки? ("пошагать").
Вот у меня коде, хочу понять как он работает (точнее, почему не работает так как надо). Использовать Debug.Log ?
3) Есть сфера, которую мы используем в качестве снаряда, запускаемого врагом в сторону игрока. Как сделать, чтобы сфера при попадании в стены (и другие объекты, кроме игрока) разрушалась? Можно ли это сделать в инспекторе или необходимо лезть в коде?
1. Просто смещение. Поменяй значение и увидишь что изменилось
2. Что конкретно не работает? При установке юньки ставишь галочку на "поставь мне студию". В студии жмёшь на кнопку "подключиться к отладке"или чтото типа того, ставишь breakpoint и запускаешь игру так что игра должна пройти по брейку.
3. OnCollisionEnter и отслеживай пока не столкнётся со стеной
public Game myGame;
...
myGame.Program(50)
Ссылку на myGame вставляешь в эдиторе или через другой метод.
Не так разве?
мимо недавно начал
Дурачок?
А я через экстеншоны хуярю и всем советую.
https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/extension-methods
Используй первое, что пришло в голову.
У меня в 10 классе 3д-векторы (хотя там тупо подставляется новая ось) и вычисления с ними вместе со стереометрией изучались
Есть делать "AddForce...ForceMode2D.Impulse" то получается слишком резко.
Неужели надо делать через "ForceMode2D.Force" и силу через какой-нибудь mathf.lerp увеличивать на одну секунду? Или как лучше? Вы тут про анимейшн кервы говорили, но я не врублюсь, как их использовать, у меня всё равно получается слишком резко/быстро, хотя если её сломать (кривую анимационную) то ничего вообще не работает.
Что ты называешь мягоньким импульсом?
Прикладываем к телу силу в режиме Impulse в одном единственном кадре, получаем, как будто пнули мяч.
Прикладываем к телу силу в режиме Force непрерывно в каждом кадре, и оно начинает двигаться с ускорением (если покоилось).
А тебе что конкретно надо, что-то среднее?
Да, я ето понимаю, наверное неправильно вопрос задал.
Просто хочется не резкий импульс, а такой, как на второй пикче. Видимо, только через режим Force с каким-нибудь изьебом mathf.lerp, хотя хз, надо пробовать.
Просто сложно как-то слишком, я думал мб есть какие-то другие более изящные методы, как сделать мягкий кратковременный "импульс" типа как на втором графике.
То есть:
Invoke("massage1", 2f);
Invoke("massage2", 5f);
Invoke("massage3", 7f);
А если метод massage имеет свойства?
public void massage (string mes) { }
Если тебе надо, как на втором пике, то зачем вообще физику использовать? Двигай вручную.
Ну игра с физикой, поетому и хочу физикой двигать.
Я думаю да, просто надо скриптик расписать да повозиться с етим, должно быть нормально.
Так в том и особенность симуляции реалистичной физики, что обьекты могут двигаться не так как тебе надо, не так как ты представлял.
Есть обьекты, которые ускоряют игрока. Их много будет, они префабы.
Как им лучше обратиться к rb игрока и сказать, что "к тебе применен импульс"?
Я так понимаю, что getComponent это затратная операция, и каждый раз при столкновении игрока с этим обьектом делать getComponent будет не очень хорошо. Сейчас вот сделал через Unity EventSystem с дополнительным скриптом.
Я дурак и вообще насчет такого не надо париться? Делать через OnCollisionEnter и getComponent<Rigidbody> и хуй с ним?
>елать через OnCollisionEnter и getComponent<Rigidbody> и хуй с ним?
Сохрани референс на игроке на Rigidbody и при евенте коллизии используй
>Я дурак и вообще насчет такого не надо париться?
Хз. Подними тестовый уровень где твое "много" будет в полном объеме и его смотри через профайлер. До этого достаточно минимально рабочей версии - чтобы просто работало как надо.
Спасибо анон, покурил мануалы вроде все понял
Амбиент лайт крути. Еще эмиссию добавь тем предметам которые должны светиться.
В геймдеве никто не делает юнит тесты. Они бесполезны.
Намного критичнее делать тестовые уровни с граничными условиями игры и на них полностью прогонять всю интеграцию.
Вот ИИ, например. Перемещение персонажей стоит писать для каждого паттерна поведения отдельно или нужно написать класс "перемещение нпс" и передавать координаты для движения туда?
У меня есть в голове несколько мыслей о том, как это можно сделать, но как делать правильно?
Я в принципе, умею кодить на уровне джуна или несколько хуже(до этого кодил фуллстеком на работе и приложения на замарине как пет проект), но в геймдеве ноль.
Ты игры делать будешь или паттернами обмазываться?
Если не ошибаюсь, на офф сайте есть какие-то примеры хороших практик программирования. Но вообще я сборника концентрированных полезных советов не встречал. Оно больше по кусочкам из разных источников складывается.
Я на работаю в небольшой конторке(не программистом), пришел начальник и говорит "Нам нужно замутить клиенту такую хуйню, чтобы он загружал свой сраный отчет и у него сравнивались данные из него и из нашей программы. И Чтобы он мог разным автомобилям разных водителей на разные промежутки времени присваивать через интерфейс."
Т.к. я хвалился своим приложением на телефон, задачу дали мне, хоть по должности я и не программист. С горем пополам, попутно изучая веб с нуля, я сделал апи на .NET core и сайт на vue за два месяца. Получилось вроде как даже неплохо.
>>21002
Я люблю обмазываться паттернами. Плюс в том, что не нужно изобретать велосипеды, которые будут херово работать.
>>21005
>>19490 (OP)
https://trello.com/b/Z6cDRyis/good-coding-practices-in-unity
Это не паттерны, но советы полезные
Спасибо
>какие подводные
Баттхерт анальной жопы когда ты поймешь, что с таким говнокодом ты мог написать не хуже.
Нее, это 3d модель призрака c анимацией. Нужен враг для преследования игрока. Правда, призрак же должен проходить сквозь стен, но мой почти готовый скрипт слежения заточен под обычное человеческое хождение, как мне и требуется. Но модель мне прям вообще нравится.
Не знаю, допустимо ли сделать, что призрак по коридору и комнатам шлялся
Ладно, буду считать, что сквозь стены он не может проходить, так черепушка и плащ физические объекты
Или это по принципу "раз уж написал для себя, то почему бы еще шекелей на пиво не поиметь"?
Заработаешь копейки. В сотни раз выше шанс заработать приличные деньги на мобильной игре.
Напиши, как опробуешь. Тоже интересно
Выкладывать ассеты нужно чтобы придя на очередную юнити-конфочку громогласно объявить с подиума на весь зал, какой ты охуенный. Ну и ещё чтобы получить фиолетовый ник в дискорде.
Корутинами можно еще. Можно создавать поток, а потом его тормозить через thread.sleep...
А нужно чтобы кнопки исчезали на закрытой вкладке? Я б создал общий класс контроллер кнопок, который бы хранил список классов Кнопка. Кнопка хранит в себе ссылку на префаб, экшн который нужно выполнить по нажатию, таймер, номер вкладки и прочее. Когда нужно создать кнопку, то инстанцируется префаб, создаётся класс Кнопки, префаб отправляется в Кнопку, а там получаем компонент кнопки и подписывается на нажатие через экшн. Контроллер в апдейте считает таймер в каждой Кнопке и удаляет по необходимости.
Не выключай гейобьекты, выключай рендерер
Не знаю, я нейросетки не изучал.
Самый тупой бот:
Он должен всегда идти в значение Х точки мяча. Если мяч на стороне противника, то занимать центр своего поля.
Если мяч ниже определённого уровня и бот под мячом, то нужно сделать прыжок.
Точка мяча не должна быть ровно в центре мяча. Для бота справа, она должна быть чуть правее центра. Если бот будет прыгать и бить в эту точку, то мяч будет отталкиваться влево.
Блять, что сложного то?
Если мяч справа от бота - идти вправо. Если мяч слева - идти влево. Всякие скорости и ускорения можно нацепить.
Если так не понятно, читай любые гайды по ботам пока не поймёшь
Да нихуя, спор гуся с петухом, как обычно. Вон, разрабы Inside вообще свои собственный Start и Update написали и ничего.
Или же вариант начать прям щас на бете 2019.3 или альфе 2020?
Проект не сложный, пару месяцев работы примерно.
Есть скрипт, создающий компонент, согласно данным в префабе scriptableobject.
Как в редакторе задавать ТИП создаваемого компонента? Чтобы перетащил в окошко префаба scriptableobject компонент/выбрал из списка, засунул SO в скрипт сцены,на сцене создался нужный компонент.
Можно создать enum вариантов и через case создавать нужный вариант,но хочется красиво.
Пока пытаюсь сделать что-то через System.Type, но не выходит.
а такая ли большая разница? или ты там на острие прогресса и пользуешься исключительно новыми фичами?
>>21216
юнити может делать gameobject.AddComponent(Type)
но я сомневаюсь что это нужный тебе ответ.
вообще что хочешь то? сделать список нужных тебе типов чтобы они няшно в гуи лезли? можешь сделать его через Assembly.GetAssembly. например как на картинке. там буквально "эй хуйня дай мне всё, я разберусь че ты мне даешь"
чтобы отображались няшно и у тебя дропдаун был со всем этим то рисуй через EditorGUILayout.EnumPopup. лучше сделай себе собственный проперти дравер, или перелопать инспектор, или вовсе сделай свое окошко для юнити и сам говори как там твои типы рисуются.
Йа
Ты без посторонней помощи даже версию юнити не можешь выбрать. Ты же беспомощное дно ебаное.
https://learn.unity.com/tutorial/join-your-first-game-jam
https://docs.unity3d.com/Manual/ModelingOptimizedCharacters.html
https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
Дальше сам. Нет как таковых лимитов, они задаются внутри группы разработчиков в зависимости от проекта.
Ну просто хотелось узнать опыт других анонов. Допустим есть модель дилдака. Изначально в нем 60к полигонов. Но ведь ясное дело, что столько полигонов это слишком много. Есть выбор сделать децимейт до 1к либо до 8к полигонов. Сколько будет лучше по вашему опыту? Вроде бы при 1к заебись, но не хватает некоторых деталей. А при 8к может быть многовато.
Короче думать надо.
>Сколько будет лучше по вашему опыту?
Я же написал, зависит от проекта, на пк будет отлично выглядеть, на мобилках - не очень, учитывая то, что большая часть мобилок из среднего-нижнего ценового сегмента. Если, например, их у тебя предвидится сотни тысяч на фоне, то тут тысяча полигонов будет много. И опыт тоже будет варьироваться в зависимости от проектов.
>>21284-тут верно написано, если не теряется визуальная составляющая при меньшем количестве полигонов, то очевидно лучше и использовать меньшее количество
В общем, очень много если. Поэтому при разработке обычно пинается самый умный моделлер в отделе или же весь отдел для оценки и после этого даются рекомендации для моделирования, по типу:
обычные пропы не более 1000 полигонов;
воооон тот ящик, который будет в главном меню сделайте красиво, шоб досочки, щепочки, до 30000;
*вот эту херобору вообще сделайте из 12 трисов
и т.д.
еще и разметка сбилась, спасибо, Абу!
-обычные пропы не более 1000 полигонов;
-воооон тот ящик, который будет в главном меню сделайте красиво, шоб досочки, щепочки, до 30000;
-вот эту херобору вообще сделайте из 12 трисов
фикс
Кстати, из опыта. У знакомого в небольшой студии, которая клепала на зарубежную компанию третьесортные тривряд для гуглостора, так вообще не было никаких рамок: работает? Уже заебись.
Интересуют ссылки на репозитории, книги, статьи и, конечно же, ваше личное мнение нет.
Думал начать с# учить. Пересмотрел не один десяток роликов про обучение, почти все для аутистов в стиле "эта кнопочка нужна, эта не нужна, а вот так из дерева сделаем префаб". Ничего голого не нашёл.
Продолжать читать книги или можно разбираться походу и решать вопросы по мере их поступления?
Стоит ли сначала собрать все спрайты, модели, звуки и прочее или сначала можно слепить что-то из кубов и скриптов, чтобы графики минимум, но игра была играбельной, а потом и модели с текстурами и прочий графон прикручивать или это двойная ебля с одним и тем же будет?
Скорее всего ответ мимо, но попробуй глянуть отключено ли энергосбережение на устройстве, лишним не будет точно
Посмотрел, согласен, ничего хорошего, в гамаке это удобнее было, но даже там всё равно на скрипты перешёл, удобнее и проще
А нахуя смотреть туториалы по юнити в стиле "Делаем ММО", если сначала тебе хочется выучить синтаксис шарпа?
В Unity Learn кстати дохуя всего, в том числе туториалы конкретно по языку.
ПРОСТО начни с какого-нибудь простого прожекта и учись на практике гугол есть
>Ничего серьезного с ним сделаешь
Blasphemous и Hollow Knight оба были сделаны с Playmaker'ом
Ты просто nodev, который ищет оправдания
В принципе, это то что мне и нужно было.
Сначала я пытался объявить переменную System.Type, чтобы напрямую задавать его в инспекторе. Хуй там. Потом через жопу - перетаскивал скрипты с префабов, чтобы сделать GetType.
Затем нашел охуенную вещь UnityEditor.MonoScript.GetClass().
Создаешь переменную Monoscript и перетаскиваешь туда нужный скрипт, чтобы потом использовать класс из него как переменную.
И только после этого понял что мог бы не ебаться, а сделать префаб пустого объекта с нужным компонентом, засунуть в переменную GameObject и тупо инстанциировать, прицепив к игроку, вместо того, чтобы создавать компонент прямо на игроке.
А про Assembly - надо копаться, нихуя не понимаю в этом еще.
Да 100500 обучалок же, начинай с любого, все равно энтри-левел тупо пересказывают https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/
https://www.youtube.com/watch?v=pSiIHe2uZ2w&list=PLPV2KyIb3jR6ZkG8gZwJYSjnXxmfPAl51
Как пример.
Плеймейкер это стейт машина, и у него конечно есть применение в том же hollow knight он используется для ai, а ты написал будто игра полностью была сделана на одном ассете. Я сам начинал с плеймейкера, намучился достаточно.
Типа после релиза я могу сразу вывести деньги заработанные? Или раз в неделю выводить их можно? Или раз в месяц?
И еще вопрос- они долго приходят на счет? Или все происходит быстро?
Может быть ткнете пальцем, где это почитать вообще?
Бля сорян за пикчу, ткнул в первое что попалось, я даже не видел, что там такое, лол.
Ну я начал с копии простой игры, в которую сам играл раньше. Затем взялся за новый проект.
Просто делай, и конкретные вопросы спрашивай в гугле.
Лучше сперва делай игру с минимум графики, чтобы прочувствовать все ошибки в геймплее
Бля, братишка, большое тебе спасибо, если бы не ты, то я бы так и не понял для чего нужен ретурн и как он работает, мне вариант с блок схемой не помог, дожив до 3 курса я просто писал return и не парился... Добра, удачки и позитиффчика тебе
blending?
Т.е. я правильно понял что нужно делать отдельные анимации для каждой части тела и совать их каждые в свой леер? Типа, отдельный леер с руками, отдельный с ногами, и т.д.?
сорт оф.
только лееры не исключают другие лееры. можно например иметь анимацию бега, но поверх неё накладывать анимацию броска, у которой маска только куски туловища и рука. на время броска говоришь "эй нука включи анимацию и забленди мне этот леер вот настолько" и у тебя поверх анимации бега будет происходить анимация броска. притом не обязательно чтобы её вес был 100%
в общем, потыкай. а там разберёшься.
ну хули, удачи. не забывай постить в тред че ты там сделал.
алсо че не на анриле то? на нём то шутан сделать явно проще. или у тебя изюминка есть?
Ты мой потенциальный конкурент. Поэтому пожелаю тебе эпичного провала.
Нет изюминки, тупо, просто, и быстро.
Создаёшь кастомный атлас из нужных кусков и натягиваещь на один, два или сколько надо геймобжектов, изи.
Всё зависит от потребностей что надо натянуть.
Спасибо, попробую
Через фабрику менеджеров сцен сгенерировать кастомный менеджер сцен. Уёбок, блядь.
Делаешь кнопки в канвасе, и один скрипт который активируется из кнопок которые передают в него своё значение, в скрипте запускаешь нужную сцену исходя из переданного значения.
Нормальный. Также готовится новый гуй, который можно писать по типу хтмл (хотя там больше похоже на хмл андроида).
Сам делаю мультиплееригрушку с возможностью создавать свои карту и сохранить в текстовый файл. Встал вопрос о том как делится этими картами.
Пока что решение такое: если у игрока нет файла с таким же названием как у хоста, он создаёт его и хост посылает игроку внутренности своего файла в сообщении.
Но думал было бы здорово если бы было можно посылать целый файл
Выглядит все довольно мутно, но:
>если у игрока нет файла с таким же названием как у хоста
Хуёвая идея, лучше проверять по какой-нибудь хеш-сумме
Да и вообще поподробнее опиши: что используешь, как друг к другу подключаются машины
шоб онлайн играть
Пизда нах, ни разу ничего подобного не делал, уже думаю что юнити не такая и плохая идея
> ни разу ничего подобного не делал, уже думаю что юнити не такая
Как и любой новичок, твой персонаж не осознаёт титанический масштаб работ по производству шутера.
Сейчас похвастаюсь! За 12 лет ни один из личных проектов не доведен до конца, успех!
Ну, не сказал бы, я отсчитываю еще со школы, с момента как вообще хоть что-то начал делать, ну да ладно, это все тут оффтопик
Вовсе не оффтопик. Почему бы не поныть друг другу в плечо?
Если со школы, то у меня 20 лет недоделанных проектов, а если и школу посчитать, то все 25!
Купи юнити про. Очевидно же, что делать.
Не явился на вручение. Лень было встать с дивана.
Не много не то, но ассет сам по себе полезный. Хотя думал что в юньке есть такое автоматом
Разрешаю
Репорт за движко срач.
https://www.youtube.com/watch?v=Imc0Oar5EQw
Две секунды в гугле, не могущий в гугл зумер-гуманитарий.
Можно, даже в гамаке можно
Update() везде почти пустые, лишь корутины по немногу вычисляют.
Я в курсе про него, меня немного другое интересует. Теоритически чтобы это могло быть? Лупы, сортировка всех гейм обжектов в массиве или что-то еще.
Теоретически это может быть абсолютно всё, и код, и железки, и нептун в третьей четверти марса, более того мы тут не видим что у тебя в проекте, а играть в телепатов никто не будет
Как в таком случае стоит поступить? Чтобы снег падал везде на уровне, и если в любой момент туда перенесся, он там падал, и наверху падал, и внизу падал, везде снег, даже Аллах в снегу.
В 3д например я цепляю дочерний объект - партикл - к камере. Камера движется за игроком и создаётся иллюзия, что снег падает везде.
Блять, чел я тебя спрашиваю пример игр с открытым миром на юнити, а не туториал со сценой с одной дорогой и отсутствием объектов.
Если конкретизировать, мне интересны фундаментальные вещи как реализовать открытый мир на этом движке, ведь если просто создать огромную сцену и разместить на ней объекты это забъёт память и всё, даже если ты напишешь отключение обработки объектов в радиусе, их инициализация на старте игры это будет долгая загрузка с забитием памяти.
Соответственно нужно делить игру на сектора и подгружать только соседние. Например, загружать только 9 секторов из которых активные объекты только в центральном секторе. Остальные обрабатываются упрощённо, либо вообще не обрабатываются.
Но как это сделать, ведь в юнити нет ничего подобного. Нету секторов никаких. Есть сцены, которые нельзя "сшить" чтобы получился бесшовный мир.
Вариант 1, хороший: Фуллскрин эффект, который рисует на экране снежинки, движение снежинок вниз и домножаем на отрицательную скорость персонажа, чтобы снег "улетал" назад.
Вариант 2, быстрый :
https://www.youtube.com/watch?v=pRORARnM0Yk
Блядь, чел, ты еблан тупой.
Ты бы еще спросил "можно ли на C# сделать открытый мир без загрузок сцен" или "можно ли на компьютере сделать открытый мир без загрузок сцен". Движок тут вообще ни при чем, ебло ты тупое. Сцены - не для того, чтобы их "сшивать", дегенерат ты гуманитарный.
Лучше молчи, если тебе нечего ответить по существу. Я спрашиваю как это сделать средствами юнити, ты пишешь не связанную хуйню. Очевидно, что уровень твоих знаний не хватает, но тебе стрёмно признаться, что ты долбоёбина бесполезная.
Так я тебе помогу, обозначив твой статус дебила.
>пример игр с открытым миром на юнити
Rust
Subnautica
Copper Dreams скоро выйдет. Изначально были карты с подгрузками, теперь сшили всё в одну карту.
https://www.kickstarter.com/projects/1649838104/copper-dreams/posts/2670247
В кербал спейс программ можно на луну улететь нахуй без подгрузок. И даже дальше.
генератор. возрождаю один свой старый проект который давно хотел поделать.
>>21346
префабы конечно могущественно, но рефлексию советую всё-же потыкать.
>>21964
можешь свою партикл-систему сделать на коленке, чтобы она тебе снежок делала читая например глубину ортогональной камеры сверху. будет довольно узкоспециализированно но быстро-быстро.
>>21995
вопрос то и правда туповат. берёшь и делаешь игры с открытым миром. какие проблемы то? нету никаких проблем.
>>22007
потыкай в него, там понятно всё.
картинки забыл
Нухуйзнает, я-то могу сделать бесшовный мир в юньке. А ты - нет.
Это значит, что ты тупее дебила, тупой дебил.
Да, я первым делом так сделал, из-за слишком быстрого движения игрока и соответственно камеры частицы сильно отставали и не успевали появляться.
>>21982
>Фуллскрин эффект, который рисует на экране снежинки
Это в смысле мне надо сделать эффект на канвасе? Обьясни, если не сложно, а то я не понял разницу между твои вариантом один и два. Через что реализовать вариант один?
Спасибо всем за ответы <3
Я вот пока до такого варианта додумался, пикрил - скрипт врага. На данный момент готовы 4 вида перемещения по локации, написаны в порядке приоритетности. Наверху - самый приоритетный, то есть, если и бежать_за_игроком() и идти_на_фонарик() выдают true, то выполниться только бежать_за_игроком().
Далее еще добавлю варианты.
Когда ничего такого не присходит, выполняется последнее - ходьба от одной рандомной точки до другой.
Такой вопрос. Сейчас в моем игоре проигрывается сплеш анимашка в начале. Это из-за фришного юнити. Но я могу купить подписку, собрать прилагу со своим сплешом, залить в апсторы и потом завершить подписон.
Прилага же будет работать без сплеша? Или он появится потом?
>купить подписку, собрать прилагу со своим сплешом, залить в апсторы и потом завершить подписон.
Подписка покупается минимум на год вперед.
Логически неплохой код. Оставь как есть.
Реально же у тебя реализован конечный автомат на енумах. Можно заменить весь код на одноименный шаблон.
Будет несколько классов движения - то что сейчас соответсвует move_type, а у перемещаеющегося агента будет экземпляр текущего вида перемещения со всеми необходимыми данными. Вся логика тогда сведется к вызову функции оценки перехода в другое состояние и собственно методу перемещения.
// псевдокод
// анализируем можно ли из текущего состояния можно перейти в другое
if (this.CurrentMoveState.CanTransistNext())
{
// переходим - это новый объект
this.CurrentMoveState = this.CurrentMoveState.NextState()
}
// выполняем код перемещения для текущего состояния
this.CurrentMoveState.Update()
MoveState - должно быть четыре класса перемещений и у каждого должа быть функция где он скажет, что делать дальше, если так перемещаться больше нельзя.
Из мелкого что я поправил бы:
1. Вероятно самый первый иф сравнивает флоаты на точное равенство. Так делать нельзя ибо флоат никогда не бывает точным числом. Еще можно получить глитч - задать близкую точку на дальность 0.01, и на нее агент покажет полную анимацию например переход шага в бег и обратно, хотя реального перемещения не будет.
2. Код стайл говно. ПишиНормально.
3. Нигде не написано, что в ифах зашит приоритет перемещения. Ты сам потом это забудешь и получшит счасливую отладку.
Да я уже накостылил себе решение, вроде пока фурычит.
В юнити так-то была сделала солнечная система без загрузок сцен.
Огурцовая космическая программа
Так что возможно все.
Convert.ToInt
Хорошо. Допустим, можно, но как.
То есть нужно просто создать максимально возможную сцену и пилить мир? Но разве он не будет лагать к хуям от сотен тысяч объектов на сцене?
Зачем? Я вижу что код делает, каким образом это адресует проблему? Ты знаешь какой должен быть результат в случае 222? 2.22 или 222.00 или вообще floor'ed to 2.00?
Где это очевидно? Было бы очевидно, если бы у него был "2" в 2.00 но у него "200" (целое) в "2.00" и 200 уж никак не = 2.00
У него своя дурацкая кастомная логика и ее я пытаюсь понять
Если хочешь писать хорошо и не напрягать нормальных программистов забудь про операцию деления (исключение %2)
То что надо
Нужен какой-то компудахтер для работы в юнити, и что же мне приобрести: Мак или собственно ПеКа? Так как мой старичок уже умер а продолжать работать над проектом нужно. Сам проект в 3D, не платформер и прочее. У кого какой опыт был на этих железках? Молю, подскажите что выбрать.
Звучит так будто тебе с платформой релиза надо определиться для начала, если мобилки то с винды на айфон ты не релизнешь, а с мака на андройд без проблем. Если не мобилки - очевидно тебе надо прогонять на винде. Учти что студию на мак не накатишь, соответственно скорость разработки упадет. Отличия производительности машин, думаю, твоему проекту будут не сильно принципиальны.
Ага, и правда быстрее. Чот думал для встроеных типов вообще нет разницы, потому что там под капотом одинаковый код форматирования.
Вырежи сплеш из ресурсов своей игры.
https://dtf.ru/gamedev/81087-biblioteka-megascans-stala-besplatnoy-dlya-unreal-engine-razrabotchikov
>Ten high-resolution packs have been shared today for free on the Unreal Engine Marketplace
Невъебенная щедрость.
>we’re immediately slashing the pricing of Megascans, giving you nearly twice as much content to download, and removing the resolution cap—for everyone, regardless of what engine
Скидочки неплохо, можно даже не шквариться об уг4.
>Bridge and Mixer 2020 will be 100% free for everyone
Во, для всех. Эпик молодцы только в том, что не боятся тратить кровавые юани налево и направо. А квиксель молодцы, что не стали делать иксклюзив для уг4.
>Невъебенная щедрость
Это количество ассетов которые добавлены в Эпик Стор, если залогинится на Квикселе с аккаунтом эпиков, становятся доступны вообще все текстуры модели в любых разрешениях, для анрилогоспод теперь всё бесплатно.
>Во, для всех
И что юнитибомжи с ними будут делать без библиотеки сканов?
Если делаешь никому не нужную игру, то ничего. Если планируешь её продавать, то считай что спиратил их с соответствующей ответственностью.
Анончики, а кто-нибудь уже работал с новой Input System?
Я вот не особо понял, как её правильно юзать.
Я вот сейчас использую эту систему так:
Инициация:
PlayerInputActions inputAction;
Vector2 movementInput;
private void Awake()
{
inputAction = new PlayerInputActions();
inputAction.PlayerControl.Move.performed += ctx => movementInput = ctx.ReadValue<Vector2>();
}
И дальше подписываюсь и отписываюсь:
private void OnEnable()
{
inputAction.Enable();
}
private void OnDisable()
{
inputAction.Disable();
}
И вот у меня много разных скриптов, и очень многим нужно считывать Input. А писать такую гору кода в разных маленьких скриптах какой-то бред. Может быть я делаю что-то не так?
Может быть надо написать один скрипт {Get;Set} с публичными полями, которые другие скрипты из него будут уже принимать?
Или я вообще что-то не так делаю?
Знатоки, призываю вас!
Алсо, никому не советую использовать эту новую систему, нашел там баг при работе с UI.
Мб я вообще зря полез с этой новой системой разбираться и пока не поздно лучше убрать её куда подальше?
Анончики, а кто-нибудь уже работал с новой Input System?
Я вот не особо понял, как её правильно юзать.
Я вот сейчас использую эту систему так:
Инициация:
PlayerInputActions inputAction;
Vector2 movementInput;
private void Awake()
{
inputAction = new PlayerInputActions();
inputAction.PlayerControl.Move.performed += ctx => movementInput = ctx.ReadValue<Vector2>();
}
И дальше подписываюсь и отписываюсь:
private void OnEnable()
{
inputAction.Enable();
}
private void OnDisable()
{
inputAction.Disable();
}
И вот у меня много разных скриптов, и очень многим нужно считывать Input. А писать такую гору кода в разных маленьких скриптах какой-то бред. Может быть я делаю что-то не так?
Может быть надо написать один скрипт {Get;Set} с публичными полями, которые другие скрипты из него будут уже принимать?
Или я вообще что-то не так делаю?
Знатоки, призываю вас!
Алсо, никому не советую использовать эту новую систему, нашел там баг при работе с UI.
Мб я вообще зря полез с этой новой системой разбираться и пока не поздно лучше убрать её куда подальше?
Ладно, забейте, либо я еще туповат для этой системы, либо она забагована, но скорее всего и то и другое. Читал сейчас форумы юнитевские, дык с ней проблем овер миллион, не стоит её пока использовать, если серьезный проект делать собираетесь.
Хотя она очень удобная, по сути.
Когда её допилят и сделают нормальный релиз, то будет вообще пушка.
да и вобще нет паттернов для юнити. Есть просто паттерны :)
Дебил, блядь, ебаный, нахуй ты с такими вопросаси сюда оезешь, пидораха? Вот тебе пример: в твоейтоьоссаной игрульке треьуется чтобы каждый третий пук был трассирующим, вот ты и хуяришь иф х%3 ==0, то хуярится трассер, елс хуярится обычный пук. Всосал, хуесос малолетний?
Двачую, пиздец двощеры необучаемые, даже в с# справку зайти не могут, пиздос
Эта хуйня делит число и остаток от деления возвращает
Ну норм да вроде понял
proigral
А чего вы не объединились и не сделали Кирандию?
Делаю что-то типо простенькой ходилки, где будет много разговоров. Вопрос: как лучше делать источник предложений для реплик?
Я думаю просто нахуярить в текстовом файле кучу-кучу реплик, отсортировать их по типу нпц или другим факторам, потом просто брать их из этого файла по порядку. Но думаю это будет как-то слишком запарно+вдруг это ещё и на производительность будет пиздецки влиять, ибо я хз.
Есть конечно вариант класса, где будет куча массивов с репликами, но думаю это ещё хуже, чем вариант выше.
Реплики оформить в каком-нибудь языке разметки: xml, json, etc. И класс который будет работать с ними, у которого же игра в нужный момент времени будет запрашивать реплику с определенным идентификатором.
Благодарю.
Самый простой вариант: навмеш, скрипт получает от игровой логики точку, в которую должен прибыть, прокладывает к этой точке маршрут и...
В зависимости от своего состояния либо идёт к этой точке, либо бежит, либо стоит и сообщает всем проходящим мимо, что хочет туда пойти.
> внедрять туда что-то новое
В данную систему ты только внедряешь новые состояния в КА непися, в которых указано только точка назначения и скорость.
Я делал на луа диалоги. Один файл хранил вопрос собеседника и варианты ответов. Каждый ответ это строка с текстом и идентификатор на следующий файл. Дополнительно себе сделал сохранение и загрузку переменных, чтобы можно было разблокировать варианты ответов.
Fungus.
Парни, такая проблема. Реализую движение персонажа в FPS шутане. Юзаю rigidbody в качестве физики. Проблема вот в чем: если пишу rb.addforce(блаблабла) - то гравитация работает нормально, челик падает, все збс. Если же пишу через rb.velocity(хуйпизда), то гравитация почему то меняется и перс падает очень медленно. Подскажите кто шарит, в чем проблема, или обьясните, как работают эти ваши риджидбади
а и доп. вопрос. Почему CharacterController не работает с физикой, и на кой хуй он тогда нужен?
Стоял в буквоеде, приметил книжку по анриалу, решил полистать. Пиздец он заморочный в плане интерфейса, я ебал. Я не знаю как там обстоят дела с библиотекой и языком, но с таким инструментарием до них еще доползти надо. Так что, с ужасом закрыв это адское писание, поблагодарил разрабов unity, за то что сделали наш кусок говна хотя бы интуитивно понятным
1. Потому что велосити отменяет дефолтную гравитацию и перезаписывает её новым значением, которые ты сам должен указать по оси у.
2. Потому что чарконтроллер придуман для лёгкой реализации передвижения и всё остальное надо говнокодить, а ригидбоди как раз таки имеет всё то, что не имеет чарконтроллер, но само передвижение и поведение физики надо говнокодить и настраивать. Смекаешь?
>1) надо допиливать
>2) надо допиливать
бялть, эти ебаны с 2006 года не могут запилить нормальный контроллер, я хуею. Вот зато кокомпеляция на 100500 платформ и VR - это дааа, заебись
>при этом не залезая в 300 строк говнокода
что, собственно, эквивалентно созданию своего контроллера
ну что бы у меня начало движения сопровождалось не с плавного нарастания скорости, а например, с импульсного "пинка" скажем
Честно говоря, я не смогу ответить тебе на этот вопрос, т.к. не разбираюсь в платных ассетах. Могу сказать, что обычным кодингом это легко сделать.
Я собственно с этого и начинал. Нажатие кнопки присваивает фиксированный импульс персонажу игрока.
Я сейчас наоборот работаю над тем, чтобы нажатие клавиш посылало персонаду команду, что надо начать движение, после чего его внутренний механизм, общий для всех персонажей, включает у него анимацию ходьбы и наращивает скорость, синхронно анимации.
Потому что, у меня геймплей основывается на переселении игрока-духа из тела в тело и мне нужно периодически управлять то одним неписем, то другим, поэтому они должны без игрока ходить сами с ИИ по навмешу, а при вселении в них игрока - двигаться согласно инпуту.
да в пизду эти ассеты. ХОЧУ ВСИО ДЕЛАТЬ САМ!
То что ты делаешь - довольно интересно. Ибо я заебался с этим контроллером, уже сделал все - интерфейс, консоль, подгрузку карт, префабы различных триггеров (да да, прямо как в настоящем редакторе карт), но никак не могу допилить нормально этот дэбильный контроллер. Туплю, и все тут. Из-за него кста понял, что 98% гайдов на ютабе - полнейшее говно без задач, сделанное на коленке за 5 минут с целью набрать просмотры с лохов, вкатывающихся в гейдев. Особенно рофлю с видосов " Гайд как сделать игру на юнити!!!1адин". Там чувак на серьезных щщах рассказывает, как импортировать free ассеты в проект, и компилить игру
Вот тебе навскидку простейшие скрипты для управления от первого лица
https://github.com/jiankaiwang/FirstPersonController
Как раз то, что ты хочешь. Простая трансляция трансформа без наращивания скорости.
>перезаписывает её новым значением, которые ты сам должен указать по оси у.
можешь поподробнее рассказать, пожалуйста. Просто добавить vector3.down?
да, но это же transform - не физическое движение. Следовательно будут лаги при просадке фпс, провал в стены и тд. Я кстати делал свой контролер на трансформах (в сумме 346 строк кода, лол), и он был норм, но как раз нестабильность системы Update не дала мне его использовать. Я его полтора месяца блять делал, но зато опыт какой никакой получил. За пример спасибо
>к компоненту y каждый кадр приписывается значение гравитации
но студия говорит мне что velocity.y не является переменно и отказывается это есть. Я так обсирался и с фризом камеры по одной из осей, и где только не обсирался. Абсолютно не понимаю, если есть переменная float Y у какого нибудь трансформа, то студия пишет что это не переменная. Как это блять работает?
Это структуры как cвойства в шарпе так работают. Сам об это несколько раз спотыкался.
Суть если есть структура Vector2 { float X; float Y; }
То можно писать:
SomeVector.Y += SomeValue;
Но если этот вектор это свойство другого объекта, то так писать уже нельзя:
Obj.SomeVector.Y += SomeValue; // выдаст твою ошибку
А надо писать так:
Obj.SomeVector = new Vector2(Obj.SomeVector.X, Obj.SomeVector.Y + SomeValue);
Ничего не понимаю. Вот у меня метод в котором происходит перемещение. Куда мне написать rb.velocity.y? Если добавить еще одно velocity - работать не будет(видимо два вектора он не жует). Если я добавлю гравитацию через addforce - работать не будет. Если делать через rb.velocity = new Vector3(rb.velocity.x, rb.velocity.y + gravity), то работает некорректно и по уебански. Я уже реально не знаю че делать. Понимаю что на 99% это я не догоняю нихуя, ибо кто то умудряется делать игры на этом куске крэпа. Пробовал уже и через трансформы (не физика - поэтому нахуй), и через CC(не взаимодействует с физикой других обьектов, а писать ее с нуля это пиздец - нахуй), и через rigidbody ебусь уже хуй знает сколько. Крч ,если мне кто нибудь кинет гит с готовым нормальным контроллером (простым, но корректно работающим) - до пола поклонюсь, перст поцелую, и до гроба обязан буду. А так только самоубийство (или платформеры делать)
На, один из моих ригидбади контроллеров, которые я юзаю. Дефолтно, просто и мало кода.
moveX, moveY - направления по оси Х и Z называю ось Z moveY просто по привычке, speed - скорость, понятное дело, vector - вектор, normalize - дабы скорость под углом не была быстрее обычной скорости, playerTrasform - трансформ твоего игрока и метод от трансформа позволяет ходить твоему игроку по его осям, а не глобальным тебе может не пригодиться.
Твоя главная проблема - ты берёшь уже готовые векторы из юнити, а не делаешь свой, где ты вписываешь свои направление, а так у тебя по кд делается векторная мешанина и проёб оси у.
Я сам ещё нуфаг, так что может более знающий анон тебя направит лучше меня.
Бля, я забыл упомянуть, что вектор из этого метода - поле моего класса и его надо вместо твоего вектор в rb.velocity ставить, вот.
Чёт я пиздец уже сонный, ошибка за ошибкой следует.
Мой метод для расчёта движения в Update, а rb.velocity в FixedUpdate, вот. На этом всё, вроде в этот раз ничего не забыл.
Ок. Вообще не думал что запилить обосаный контроллер будет так сложно. В моем манямирке я там уже пилю бандлы для обновлений, поднимаю сервера для мультиплеера, делаю карты для игроков, а не деле - ебусь со сраными векторами. Нужно реально макаку найти, чтобы за дошики мне нормальное управление сделал
Ну, тут уже дело такое. Главное хуй не забивать и превозмогать. Начало всегда тяжкое.
НАНИМАЕШЬ МАКАКУ ЗА ДОШИКИ
@
ЗА НЕДЕЛЮ ВСЕ МЕХАНИКИ РЕАЛИЗОВАНЫ
@
ДОВОЛЬНО УРЧИШЬ И ПОДНИМАЕШЬ СЕРВЕРА ДЛЯ МУЛЬТИПЛЕЕРА
@
МАКАКА УХОДИТ В ЗАКАТ
@
ПРЕДРЕЛИЗНЫЕ ТЕСТЫ, ВСЁ ОТЛИЧНО
@
И ВОТ ЭТОТ МОМЕНТ, ВИДИШЬ КАК ЛОГИНЯТСЯ ПЕРВЫЕ ИГРОКИ
@
УРЧИШЬ
@
ЗАМЕЧАЕШЬ, ЧТО У НЕКОТОРЫХ ИГРОКОВ ВОЗНИКАЕТ ОДИН И ТОТ ЖЕ БАГ
@
РЕШАЕШЬ ПОФИКСИТЬ И ЗАЛЕЗАЕШЬ В СОРЦЫ
@
ИЗ НИХ НА ТЕБЯ ЕХИДНО СМОТРИТ ПИКРИЛЕЙТЕД
ОТКАТЫВАЕМ ВРЕМЯ НА МОМЕНТ РЕАЛИЗАЦИИ МЕХАНИК
@
ТРЕБУЮ ОТ МАКАКИ ПОДРОБНОГО ОБЬЯСНЕНИЯ КАЖДОГО СУКА МЕТОДА, ПЕРЕМЕННОЙ, НЕБААЛЛАХА
@
ЕСЛИ ЧТО ТО ХИТРОЖОПИТ - ОТБИРАЮ ПРИПРАВУ К ДОШИКУ
@
ASS.BUGURT(ANTI);
>ОТБИРАЮ ПРИПРАВУ К ДОШИКУ
Ты хуже Гитлера, у тебя наверное даже аура темная невооруженным глазом видна, а проходящие мимо тебя бабки из церкви внезапно падают в припадке, сучат ногами и закатывают глаза
Двачую, так и будет.
Накатал свой контроллер движения и стрельбы в 2д, несколько раз обсирался с векторами, а управление с этого контроллера рейкастами хотя выглядит абсолютно прозрачно, на практике едва-едва прикручено синей изолентой (хотя казалось бы что там сложного, берешь точку, направление и длину). Как он будет работать на чем-то клавомыши - понятия не имею.
Но если мне предложат за него всего лишь доширак - продам и такое говно не задумываясь, а то хули вы хотели, если даже приправу зажимаете?
Маня, нахуй им под конкретного хуесоса, не умеющего в кодинг, типа тебя, чето пилить? Контроллер персов зависит от игровых механик, тут нет универсального решения и быть не может. На вскукареки манек, у которых не хватает ума выучить программирование, но которые лезут в гд строго похую.
> Нужна простая корутина которая за параметр будет принимать количество секунд сколько ждать и функцию которую нужно выполнить после ожидания. Такое возможно?
Да, легко.
IEnumerator Zaloopa(float delay)
{
yield return new WaitForSeconds(delay);
GovnofunkciaOtMani();
}
Маня, учи делегаты, чтобы не быть батхертом.
IEnumerator Govnorutina(float delay, Delegate govnoDelegat)
{
yield return new WaitForSeconds(delay);
govnoDelegat();
}
При этом назначать делегат надо там где у тебя событие вызывает корутину.
Но ваще это у тебя залупа получается слишком тупорылая.
>Нужна простая корутина которая за параметр будет принимать количество секунд сколько ждать и функцию которую нужно выполнить после ожидания. Такое возможно?
Это блять элементарная вещь. Ты вообще не гуглишь что ли? Слово корутина выучил, а как это работает - нет? Нихуя ты дурачелли.
Джон Блоу лично придет к тебе ночью и выебет
Суть токова - есть канвас и по какойто причине он пропадает с экрана в редакторе или в самой уже игре, и что самое странное чтобы он вновь появился достаточно его выключить галкой, и включить, всё.
Заебался, что это за хуйня может быть?
Реально блять, не понятно, ничего не меняю тупо выкл/вкл и он появляется. сукблять
Разбираюсь с меканимом, пытаюсь понять как лучше решить задачу.
Есть персонаж, он может бегать/стрейфиться/падать/прыгать без оружия, с мечом, мечами, пистолетами, копьями и т. д.
Анимации смены оружия есть.
Все анимации стойки и движений есть, и они визуально отличаются друг от друга. Заоверрайдить только руки не получится - потеряется шарм многих анимаций.
Внимание вопрос. Как вообще правильно организовывать ноды и бленды внутри контроллера? Какие есть подходы или советы к таким задачам?
С меня как обычно.
лол снова ты. ну попробуй потыкай эту мошню
https://blogs.unity3d.com/ru/2018/06/20/announcing-kinematica-animation-meets-machine-learning/
ещё эту потыкай, тоже клёвая
https://blogs.unity3d.com/ru/2019/05/14/introducing-the-animation-rigging-preview-package-for-unity-2019-1/
Че за говно? Че просто нельзя два раза вейтфорсегонд написать вместо какого-то говноцикла, который самовызывает корутину?
Тут есть одна деталь.
Большинство контроллеров работают с GetAxis.
Но она дает не сразу полный эффект. Нажимаешь W - 0, 0.1, 0.5, 0.9, 1 (условно).
Хочешь резкости - делай GetAxisRaw или нормализуй вектор перед умножением на дельту времени.
Другой вопрос. чек пикрил. Как повернуть объект, чтобы его вектор up был равен вектору нормали плейна? Т.е., чтобы объект "стоял" на плейне.
Где я обосрался? Я вот думаю в пике 4 проблема, но я не ебу ЧТО ИМЕННО мне надо закидывать в качестве стринг параметра в json метод. Поэтому я закидываю сам текст из файла. Помоги тупому ньюфагу, умоляю, ибо гайдов нормальных я чёт не ощущаю, лишь сраные гайды по сохранению данных в json, а не замене данных в переменных из оного.
Пиздец, вкинул скрины на которых всё и видно, ты слепой? Или читать не умеешь?
ЁАБНЫЙ ВРОТ С КЕМ Я СИЖУ НА БОРДЕ
и.н.б посмотри свои же скрины и всё поймёшь.
Нахуя ты токсичишь?
Ну, гореть не обязательно, но теперь я понял в чём проблема и пофиксил.
Ньютон в деле, перс представляет собой бильярдный шар.
Чтобы такого не было - крутить настройки Rigidbody, вплоть до включения Kinematic.
Блядь, так ты оказывается очередная скотопидораха, которая лезет в гд, не зная SOLID и конвенций. Я твои каракульные названия функций в рот ебал разглядывать.
>крутить настройки Rigidbody
там и настроек то с гулькин хуй. Я просто не понимаю, типо вот я бегу по ровной поверхности - все норм. Залезаю на рампу или толкаю ящик - вектор движения меняется и я двигаюсь в противоположную сторону, казало сь бы логично. Но если отжать васд и вообще нихуя не нажимать - движение все равно продолжается. Если щас запилю webmку, то скину
Drag и физическкие свойства поверхности материала перса и енвиронмента убрал?
Олсо, не используй дефолтную физику для перса, юзай кинематик rigidbody и делай чек на коллизию вручную
на обьекты и пол наоборот наложил материал с нулями, чтобы при прыжке в стену перс на прилипал к ней.
>делай чек на коллизию вручную
ну одно дело стопить перса когда он перпендикулярно ящику идет, а если в бок например? Там же центры тяжести надо определять, силы реакции опор всякие, это ж пиздец
Бля ты даун что ли, я тебе говорю бери годот, пожалеешь сука, короч тебя предупреждали, прибежишь с обосранными портками плакаться, жалеть не будем.
алсо, если материал убрать с пола и обьектов, то вроде этот эффект уходит, но на этих материалах ничего и нету. Там просто bounce и friction на 0 выставлены, чтобы как я уже сказал - не прилипать к ебаным стенам
я ставил годот, покрутил повертел, хуй знает. Был бы сишарп - мб щас бы ебался с днодотом, а так спасибо, ненадо
>юзай кинематик rigidbody и делай чек на коллизию вручную
This.
Ни в одной серьезной игре не вешается ригид бади на игрока. Везде кастомная кинематика, потому что физика ригид бади недетерминирована, подвержена глитчам и не кастомизируется в нужной степени. Например тебе надо, чтобы игрок соскальзывал с поверхности, если угол наклона превышает определенный - с ригид бади ты это надежно не сконфигуришь, спасёт только ручная кинематика.
>Там же центры тяжести надо определять, силы реакции опор всякие, это ж пиздец
Ну да, а ты думал, геймдев это просто? Не хочешь рвать очко - делай игру без наклонных поверхностей, программирование кинематики наклонных поверхностей сложное дело, особенно в 3д, нужна куча матана и физики.
>>22716
>Был бы сишарп
Уже давно есть.
Но там всё гораздо хуже с физоном, постоянные глитчи, проваливания коллайдеров друг в друга.
>Там же центры тяжести надо определять, силы реакции опор всякие, это ж пиздец
Кстати, как вариант, если неохота вникать в это - скочять ассет, наверняка есть в сторе fps контроллер на кинематик бади, может даже бесплатный.
>ну одно дело стопить перса когда он перпендикулярно ящику идет, а если в бок например? Там же центры тяжести надо определять, силы реакции опор всякие, это ж пиздец
У тебя выбора нет. Стандартная физика либо для roll-a-ball либо для inverse kinematic симов а-ля qwop
Ты смешной. В халяве физика и player movement одни из самых отточеных до сих пор. Некоторые современные ААА поделки даже дотянуть не могут на нее.
тут согласен. Но это было аж в 2004, и я очень сожалею, что в юнити нет такого даже в 2020. Перекатываться во что то другое - долго и муторно. Значит либо пиздить ассеты, либо энивей писать кастомную физику. В таком случае юнити нахуй не нужен, кроме интерфейса и драг-н-дропа. Уж лучше тогда в xna какой нибудь сьябывать, там хоть код свой будет
>>22710
>>22711
>>22713
>>22715
>>22717
ЕБНАРОТ, Я РАЗОБРАЛСЯ почему при коллизии с другими обьектами перс начинает сьябывать куда то и ему похуй на wasd. Я же материал поставил на обьекты, чтобы не прилипать к ним когда уебываюсь в них, и поставил там фрикшн = 0, а это ебаное трение. А раз у меня дефолтная физика стоит, следовательно он и зависит от этого фрикшена. Ебать я даун конечно. Теперь стоит вопрос, как это трение ликвидировать вообще, но чтобы к стенам не прилипать. Любимое unity - лучший движок эвар
мувмент идеальный, ничего говнокодить не надо, даже гравитация в 4 строчки делается, НО. Не взаимодействует с риджидбади других обьектов. То есть опять же - писать кастомную физику
>писать кастомную физику
Еще 4 строчки? Уже бы давно сделал, чем с rigidbody возиться.
https://answers.unity.com/questions/17566/how-can-i-make-my-player-a-charactercontroller-pus.html
>В таком случае юнити нахуй не нужен, кроме интерфейса и драг-н-дропа
Еще одного постигло озарение, что даже самый продвинутый движок - всего лишь инструмент и он не сделает охуенный геймплей за тебя.
о, спасибо анон. Все работает весьма сносно
1280x720, 0:32
товарищь олдфаг, обьясните пожалуйста почему при прыжках в высокую стену все норм, а при прыжках в стену ниже моего роста происходит пиздец? Юзаю CC в качестве мувмента
Хотелось бы в редакторе задать эти состояния и переключать потом их из кода. И чтобы в самом редакторе можно было переключаться между состояниями. UnityEvent для этого не подходят.
Очевидно же твоя проблема в том, что в упор к мелким стенкам ты определяешь как-то коряво isGrounded = true своим рейкастом, и поэтому мгновенно падаешь вниз. Фикси.
цистерну ебаного чая тебе, анон. Я выставил step offset на 0, и оно перестало дрочить на стену. Здоровья тебе и твоим близким
такое подергивание это типичный глюк таких контроллеров. это не только в юнити, я такое во многих играх встречал.
Повезло тебе, что я мимо проходил. Может быть еще увидишь это сообщение. https://www.youtube.com/watch?v=G5R4C8BLEOc&list=PLFt_AvWsXl0dliMtpZC8Qd_ru26785Ih_
Лучшее объяснение ever.
Ого, спасибо анон!
Я уже кое-как вроде разобрался, как ими пользоваться, осталось понять, как в игре всё это удобно реализовать для моих нужд.
В любом случае- благодарю, пойду смотреть
https://habr.com/ru/post/353780/
Вот кстати, пока искал про делегаты, нашел сравнение встроенной Event System Unity и C# евентов.
https://jacksondunstan.com/articles/3335
Тут деталь. Чем больше подписчиков на эвент - тем меньше разрыв между шарповыми эвентами и эвентами юнити.
Ну и еще - юнитиэвенты дают няшную менюшку и меньше шансов проебаться, забыв отцепить объект от эвента.
Как блядь зарабатывать на играх? Я уже два года занимаюсь разработкой, понимаю конечно, что еще чайник, но я вот просто не понимаю, что мне делать дальше?
Игра на ПК в стим- сиди минимум полгода (в идеальных условиях) и ебашь целыми днями в надежде сделать хотя бы немного увлекательную и интересную игру. Хотя скорее всего за такое время и без команды получится лишь прототип небольшой.
Игра на мобилки- тут я вообще не понимаю, мне кажется там такая нереальная конкуренция, что я даже подготовлю приятную и увлекательную игру и её вообще никто не заметит, даже если я десятки тысяч в рекламу вложу.
Что остается? Как зарабатывать, анон? Неужели единственный вариант это или устраиваться на работу или искать фриланс подработки либо ебашить по пол года на дошираках в надежде что игра, в которую ты вложил все силы вообще кому-то понравится и её кто-то заметит?
А как с издателями работать? Я слышал, они разработчиков вообще жестко прессуют и все деньги забирают. Или это я параноик? Им просто кидаешь прототип и говоришь, что помогите закончить?
Ладно, спасибо за ответы. Сложно это конечно, инди быть. Либо сиди на дошираках по пол года, либо на дядю работай. Ех.
Может я питаю себя ложными надеждами, но в настоящее время как раз сижу на дошиках, пилю игру мечты для стим. Хотя не могу жаловаться на текущее положение вещей, моя ситуация позволяет уделять разработке фултайм весь день, если офк не буду прокрастинировать и сидеть на двачах.
Один пилишь? Сколько времени еще думаешь на это уйдет? Сколько уже времени потратил?
Моя ситуация в целом тоже позволяет этим заниматься фултайм, но очень угнетает ощущение, что сколько бы я в день не тратил на проект времени, меньше он не становится, работа всё прибавляется и прибавляется. Еще и бесит, что разрабатываешь прототип, а потом играешь в него и понимаешь, что сделал какую-то хуйню. И всё по новой. Это пиздец.
И вот это гнетущее ощущение того, что ты делаешь какую-то хуйню, с которой еще и не знаешь, что потом делать, умножается в десять раз на то, что я недавно окончил вуз и мог бы спокойно работать с корешами и получать по 70-100к уже сейчас. Куда меня занесло...
Один, где-то с начала года делаю, бывали перерывы в месяц пару раз. Думаю работы еще на полгода скорее всего больше ясен хуй.
>и понимаешь, что сделал какую-то хуйню
Жиза братан, начинал заново с нуля весь проект несколько раз. Я считаю что главное в индигеймдеве это постоянно спрашивать себя "Чем моя игра лучше других в этом жанре?" И бывают моменты когда я не могу ответить на этот вопрос и в итоге мотивация в ноль.
>моя ситуация позволяет уделять разработке фултайм весь день
>Моя ситуация в целом тоже позволяет этим заниматься фултайм
Так и говорите - сижу у мамки на шее и РАБотать не хочу.
Это анекдот такой.
это пиздабол, не обращай внимания...
Друже, зделой мне игру, суть токова: можно играть толщекопом во вселенной наоборот с толщеходами. Вселенная наоборот - это когда вместо космоса бесконечная твердь (Первичная Твердь, Толща), а вместо планет - пустоты в Толще.
Подробности можешь поискать по разделу, по ключевым словам "толща, твердь, толщеход".
Месяц назад начал делать 2д шутан с видом сверху, параллельно разбираясь чем отличается интерфейс от делегата и какой кнопкой редактора сделать заебись.
И тут мне стучится в личку в дискорде индус и зовет в команду делать игру. Естественно, прогресс пока нулевой, по сайту нихуя непонятно, чем вообще команда занимается, оплата - ЧАСТЬ ПРИБЫЛИ да и жанр - типичная убегалка от монстра среди коридоров в мясных тонах, словно пришедшая из видеорелейтеда.
https://www.youtube.com/watch?v=8-Gvmgj6qfc
И знаете, я согласился. Наклепал за вечерок им систему рассматривания вещи в инвентаре (прямо как в скайриме), помотрел пустой, как мой кошелек, гитхаб и пообещал допилить систему инвентаря.
В принципе меня устраивает - я так же как и раньше на голом энтузиазме делаю проект, который не принесет бабла, зато сейчас мне будут подгонять ассеты, а главное - я учусь пользовать гитом и взаимодействовать с другими кодомакаками.
Скорее всего к новому году все хуй забьют на проект
Чейто не, не смешно
Любой, кто называет толщеходы землеройками автоматически превращается в пидора.
Киньте пожалуйста, если есть.
Успешен, хули.
Лол
На Ютубе что-то у Weinmann видел про это.
Ну и банальное SOLID.
Хотя Юнити любит эти принципы обоссать. Например в редакторе нельзя ссылки на интерфейсы делать без ебли.
Исходники не нужны для анализа структуры большинства проектов.
Мод-сообщество безо всяких исходников раскопало всю подноготную беседкодвижка.
Могу вкратце расписать, но тебе продуктивнее было бы почитать тред модамидопиливающих в тесаче и сходные ресурсы.
Хотя Скайрим это на голову выше уровня гд, идеалом его нихуя не назвать.
Баг на баге и багом погоняет, некоторые вещи модами хуй добавишь (новую ветку скиллов,к примеру - придется убирать один из существующих).
Абстрактно сложно дать какой то совет, гугли unity best practices читай все подряд. Ошибаться и переделывать будешь в любом случае, это нормально, с опытом придет как делать модули чтобы исправлений в будущем было минимум.
Тут не поспоришь, но в отличие от скайрима, у анона будут исходники его игры. Мы же выше о структуре проекта говорим.
А структура проекта там, между прочим, data-driven до того, как это стало мейнстримом.
Новичок, хочу посмотреть как реально годные проекты делают.
> Это просто пиздец какой-то. Да и код невозможно воспринимать в виде видео.
Тебе блядь принцип живого обучения с преподом и лекциями прямо домой доставляют, прямо к дивану, а ты нос воротишь.
Пик 1 - Код проверки есть ли под персонажем коллайдер, в скриншот не вошел код непосредственно прыжка, в который входит grounded, но там все ясно, а вот тут понятно начало, а вот с осознанием что происходит в коде с векторами - беда.
Есть пояснение, но енивей немного не догоняю.
>Первым делом определяются границы примитива столкновений нашего персонажа, а затем в области с такой же шириной непосредственно под ногами персонажа ищутся перекрывающиеся коллайдеры.
Пик 2 - код движущийся платформы. То, что в update - тайные письмена.
Вопрос для обоих пиков - что почитать по теме, чтобы разобраться как это работает? Или, может, кто нибудь захочет пояснить конкретно эти алгоритмы?
Поправлюсь, мне ясны переменные и что они делают, я не настолько туп. Неясны вычисления, почему они такие и как работают.
Заранее говорю, что я рылся в интернете в поисках ответа, но находил способы сделать зацикленный фон только через объект Quad. Но как мне сделать его масштабируемым, чтобы если разрешение или соотношение сторон менялось, размер заднего фона подстраивался под него?
С меня как всегда
1 Картинка понятна?
2 Тут проще одномерный случай рассмотреть.
Есть две точки, начальная и конечная, например A = 2 и B = 6, а trackPercent показывает насколько процентов пратформа продвинулась от точки A к точке B.
Если trackPercent == 0, то платформа в точке A.
Если trackPercent == 1, то платформа в точке B.
Если trackPercent == 0.5, то платформа по середине в точке 4.
Значит, как вычисляем положение платформы в зависимости от значения trackPercent? Берем расстояние между A и B, умножаем его на trackPercent, и прибавляем получившееся смещение к A.
x = A + (B - A) * trackPercent.
Получается speed - это не скорость движения платформы, а скорость изменения значения trackPercent.
Ну и в случае с векторами тоже самое проделывается для обоих координат x и y.
Левый нижний угол синего прямоугольника (min.x, min.y - 0.2)
https://www.youtube.com/watch?v=zit45k6CUMk
Вдруг поможет, тут вот у него 3 фона, они друг за другом меняются, получается зацикленность, наверное.
Разрешение экрана получается через Screen.width и т.д, всё есть в гугле, даже скрипты готовые, дальше уже сам.
Потому что у тебя масштаб прямоугольника, держащего ружье не 1 1 1. Масштаб главного объекта влияет на дочерние.
Хочу себе красивости наделать, но вроде такую хуиту не сделать кастомно внутри эдитора гайда я не нашёл.
Ты в тематике же, ожидаешь ответов за секунды?
Как не чувствовать себя изобретателем велосипедов?
Не использовать никакие масштабы кроме (1,1,1). Причём в принципе не использовать нигде, если с 2Д работаешь, ибо иначе где-нибудь, но вылезет говно.
Ну значит такой у тебя энтузиазм был. Можешь возвращаться в любимую ммошечку.
удачи. хуй его знает.
>>23491
на тебе гайд. тут расписано все довольно подробно.
http://runevision.com/thesis/rune_skovbo_johansen_thesis.pdf
сам делал что-то подобное только для блендинга кривых в процедурной анимации.
менять скейл объекта чтобы где-то в другом месте менять его обратно. лол.
я бы на твоем месте не доверял книжкам где авторы сами создают себе проблемы, а потом с ними борются.
да и метод для этой манипуляции попроще есть.
https://docs.unity3d.com/ScriptReference/Vector3.Scale.html
Благодарю, почитаю.
Юнити тут вообще ни при чем. Это один из базовых принципов работы с 2Д. Исходный скейлинг всех твоих спрайтов должен быть (1,1). Если ты делаешь другой - то ты сам себе создаешь проблемы из ниоткуда.
Подскажите какие грабли выбрать.
>>23651
лол. и правда. расскажи нам.
Неинициализированная переменная? Ну это если в плюсах, я хз возможно ли такое в шарпе.
потому что перфоманс хочу и всю эту хуйню с LLVM компилятором. агентов много.
даже если не пользоваться ECS, а только этой техномагией то проблем не станет меньше.
Я в этом не спец, но если бы в ECS был бы полиморфизм, то не было бы эффективности, так ведь?
Реализация: на персонаже висит скрипт "Skills", в котором описаны все эффекты, которые могут произойти с персонажем- он может ускорится и т.д.
На шарике-бонусе, который может подобрать игрок, висит простой скрипт, который на OnTriggerEnter2D делает GetComponent<Skills> с игрока и применяет определенный эффект.
Я ебнутый или это нормально?
Может быть знатоки получше систему знают, как на игрока повесить эффект? Писать отдельный эффект менеджер?
Работает же, значит нормально. К тому же это не критичное место по производительности.
Еще как вариант, присваивать шарикам бонусам тэги "ускорение", "замедление" и уже в скрипте игрока проверять, с шариком с каким тэгом он столкнулся.
эффективность то не заключается в самом ECS как таковом, он разумеется будет иметь хуже производительность чем если ты сам структурируешь всю свою хуйню более оптимальными способами. просто то что предлагает ECS вполне подходит в рамках проекта и упрощает манипуляции с этим чудным компилятором, который меня интересует больше всего.
из альтернатив - ебошить всё ссылочными типами, агенты имеют в себе листы в которых эти экшоны содержатся, когда требуется совершить какие-то манипуляции с этими экшонами то они переводятся все в блиттабл типы и скармливаются в Burst компилятор и всю эту многопоточную хуйню. но этот подход не годится, учитывая что я хочу довольно много агентов и много по ним итерироватся туда-сюда. надо максимально кэш-френдли код, так что остается описывать действия структами.
>>23672
менеджер тебе понадобится если ты захочешь более сложную схему бонусов. если тебя удовлетворяет эта то и нормас.
только ты как-то странно организовал всё это. триггеры не должны никуда лезть. они должны OnTriggerEnter2D смотреть что об них запнулось и вызывать там метод типа "ApplyEffect" и передавать в этот метод себя. а конечное место уже должно интерпретировать полученный эффект. И: Инкапсуляция
не размазывай столь важный код по всему проекту.
объекты могут передавать сами себя в методы пользуясь this. например вот так.
обана и обьект такой затриггерился, дальше он лезет в гет компонент и вызывает соответствующий метод, а потом передает туда самого себя. а то куда оно передает уже само решает че с этим делать.
про интересный ?. оператор можешь тут почитать https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and- чтобы не писать миллион нулл-чеков там где не нужно.
https://github.com/JetBrains/resharper-unity/wiki/Possible-unintended-bypass-of-lifetime-check-of-underlying-Unity-engine-object
Аккуратней с этими операторами, похоже они не всегда работают для проверки, не уничтожили ли объект.
В проекте есть 3 виртуальные кнопки, но нажать можно только одну, после нажатия они должны выключаться. Как это сделать, как после нажатия одной кнопки отключить все остальные?
В текущем виде код работает так: каждую кнопку можно нажать, но только один раз.
Да у меня проект в vuforia, гениальная игра которую жду уже много лет.
Спасибо, сейчас попробую.
Пик 1 - код.
Пик 2 - настроечка UnputField
Пик 3 - непосредственно как выглядит меню
Пик 4 - что выдает дебаг.лог, когда ввожу текст в InputField. Когда двигаю слайд (не влез в пост, но сделан по аналогии с InputField), то пишет 0 вне зависимости от местоположения слайдера (в настройках от 0 до 2, только целые числа).
Как я понимаю, код не работает и значение не передается, но почему?!?!?!?!
Опиши что оно должно делать.
Во втором пике ты вызываешь функцию, но передаешь пустую строку, поэтому в логе пусто. Я так понимаю, что тебе нужно вывести в лог текст с inputfield? Можно сделать в классе первого пика ссылку на него и при вызове onSubmitName выводить не строку из аргумента, а текст с инпутФилда. Аналогично и с слайдером.
Хм, насколько я помню, дефолтные слайдеры должны сами передавать значение слайдера в аргументе.
Во время игры я ввожу текст в инпутфилд, оно должно отправиться в код, а дебаглог должен написать введенное. Если в коде я добавлю Debug.Log ("меня звать" + Text); то он напишет меня звать и пустота.
Также и слайдер не передает значение при изменении, в дебаглог идет значение из аргумента (также с инпутфилд)
Ух, а в КНИЖЕЧКЕ ВСЕ РАБОТАЕТ.
Однако, в книжечке есть одно замечание.
>Функция OnSubmitName() присутствует как в верхнем списке Dynamic String, так и в нижнем Static Parameters. Но выбор варианта из нижнего списка дает возможность отправлять всего одну, заранее заданную строку. Нам же нужно, чтобы пересылалось любое введенное в поле значение, то есть динамическая строка, поэтому выберите функцию nSubmitName() из нижнего списка Dynamic String
Но вот где этот статик\динамик я так и не нашел.
да делегат ты не тот выбираешь. если выбираешь тот где в скобочках инпут какой-то то туда будет соватся то что ты в пустом поле напишешь. а если выберешь верху у которых сигнатура совпадает то уже то что в поле пишешь.
разница между красным и синим делегатом на картинке.
Возможно это он рофлит так, картинка не моя, но все равно забавно, я до такого даже и не додумался бы.
Флатинго бездарь с раздутым самомнением, потому не удивлюсь, если он всерьёз писал всё это вручную
Аутинго, ты?
Все расширения стоят. Unity ставил вместе с VS 2019.
Синтаксис Unity VS не видит, intellisense работать не хочет.
Недописал-
_inputField.onValueChanged.AddListener(OnInputFieldValueChanged);
в Awake() методе. Соответственно ниже пишешь свой
void OnInputFieldValueChanged(string value) { ... }
Короч нужно было выбрать VS 2019 в настройках unity и всё заработало.
>юзай райдер
дорого, а пиратить нет желания
Я вот хочу спросить в треде что-то, пока пишу и придумываю примеры для описания своего вопроса - решение находит само себя и я резко понимаю как что-то сделать, хотя до этого я несколько часов не мог понять как сделать то, что хочу. Неужто юнити тред творит чудеса с такими тупорезами как я?
Такое во всём проявляется.
юзабилити страдает. вон например у меня слот на ослике делегат теребит когда в слот поступает предмет и когда там больше нет предмета. лезть совать всё это через код - боль.
>>24174
https://ru.wikipedia.org/wiki/Метод_утёнка
шутки шутками а у меня на столе их две штуки плюс аниме-фигурки. после того как с ними посовещаюсь то сразу все проблемы решаются.
Чому версии меняются, а документация нет, я хуею просто с них.
https://docs.unity3d.com/Manual/UnityHotkeys.html
Там нет этих настроек от слова совсем
может лучше синглтон ебнеш тогда?
Подскажите как сделать чтобы kph и mph менять на кнопку можно было. Это RCC если что.
Покажи, как делается кнопка в UI. Я там кнопок вообще не видел. С чего ты взял, что так вобще можно?
Это рофел?
Gameobject > Ui > Button
Создай кнопку посмотри как она выглядит
Мне надо чтобы мили на км переключались 2мя кнопками
Это не рофел. Итак, ты знаешь, как создать кнопку. Теперь создай мне две кнопки и покажи, а то я не знаю. Создай буттон1 и буттон2. Жду.
Ну и оставайся без игор, чмоня.
но.... я не знаю что делать в стор. Так-то я программист (шейдеры не умею).
Какие там можно сделать скрипты чтобы их можно было продавать по 1-5$ хотя бы?
не просто насрать туда мусором который никому не нужен, а именно востребованные вещи
удачи пожелать могу только. сделай то что понимаешь лучше всего.
Ну головой подумай, что ли. Представь, что ты делаешь игру, и какой тебе требуется функционал, а потом смотри, представлен ли он в сторе. Там дохуя базового функционала не представлено, кстати. Как пример - нет удобного универсального анимированного спрайта, в который можно было бы без еботни просто закинуть картинок и задать скорость анимации, с возможностью свободной замены и добавления фреймов.
Вот этого юнитичую.
Хочу сделать модульную систему эффектов через ScriptableObject. Чтобы каждое действие игрока можно было описать набором эффектов (заплатить деньги, получить предмет, восстановить здоровье и т.д.).
Проблема в том, что я не могу одновременно задать набор эффектов и их параметры без создания 100500 ассетов с разными параметрами (восстановить 1 здоровье, 2 здоровья...).
В общем, есть Scriptable Object - действие, содержащий List, содержащий эффекты в виде базового класса. Есть эффекты-наследники с разными параметрами. Хочу возможность редактировать значения полей эффектов при создании ассета действия. Вроде бы это можно сделать с помощью кастомного инспектора, но не разобрался как.
>>23656
>>23665
Нашёл в чём дело.
Эта func(string s = null) идёт как делегат двух видов - func(string s) и просто func(). Во втором случае происходит такая ошибка. Лол. И даже если инициализируешь какую-нибудь string2 и присваиваешь ей значение s, то всё равно это говно не инициализируется. Решить-то банально - убрать "= null" и сделать второй метод без аргументов - но весёлая вещь.
>Неинициализированная переменная? Ну это если в плюсах, я хз возможно ли такое в шарпе.
Видать, возможно.
Отличий нет, потому что всё уже давно кем-то придумано и сделано. Делаю чисто то, что хочу, а не "АРЫГИНАЛЬНУЮ" игру, ежжи.
двач, че за нахуй, скачал я ваш этот юнити, а он ебет мне мозга с лицензиями, выбираю персональную, меньше 100 к$ дохода и ничего не происходит, выбираю, что не буду использовать в комерческих целях -то же самое, куда там что нажимать?
Аккаунт активирован?
Для начала, хочу сделать подобный курсор как в видео
https://www.youtube.com/watch?v=-Qcuc6sKjD4
Нагуглил только про VFX эффекты.
Что читать, что искать чтобы сделать такой курсор?
Вот есть у меня префаб пули, в который вшито много разных типов, которые в зависимости от стартовых параметров заменяются - внешний вид, траектория, скорость и т.д. Всё это вычисляется в Start(). Чтобы вычислялось правильно, соответственно, нужно передать в инстанс параметры до того, как выполнится Start(). Проблема в том, что Start(), похоже, выполняется внутри Instantiate().
Не, я, конечно, могу забить нахуй на предопределенные функции, вставить всё это в свой собственный инициализатор и просто не выполнять Update() по триггеру, пока инициализация не завершиться. Но это же типо неправильно, не unity-way будет? Не верю, что такой распространённый и востребованный сценарий не предусмотрен. Но я пока не нашёл способ воткнуться между Instantiate() и Start().
Охлол, поговорил с уточкой, называется.
Сам спросил, сам нашёл ответ через пять минут. Оказывается, надо было спаунить префаб в выключенном состоянии. Тогда можно спокойно передать параметры, потом сделать SetActive() и всё заработает как надо.
Не очень очевидно и нигде не упоминается, но ладно, проблема решена.
Ты какой-то тупенький. Ты спросил, как задать параметры до Start() - тебе ответили, как задать параметры до Start(). Если ты сам не знаешь, что тебе нужно - ты сам себе дебил.
С твоего "ДО" вообще проиграл.
Ну-ка покажи мне на примере, как ты задаёшь параметры инстансу через Awake() до того, как выполнится Start().
Предвижу виляния и маняврирования в стиле "я никому не обязан доказывать, что спизданул не хуйню"
void Awake()
{
this.parameter1 = "value1";
this.parameter2 = "value2";
}
Для примера написал два параметра. Можно больше, но основную мысль ты, надеюсь, уловил.
И я показал тебе на примере, как я задаю параметры инстансу через Awake() до того, как выполнится Start()
Ты какой-то рили тугой, лол.
Пока что ты только показал, как задаёшь параметрам константные значения(нахуя только непонятно).
А как передать через Awake() инстансу вычисленные в рантайме значения параметров от спаунера до выполнения Start() - не показал.
Впрочем, ты, похоже, просто дебил, так что можешь не отвечать. Всё равно похуй на тебя, правильный ответ я уже нашёл сам.
Глупенький, ну возьми вместо this.parameter1 = "value1" this.parameter1 = RuntimeCalculatedParametersFromSpawnerToExecution.GetValueOf("parameter1")
Ты все больше и больше под себя серешь, дурачок.
Ок, я понял уже, что ты просто потроллить от безделья пришёл(всё равно вряд ли бывают настолько тупые люди, даже в юнити-треде). Но что если бы вопрос задал зеленый новичок, не способный сам нагуглить ответ? Тебе не было бы стыдно?
Я абсолютно точно и исчерпывающе ответил тебе на все твои вопросы, глупыш. Ты просто сам не понимаешь, что тебе нужно и не способен ни в формулирование вопросов, ни в понимание ответов. Только рейджишь.
С таким интеллектом тебе никогда не сделать игру.
Или бывают всё-таки?
Пиздец.
Классный у вас спор, аж захотелось вкладку закрыть. Но похуй.
var g = Instantiate(prefab);
g.GetComponent<YourMom>().Init(10, 20);
Внутри компонента соответственно добавляешь метод Init(int, int).
Валяй, заодно расскажешь, чем именно плохо использование var.
Но помни, юный падаван. В пр, в шарпотреде уже 100500 раз срались на эту тему и слили с аргументами таких как ты противников нового.
Как лучше делать переходы игрока между сценами, если данные и скрипты не закреплены за самим игроком? Тупо поставить ему дефолтные точки для спавна и спавнить при переходе на них одного и того же игрока с прошлой сцены или же делать "отдельную копию" игрока на каждую сцену, удаляя при переходе предыдущего? Скрипты и прочая ебала висят на пустышке, которая переходит вместе с игроком и имеет синглтон, понятное дело.
>Скрипты и прочая ебала висят на пустышке, которая переходит вместе с игроком и имеет синглтон
Но зачем?
Все поведение должно работать внутри сцены only и не зависеть от того, откуда эта сцена была загружена. А то вдруг ты там скрипт ходьбы у игрока удаляешь.
Данные вроде количества хп можно сложить в scriptable/статический класс и пользоваться.
Благодарю. Думаю остановлюсь на втором варианте.
>>24642
Мне удобнее, когда у одной отдельной пустышки нужные мне скрипты для конкретных задач и заданная роль, которая уже как-то влияет на сцену. Типо как менеджеры игровые. Я не люблю вешать скрипты на объекты, которые непосредственно пляшут для игрока, ибо могу налажать и сделать то, что ты написал в спойлере и тогда я заебусь искать причины.
>Данные вроде количества хп можно сложить в scriptable/статический класс и пользоваться.
Я так и делаю, пирожочек.
вообще, я конечно пытался понять, но все-же попрошу нарисовать картинку того что ты пытаешься сделать. так как для меня это выглядит по прежнему как "мы создадим стопитцот ассетов", так как смысл хранения этого раздельно выглядит для меня загадочным. лучше приведи пример использования.
при помощи кастомного инспектора можно всякую хуйню сотворить весёлую. могу рассказать как, если вопрос будет более конкретный.
>>24482
лол а как? мне не удавалось сломать это так. я попробовал и не получилось. разве оно не должно тебе выплюнуть ошибку с нулл референсом?
>>24580
там в тамбнейле даже название этого упомянуто лол. иди в гугл и набери Tobii Eye Tracker
>>24587
https://docs.unity3d.com/Manual/ExecutionOrder.html
если отвечать на твой вопрос более развернуто то мне следует поинтересоваться зачем ты вообще пользуешься геймобжектами для пули. такая хуйня вообще не должна существовать в виде геймобжектов.
1680x1050, 0:11
нахождение ближайшей точки на усеченном конусе конвексной фигуры с отступом конечно-же! конвексная фигура репрезентует группу агентов. чтобы агенты могли избегать сразу целые группы агентов. в целом работает, но так себе.
Дай угадаю, это коллайдер, описывающий вокруг всех капсульных противников и 3 синих (похоже на проекцию ближних к игроку). Черные грани - фронтальные к игроку, жёлтые - боковые и видимые, красные - задние, а зелёные - грань противников. И дохера нормалей для черных и жёлтых граней.
>>24518
>лол а как? мне не удавалось сломать это так. я попробовал и не получилось. разве оно не должно тебе выплюнуть ошибку с нулл референсом?
Хз, у меня старая версия юньки? Ещё на 32битке сижу.
Два делегата - func() и func(string s). Есть метод func(string s = null) s = "" даёт такой же результат, я его сохраняю как func(), а потом обращаюсь к переменной s. Нулл референс выдаёт в рантайме.
Энивей, раз уж решил эту (и многие другие) проблемы, то пора бы задуматься о сейвлоаде. Я не хочу ебаться с сериализацией и сохранения состояния игры, вместо этого хочу ебаться с превращением карты в набор команд для спавна объектов. Я использую муншарп для дохуя всего собственно поэтому и делегаты, но его скрипты это набор таблиц же, переменные, функции, все дела, если сохранять, то придётся в файл сохранения класть эти таблицы - а хотелось бы подгружать скрипты из файла карты, а не хранить в сейве.
Кто-нибудь может посоветовать материалов по теме? Я полный нуб в этих ваших хэшах.
1680x966, 0:12
>>24743
в целом то правильно проанализировал, да. разве что нормали почему-то тянутся к точкам к расположеным в гриде.
ещё мог сделать некоторые догадки касающиеся того что на поверхности нарисованы какие-то линии, не все капсулы имеют под собой круг и они соеденены какой-то мистической красной линией в цепочку и что радиус кружочка имеет в два раза больший радиус агента.
черные линии это траектория, красные линии это цепочка следования (агенты следуют за агентом перед ним), агенты имеют радиус в два раза больший чтобы избегать друг друга на расстоянии двух радиусов, а агенты без кругов просто находятся внутри и не нужны для избегания группы.
>>24745
это нужно для много чего. в частности для ситуаций когда огромные толпы агентов пытаются обойти друг друга. этакий способ решить проблему увеличением масштабов.
хотя для РТС годится в меньшей степени на самом деле, там есть решения и попроще и дающие лучше результат.
>>24746
вот тут действительно только удачи пожелать можно. у меня никаких советов, я такой хуйней не маялся.
на мой вкус оверхед от вызова делегатов крупноват чтобы настолько активно их использовать.
Спасибо, Капитан Очевидность!
Однако, если бы ты удосужился прочитать изначальный пост, ты бы увидел, что вопрос был как раз про то, как сделать иначе, используя встроенные методы(ибо какой иначе в них смысл?)
Я просто привык, что в нормальных движках ты можешь создать объект, отредактировать его как тебе нужно, а потом уже вставить его в сцену, и только тогда уже заведутся управляющие методы. Однако, в юньке, похоже, невозможно создать объект вне сцены. Большой минус.
>>24668
>ExecutionOrder.html
Будто я не прочитал это первым делом.
>если отвечать на твой вопрос более развернуто то мне следует поинтересоваться зачем ты вообще пользуешься геймобжектами для пули. такая хуйня вообще не должна существовать в виде геймобжектов.
Вообще это был рандомно придуманный пример, но с этого момента подробнее - а в каком виде, простите, должна существовать такая хуйня, если меня движок насильно заставляет пользоваться геймобжектами, и вне геймобжектов банально вообще ничего существовать не может - ни код, ни графика, ни физика, нихуя?
никто тебя не заставляет пользоваться геймобжектами, можешь использовать юнити исключительно чтобы хуйню рендерить напрямую ебоша в буффер. как например все вот эти картинки-видео с линиями и прочим говном выше. не думаешь же ты что это лайн рендеррер? несколько тредов назад я даже простенький пример делал через простенький менеджер и GL. >>562463
с новыми игрушками юнити даже не обязательно геймобжект в сцене иметь
да и лол юнити теперь даже несколько решений физона предлагает.
Угу, я читаю уже про кастомный рендер. С одной стороны хорошо, конечно, что можно всё выкинуть и использовать движок только для создания окна приложения. Но с другой стороны, я для этого лучше более привычной и функциональной SDL2 воспользуюсь.
да помимо окна там конечно ещё куча инструментов. оно тебе и билдит все быстренько в окне редактора и библиотеку для расширения функционала имеет и ресурсы тебе сериализует и подготавливает к использованию и так далее.
рендерит то, сё, так, сяк, вон эти новомодные ECS тоже упрощают рендер всего этого без геймобжектов. оно там тоже всё в буффер ебошит щелчком пальцев. когда сделают аниматор для него наконец-то ваще заебись станет.
А не будешь добреньким, не расскажешь, как использовать компоненты движка без геймобжектов?
Например, физические объекты - если я хочу только коллизии использовать и считать для массива своих объектов, разве оно не потребует, чтобы они обязательно на базе геймобъекта были?
это уже зависит от того что тебе надо. так то тебе никто не мешает спиздить библиотеку физона, или написать свою узкоспециализированную. для того что тебе хочется наверно надо посоветовать потыкать https://docs.unity3d.com/Packages/com.unity.physics@0.0/manual/index.html может понравится. сыровато, но вроде работает. для мелочей наверно хватит.
ещё хавок https://docs.unity3d.com/Packages/com.havok.physics@0.1/manual/index.html можешь взять, может больше понравитсяю
Я вообще спрашивал про встроенные RigidBody, но, как я понял, они прибиты гвоздями к геймобжекту.
Короче, всё встроенное говно выкидывать нужно.
лол ну вон те библиотеки предлагают тебе замену ему. компоненты то разумеется являются компонентами геймобжектов.
проще уже спросить чё ты там делаешь такое.
Пока ничего особенного не делаю, с движком знакомлюсь.
Но мне не нравится навязанная архитектура, когда за пределы геймобжектов и компонентов даже плюнуть нельзя. Хочу более привычную и эффективную архитектуру с обычным циклом, где бы я сам решал, что мне обрабатывать, а что нет. Но я пока не понял, как это по-нормальному сделать, а не костылями к существующей системе.
Цикл рендера тоже свой хочу, где бы можно было самостоятельно определять последовательность рендеринга объектов.
лол ну не хочешь чтобы юнити было фреймворком - не пользуйся им как фреймворком. вся хуйня с геймобжектами в данный момент представляет микроскоп которым можно забивать гвозди любых размеров, если тебе нужен какой-то более специфичный инструмент длязабивания гвоздей то бери его, этот просто наиболее универсальный и к нему больше всего документации. а эффективность один хуй нужна только для чего-то специфичного, с чего лучше не начинать.
>Цикл рендера тоже свой хочу, где бы можно было самостоятельно определять последовательность рендеринга объектов.
лол как и везде - цыферкой https://docs.unity3d.com/Manual/SL-SubShaderTags.html или именованной константой. поизучай рунные слова шейдоров если так хочется повелевать ими. для 2д попроще.
Да мне на самом деле от юнити нужна только одна вещь - экспорт на консоли. Так как после виндового релиза задумался о портировании на консоли. А игра у меня на своём движке, на базе Allegro, и там либо самому портировать под каждое SDK, либо переписать на сторонний движок. Ещё вариант есть переписать на SDL2. Короче, я прикинул все трудозатраты, и решил, что сделать порт на другой движок будет проще, так как логики немного в общем. Сначала ткнулся в УЕ4, но там почему-то похерили няшную архитектуру УДК и форсят какое-то говнище с блюпринтами. Поняв, что с блюпринтами я буду годы возюкать, а выкорчевывание их из кода займёт больше, чем написание трёх игр, я послал уеч нахуй. В итоге копаюсь в Юнити. Громоздко и неудобно, и архитектуру навязывают ебанутую, но в целом вроде жить можно.
Я думал просто его выключать или менять длину трейла, но тогда пропадает "хвостик", а я хотел бы, чтобы хвостик оставался еще некоторое время и не исчезал сразу.
Может быть вообще не стоит делать это треил рендером?
>Спасибо, Капитан Очевидность!
Ух, сколько высокомерия и пассивной агрессии.
>в нормальных движках ты можешь создать объект, отредактировать его как тебе нужно
Присвоив при создании public переменные или дернув метод для инициализации. Что тебе еще нужно-то?
Ну и да, как обычно. Не нравится - не пользуйся, вокруг полно "нормальных движков".
>игра у меня на своём движке
>пришел в юнити-тред и начал доказывать, что юнити говно
ha-ha, classique
Сам себе отвечу. Нашел такой ассет с нормальным треил рендерером
https://assetstore.unity.com/packages/tools/particles-effects/ara-trails-102638
Жаль что я туплю и не могу понять, как сделать прозрачные участки треилрендера, не меняя целиком весь цвет линии.
Столкнулся с такой проблемой. Пишу мультиплеерную игорю с использования ассета Photon PUN. Собсна, проблема в следующем:
У меня есть 2 игрока(хост и подключенный клиент) а так же триггер-коллайдер с определенным кодом, который взаимодействует с игроком. Каждый раз, когда я захожу ке-то кроме хоста в этот коллайдер, код срабатывает только на хосте. Как это можно исправить?
Пробовал уже и IsMine, и искать игрока по ID, и использовать PhotonRPC но ничего из этого не помогло.
а все, разобрался. меш-коллайдер надо экпосртировать с такими же координатами.
Вообще, комната имеет мало вершин, 100, для нее наверное не нужно делать отдельный меш коллайдер, а использовать эту же сетку объекта
Это грустно.
В 20 году много всяких ништяков выйдет из превью, и естественно они не будут поддерживаться в 18 версии.
Регулярно обновляюсь на самую последнюю версию, никаких катастрофических проблем не встречал.
Понято.
Обесни ещё один момент. Я тут пару месяцев назад орал и истерил по поводу лайтвайт рендер паплайна, категорически рекомендованного анонимусом. Мне там давали советы, но я всё забыл. Есть ли исчерпывающий гайд по переводу материалов из одного типа рендера в другой.
Вот я сегодня сделал новый проект на ЛВРП, потом через ассетстор загрузил ассет персонажа. Юнити мне написала, что нужны дополнительные зависимости, я согласился. Она скачала чего-то там и паплайн сбросился на дефолтный. Вся демосцена, которая шла в шаблоне проекта стала пурпурного цвета.
Мне бы кто-нибудь один раз бы объяснил на пальцах. И я бы понел.
Смотря какая игра
Я теперь хочу сделать как в аутласте: чтобы можно было медленно и не до конца открывать дверь, и с этой же позиции закрыть.
Я хочу сделать такое - если чел жмет на мышь и сразу отпускает, то полностью срабатывает анимация открывания/закрывания. Если чел удерживает мышь - то анимация также запускается, но с более медленной скоростью. Но если чел отпустит мышь, открыв дверь только на 50 градусов, а потом захочет закрыть, то анимация закрывания начнется, установив rotation.y в 90. А мне нужно, чтобы анимация закрывания началась с той позиции y, на которым сейчас дверь.
Такое ведь нельзя сделать с помощью анимации? Ведь анимация строго принимает значения x y или z, которые надо трансформировать. И если анимация закрывания начинается с rotation.y = 90, то при запуске анимации y двери сбросится на 90.
Слишком сложная хрень для простого открывания/закрывания двери. Тут блендить ничего не надо, достачно взять анимацию открывания, а чтобы закрыть, установить speed в -1
Впервые с этой штукой столкнулся, не знаю, правильно ли сделал? Если х = 0, то дверь закрыта, 1 - открыта
>Всё так, еще можешь в бленд три указать чтобы х не только от 0 до 1 было, а от 0 до 90, и указывай себе нужный угол.
Это получается, что анимация полностью управляется на этой переменной x? Скажем, я открыл дверь на 20 градусов, можно ли запустить анимацию, типо как-то play(), и чтобы анимация продолжилась с 20 градусов до 90, без моей передачи x?
>Скажем, я открыл дверь на 20 градусов, можно ли запустить анимацию, типо как-то play(), и чтобы анимация продолжилась с 20 градусов до 90, без моей передачи x?
Нет, тебе нужно ручками менять x с 20 на 90 для этого.
в контексте
Все юнитигоспода срут в треде годота или же срутся с гондотями в срачетреде. Игори делать нет времени.
Как же бесит.
Ну я конечно понимаю что мамкиным 12-летним кулцхакерам мамка интернет напрямую подключила.
Я понимаю что в силиконовой долине там все миллионеры и у каждого из 10500 сотрудников блядь свой модем со своим тарифом с выделенным айпи для него
Но что мне-то делать? я даже ассеты скачать не могу.
Поставь роутер с поддержкой прокси, работай через него.
Поставь программный прокси-сервер на винде.
Поставь виртуалку, в ней установи венду. Снаружи виртуалку настрой на прокси. Внутри винда будет в привычном режиме получать локалку со шлюзом. Кстати, многие рекомендуют девелопить в виртуалке, чтобы была возможность быстро откатывать нежелательные изменения.
Кстати! Если у тебя на работе запрещено настраивать комп, ты можешь таскать виртуалку на флешке с собой. В ней будет и винда и юнити.
> девелопить в вируталке
Каким образом? Для полноценного использования видеокарты и все ее расширений и аккуратного фрейм дебаггера тебе нужен полный доступ к видяхе. Это значит тебе нужна виртуальная машина с PCI pass-through. Много ты знаешь виртаулок с этой функцией? Те, что есть, требуют линкса в хосты.
Помимо этого тебе нужно будет иметь 2 видяхи, ибо одну ты не поделишь.
Поддвачну.
> Каким образом?
Скоро мне придёт нвме-диск и тогда буду всем показывать, каким образом это делается. Можете скринить.
Сейчас с медленного харда и без виртуалки девелопинг мучителен.
Тут дайверы только остались.
не. это проблема hub которую разрабы не особо хотят фиксить
https://forum.unity.com/threads/request-proxy-settings-for-unity-hub.515447/
хотя вот тут:
https://docs.unity3d.com/Manual/upm-network.html
Что-то нашел, но не заработало
Нужно сохранить игру при нажатии на кнопку.
ООП: ПАТТЕРН КОМАНДА ИНТЕРФЕЙСЫ НАПИШИ ЕЩЕ СОТНЮ-ДРУГУЮ СТРОК КОДА
ЕЦС: создал ентити в KeyboardInputSystem, добавил пустой компонент SaveGameRequestComponent, 3 строчки кода. Итерируешь массив энтитей с этим компонентом в SaveGameSystem, сохраняешь данные, удаляешь ентити с реквестом. Еще 3 строчки кода.
Забыл еще одну строчку для объявления компонента учесть. Хотя с другой стороны в SaveGameSystem работа с реквестом занимает не 3, а 2 строчки кода, поэтому суммарно все еще 6 строк.
я не умею
а ecs тут при чем?
ООП нынче не умеет хранить массив объектов?
Сериализация нынче не в моде
Или только в ecs можно прогать POD типы?
Ох уж эти больные ecs-фанатики
Я понял, кого ты мне напоминаешь!
>я тут вкусный стейк пожарил и сожрал, збс было. Рекомендую всем!
>ТИ ЧТО НЕ МОЖЕШЬ ПРИГОТОВИТЬ СТЕЙК ИЗ МОРКОВКИ??? ЕТО ТАК ЖИ ВКУСНО!!!!!!
>МРАЗЬ УБИЙЦА ТРУПОЕД!!! ДИДЫ КОРЕШКИ ЖРАЛИ!!!
>ТЫ МОЖЕШЬ ПОЛУЧИТЬ ТЕ ЖЕ БЕЛКИ ИЗ ВАРЕНЫХ КАБАЧКОВ!!!!
лол ему сказали "ниче нового, все и так можно было если руки не из жопы" а он стал инфантильную хуйню нести.
ECS конечно здорово, но не по этим причинам.
А ты напоминаешь веганов:
>>сожрал морковку вместо стейка - вкусно, животные живы, всем рекомендую, а кто ест стейки тот урод и убийца
>кто ест стейки
И в каком месте я это написал? Я ничего против ООП не имею, но ECS - заебись. Именно как инструмент для создания игр.
>>26885
Конечно можно, наплодив перед этим абстракций и написав пару сотен строк кода чисто в служебных целях, пока в ецс достаточно 6 строк, и при этом еще и выигрыш в производительности есть.
Неужто все на Гандонт прешли?
private int zolupa;
public int Zolupa { get; set; }
вместо простого и понятного
public int zolupa;
Почитал всякого в гугле принцип вроде понял, а вот нахуй он нужен не понял.
спасибо пожалуйста нибейте за незнание ёбаный насрал
Предположим у тебя два программиста и оба они дебилы.
Первый программист написал класс с public int zolupa, в котором хранится внутреннее состояние, и если его менять снаружи, то все ломается нахуй.
Второй программист его регулярно меняет из своего кода, потому что дебил.
Чтобы этого не было, можно сделать public int Zolupa { get; private set; }, и у второго дебила будет ошибка на этапе компиляции, если он будет делать хуйню.
Но это же пиздец!
Неужели нельзя просто на канве нарисовать функциями вроде line(point1, point2, color), как это делалось во времена дидов?
Перекот если что...
Ты можешь взять одну плоскость, добавить ей текстуру шахматной доски и указать origin и шаг сетки.
Руснявые долбоебы гениальные погромисты никак не поймут, что ЕКС - это именно что правильно, по канонам приготовленное ООП, с проанализированной и правильно выстроенной моделью предметной области.
ЕКС это всего лишь очередная хуита для байтоебов и больных фанатиков.
При этом сильно откатывающая программирование до 80-90 годов, когда ради одного байта или такта писали такое говно на макросах, хаках и асм-вставках что до сих пор страшно
https://blogs.unity3d.com/2015/12/23/1k-update-calls/
отсюда вопрос - если иметь один апдейт на всю игру и все остальное вызывать в нем через евент будет типа быстрее?
в юнити в те времена было модно коротинами обмазываться
Да будет быстрее, но не сильно. Более важно что ты сможешь регулировать порядок апдейтов на своих классах.
Script Execution Order говорят тоже регулирует апдейты
но вопрос в другом - где нужно такое адское микро?
не лучше ли архитектуру намутить где порядок апдейтов не важен
Подскажите начинку для .gitignore, пожалуйста.
Стандартный, который предлагает github выполняет свои задачи?
Мой опыт: не делай уберигнор - в итоге один хуй 50% не понадобится. Обновляй по нужде.
Какая связь с байтоебами и ассемблером?
Я о том, что задротики обычно понаделают классов а-ля PoisonedZombie, ElectricBat, RifleHunter и т.д., а потом удивляются, что у них нельзя построить электрического ядовитого летающего зомби с ружьем, т.е. приходится добавлять новые классы на каждый чих. И называют свою анскилльность в построении моделей предметной области "ООП говно ря, юзаем ЭКС почаны!11". Хотя ЕКС полностью укладывается в парадигму ООП.
>Хотя ЕКС полностью укладывается в парадигму ООП.
Более того, ECS это вообще воплощение одного из популярных принципов ООП - composition over inheritance.
Так и есть. Но, видимо, хипстерам на лекциях по gender studies in CS об этом не рассказывали.
Это копия, сохраненная 7 марта 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.