Это копия, сохраненная 10 декабря 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: >>728504 (OP)
Официальный сайт: https://unity3d.com/ru
Документация: https://docs.unity3d.com/ru/current/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com/
Магазин ассетов: https://unity3d.com/ru/asset-store
UnityWiki: http://wiki.unity3d.com/index.php/Main_Page
На Unity сделано много замечательных игр - Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
FAQ
- Какие у Unity сильные стороны?
- Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
- Какие у Unity слабые стороны?
- Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
- На каких языках я могу писать скрипты для Unity?
- На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.
- Для каких жанров подходит Unity?
- Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.
- На каких платформах работают созданные с помощью Unity игры?
- Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
- Часто вижу скриншоты с красивой природой на Unity. Как такое создать?
- Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
- Что такое стартер киты?
- Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.
- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки?
- Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
- Бесплатен ли Unity?
- Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
Обучение
- Язык
Итак, с чего же начать изучение этого замечательного движка? Прежде всего, с изучения языка. Самые основы C# можно узнать на интерактивных курсах здесь:
https://dotnetcademy.net/CSharp/Beginner
или в текстовом туториале здесь:
https://www.tutorialspoint.com/csharp/csharp_quick_guide.htm
Для изучения основ UnityScript выучи вначале основы JavaScript:
https://learn.javascript.ru/
Помни, что далеко не все элементы JS есть в US. Чтобы понять, в чём разница между этими двумя языками, прочти эту статью:
http://wiki.unity3d.com/index.php/UnityScript_versus_JavaScript
Помни, что тебе достаточно одного языка из двух и учить их оба одновременно не нужно.
- Движок
Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка.
http://www.ozon.ru/context/detail/id/34792570/
Также посмотри на видеотуториалы с официального сайта:
https://unity3d.com/learn/tutorials
Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь:
http://catlikecoding.com/unity/tutorials/
Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху:
https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started
Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов:
https://noobtuts.com/unity
В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Шапка: http://www.writeurl.com/publish/zukmrogwv45ptyuseyol
И сразу после перекота вопрос. В движкосраче-треде увидел две этих ссылки про DOTS https://youtu.be/0VQyWo-gb2c , https://youtu.be/D1KShj8ZV_I насколько они релевантны? Меня пытаются наебать?
Если же нет, то почему оно не получает распространения.
>то почему оно не получает распространения
Они переносят ВЕСЬ движок на ECS. Все системы. Поэтому DOTS находится в превью.
https://docs.unity3d.com/Packages/com.unity.entities@0.17/manual/index.html
Но уже сейчас, можно делать на нем что-то серьезное? Раз такой тренд у юнити, то чем раньше, тем лучше же.
Знаешь, зависит от того, даст ли ECS профит твоей игре. Сейчас использовать ECS ради ECS нет смысла. Только когда они доведут его до ума, настроят редактор максимально под ECS, вот тогда да.
Лично я в следующем проекте буду использовать ECS, потому что у меня будет много сущностей с разными способностями и разные режимы игры.
Просто я только вкатываюсь и мне довольно сложно грамотно делать архитектуру в ООП, код превращается в пиздец очень быстро.
Это же выглядит как решение да и мне будет проще, наверное без сильного бэкграунда перейти на другой подход.
>я только вкатываюсь
Тогда я тебе совершенно точно не советую сейчас связываться в ECS. Юнити работает на компонентах. Старайся разбивать свои сущности на компоненты. Не используй наследование. Чем меньше работы выполняет компонент, тем лучше. Ещё почитай про ScriptableObject, которые используют для хранения данных.
Ну как, вкатываюсь. У меня есть профильная вышка по пограмированию, ноль коммерческого опыта и знание юнити по нескольким слитым курсам. Я могу понять от чего бегу. Хотелось бы ультимативное решение для архитектуры.
В тех видео выше, поставь Субтитры - английский, появится в окне настройки субтитров, где ты ставил язык, кнопка "перевести" - поставь русский. Тема специфичная, почти вся информация на ангелском по ECS.
>Поясните для тупого что это такое и для чего нужно?
Это старое решение для написания игровой архитектуры. Очень хорошее, как по мне.
https://www.youtube.com/watch?v=W3aieHjyNvw
>>44259
В любом случае пока не связывайся с ECS. Потому что 99% пользовательского опыта разработчиков основано на стандартной системе компонентов.
>пока не связывайся с ECS
Я пока только изучаю движок, так-что первые мои мобильные говноигры точно будут на стандартной системе.
Просто выглядит очень интересно и я попробую потыкать, часик в день как для общего развития. Использовать превью пакеты в любом случае, как то стремно.
> объективно лучший игровой движок
Жир начал сочиться из системного блока рано утром. Солнце только показалось из-за горизонта, запели первые утренние пташки, а под компом уже была порядочная жирная лужа. Я не понимал в чём причина этого явления и просто протёр лужу. Когда я включил компьютер, жир начал вытекать уже и из монитора тонкой но непрерывной струёй. Я терпел, я думал это пройдёт. Но всё же была непонятна причина столь активного жироотделения. Когда я зашёл на двач, жир потёк таким потоком что нужно было подставлять тазик под монитор и системник и выносить их каждые 20 минут. Потом я открыл этот тред... Это было нечто невообразимое, это был уже не поток, это было какое-то цунами жира! Он хлынул из компа, ничто уже не могло его остановить! Поток жира нёсся, снося всё на своём пути. Не знаю каким чудом мне удалось уцелеть, ибо от моего дома остались одни руины, двор сейчас похож на пустыню с барханами из жира. Погибли люди, некоторые лишились крыши над головой. Оп, что же ты наделал?
>На Unity сделано много замечательных игр - Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие
Какую-то хуйню назвали, а Boneworks, Valheim Genshin Impact, Albion Online, Endless Space, Beat Saber, Subnautica не написали
1920x1080, 0:46
Забыл упомянуть - танк двигается через присваивание скорости (velocity) rigidbody.
>>44289 (Del)
Чмоньки, вы постоянно визжите когда в ваш тред приходят с жалобами, так какого хуя вы суда поналетели-то?
>столкновении с препятствием танк начинает вращаться в воздухе
В компоненте rigidbody танка есть Constaints, там поставь галку на запрет вращения (rotate по какой-то из осей), ну и с другими опциями поиграйся, это rigidbody дает такой эффект (или погугли видосы - я просто давно не работаю с 2д, так сразу не вспомню, то точно такое делал)
Клон танчиков с приставки делаешь? И анон выше тебе верно подсказал, в rigidbody запрети ротацию по осям
мимо буквально пару дней назад сдал проект пикрил
Кто «вы-то»?! К кому ты обращаешься? Я один здесь, нахуй! Кто «чмоньки»-то, блядь? Я уже не человек, блядь, я зверь нахуй!
Сап юнитач, хочу вкатится в мульти ёрли аксес в стим, и по немногу рубить бакинские с косметики и простого доната.
Посмотрел пару технологий через что реализуется мультик.
Кто через что реализует? Надо ли арендовать сервак где-то за границей? Так как это выживач по типу дэйЗ, и подобных то думаю нужны сервера, нельзя же доверить вычисления на стороне клиентов.
Также смотрел в сторону из совсех новых это MLAPI, но он только вышел и еще будет хз сколько дорабатываться.
В общем копаясь чуть глубже базы, возникает куча вопрос уже на этапе планирования, реквестирую советов.
>Кто через что реализует?
Каждые по своему.
>Надо ли арендовать сервак где-то за границей?
Да, по-хорошему. Иначе представь пинг у американцев, которые будут вынуждены играть на российском сервере.
Из готовых серверных решений есть:
- Photon Server: чистый серверный код без какой-либо игровой логики
https://www.photonengine.com/en-US/Server
- Photon Bolt: реализует основные сетевые фишки игр, но не знаю, подойдёт ли он для массового пультиплеера
https://www.photonengine.com/en-US/BOLT
Далее, где нам собственно запускать сервера. Либо ты будешь сам ебаться с хостингами, что очень утомительно и для этого обычно нанимают отдельных людей. Либо используешь готовые сервисы. Допустим PlayFab: https://playfab.com/multiplayer/
В смысле как? У тебя объект, над которым ты хочешь совершить действие, имеет значение null, то есть там ничего нет. Соответственно где-то проеб с инициализацией (в инспекторе забыл перетащить например, или Find не сработал)
В коде, например, четко не разделяется падение и прыжок, а анимации разные. Или например. idle и movement. Нужно просто ифы ставить или как люди перехватывают смену состояний?
И да, вы вообще используете Character Controller в своих проектах? Это оправданно?
Просто сейчас получается свалка, в которой я потом ничего не могу найти (вот почему юнитеки не могли добавить не только ввод названия проекта но и его описание? Всего одну строчку текста блин к проекту в юнитихабе)
Для тебя, и тех кто использует вообще всё просто, делаешь нужную механику/объекты/сцены, потом просто это в бандл экспортируешь, он автоматом подтягивает все нужные ресурсы для работы.
Остаётся в конце просто переименовать ассет чтобы было понятно что это, или иметь текстовик с кратким описанием каждого твоего ассета по названием файлов, тут как говорится воля фантазии.
Ты можешь экспортировать файлы из проекта в .unitypackage (всё, что ты качаешь с ассет стора - в точно таких же бандлах лежит). Назвать как тебе удобное и хранить на пк.
Это более простым языком то, о чём анон выше написал
Настройки проекта можно вот так редактировать:
compName = EditorGUILayout.TextField("Company Name:", compName);
UnityEditor.PlayerSettings.companyName = "someBS";
Наверняка рендерпайплайн можно как-то так редактировать.
А для NPC например? (логично, что так же подходит)
Я просто думаю что не слишком ли он перегружен, мб лучше реализовать свой контроллер через rigidbody
Для нпс у тебя Аи_клиент уже встроенный, там вообще ничего делать тебе не надо.
В юнити если посмотреть всё можно делать самому через свои более простые(как кажется на первый взгляд) велосипеды.
Пробуй сделать сам, вдруг и взаправду для твоих целей подойдёт лучше чем ванила от юньки, но я конечно очень сильно сомневаюсь.
Вот я и хочу узнать как. Дело в том, что рендер пайплайн - это не настройка проекта, он в иерархии лежит и их можно насоздавать сколь угодно
Хах!
Я вообще хз что такое renderpipeline, но это не оно?
>Unity’s Scriptable Render Pipeline (SRP) is a feature that allows you to control rendering
via C# scripts
.
https://docs.unity3d.com/Manual/ScriptableRenderPipeline.html
В смысле "хз"? Вы что, не пользуетесь URP?
Да, это то, ну а как редактировать его параметры через код то? Там всё о том, как самому наскриптить рендер пайплайн, а мне в рантайме надо его редактировать. Проблема то в том, что этот пайплайн не висит на каком-то объекте, чтобы я мог обратиться к нему с помощью геткомпонент
Ну есть несколько вариантов. Самый правильный это сделать несколько пайплайнов с нужными тебе настройками и менять их в процессе игры когда тебе надо - https://docs.unity3d.com/Manual/srp-setting-render-pipeline-asset.html
Но если у тебя там динамическая смена микронастроек каждую минуту, то создавать 100500 пайплайнов явно неудобно будет, не уверен сработает ли это и потестить не могу, но можешь попробовать так:
Закидываешь свой пайплайн в Resources, через код загружаешь его "as RenderPipelineAsset" и редактируешь. Вполне возможно, что после этого нужно будет сразу его заново назначить в настройках, но если и без этого будет работать - то не нужно.
Не уверен, что второй способ в принципе сработает, но попробовать можешь
AllowMultituch в настройках камеры или проекта (player-android) а также изпользование OnPress() ?
>AllowMultituch в настройках камеры или проекта (player-android)
Что-то не могу найти такое
>также изпользование OnPress()
Но тогда же будет обрабатываться не нажатие а удержание кнопки? Или как это работает?
Никогда не делал, но попробуй поиграться с массой, поменять центр массы например.
Спасибо.
Звиздец, 2021 год уже подходит к середине, полтора года уже прошло, как был задан вопрос на форуме юнити, а чтобы менять элементарные параметры графики в УНИВЕРСАЛЬНОМ рендер пайплайне (который юнити преподносят как неизбежное и верное решение в будущем) всё ещё надо накатывать сторонние хаки от левых чуваков.....................
Я обычно загоняю такое в ScriptableObject, но это надо чтобы окошко его создавало когда его нет, чтобы оно его искало, если потеряло. Поэтому хотелось бы узнать об альтернативах.
И ещё SessionState, если нужно хранить данные в рамках одной сессии
https://docs.unity3d.com/ScriptReference/SessionState.html
Я знаю. Оба какое-то говно в целом. Хранить что-то в регистре это самое ебанутое что может предложить юнити, а в скриптабл обжектах я и так уже храню. Но там "поищи папку с проектом костыля, поищи папку в папке, поищи в папке в папке этот файл, если не нашел то поищи по типу, если не нашел вообще ничего то создай", а потом переименуешь название папки костыля и вспоминаешь где там указать переименованную папку. Не-у-доб-но.
О! Надо будет попробовать просто хранить настройки в мета-файле самого скрипта который вызывает окошко! Есть же https://docs.unity3d.com/ScriptReference/AssetImporter-userData.html
Храню весь стафф по размеру окон, игровым данным, настройкам в бинарнике.
Плюсы? Всё просто и в одном месте
Минусы? Для себя не нашёл.
Советую.
Я хранил, но когда проект состоит из связки костылей которые кочуют из проекта в проект и иногда надо папку переименовать чтобы красиво было, иногда ещё какую-то хуйню сделать это становится неудобно.
Приходится дробить файлы настроек, делать какую-то хуйню для поиска потерявшихся.
Вообще да, у юнити же EditorWindow наследуется от ScriptableObject. Можно же получить моноскрипт через MonoScript.FromScriptableObject(this), получить путь к моноскрипту через AssetDatabase.GetAssetPath(obj) и наконец получить AssetImporter через AssetImporter.GetAtPath(path); а дальше творить всякую хуйню через этот импортер через его userData и не забывать сохранять его. Конечно там хранится простой стринг, ну да и хуй с этим. Для хранения настроек окна вызываемого этим скриптом наверно покатит.
Похраню пока там всякую маловажную хуйню и если чето наебнется то приду ныть в тред.
>Скрин ошибки?
Да там нет ошибки как таковой. В меню тупо нет нужного пункта. При том, что он должен быть.
> Посоны, посмотрел видос этого вашего сакутина. В чем проблема использовать имя объекта, а не тег? Почему на пике лучше?
Чисто с точки зрения производительности, в данном случае проверка тэга может быть быстрее. Поскольку ты не пытаешься конвертировать весь объект в объект Player, а просто сравниваешь строчку тэга.
Тут хз, хз. Как написал выше, использую бинарники уже пару лет, до этого юзал хмл, но не зашло. С натяжкой могу разве что сказать получаются большие структуры, и под определённые игры может быть это будет не ок.
Насчёт гайда не знаю, маловероятно что рабочий в шаре есть.
Есть куча говно видосов, их брать за основу нету смысла, но для инфы посмотреть стоит.
Я делал двумя способами, оба рабочие, но со своими тонкостями.
Первый это реализация в юнити костями и скриптом.
Второй в блендере запекал несколько вариаций покачивания и уже в юньке на её костях дополнял ими.
Варианты не идеальные, и со своими минусами, но для тянучки подходят хорошо, и смотрятся не сильно всрато.
я тоже использовал но само наличие внешнего файла это геморой.
вообще вот да, использовать юзердату пока заебись для хранения настроек окна. особенно учитывая то как у юнити удобно встроен json.
>>45100
там где хочется иметь доступ к этому полю через тип, а не лезть через инстанс и там где он нужен только в одном экземпляре.
на самом деле кучу говна можно по умолчанию делать статичным. единственный реальный минус статичных классов в юнити это пожалуй то что хер его знает когда они там инициализируются и лучше это делать вручную.
Почему не меняется модель для объекта?
>У тебя не установлены Windows\Mac build support
Спасибо, блять! А то я не заметил! Это говно отказывается ставится, что мне с этим делать?
У всех ставиться, у тебя нет. Совсем хлебушек? Удали подчистую тогда и поставь заново, не забывая указать при установке галочки каких пакетов тебе нужно.
Нахуй ты вообще только линукс при установки выбирал?
>я тоже использовал но само наличие внешнего файла это геморой.
Погоди, а как ты собирался хранить инфу об прогрессе и игре не во внешних файлах? Реестр? Наркоман чтоли?
каком прогрессе? какой игре? ты сообщения не читаешь чтоли?
>Кто как сохраняет настройки для своих костылей?
Ну это не отменяет факта, ведь настроек может быть много, и они разные, считай тот же сэйв файл.
Или о чём мы?
Сейчас попробовал поставить Application.targetFrameRate = 300; теперь на обоих телефонах 60 фпса. Вот какого хуя? Что это было?
Мы о настройках окна для редактирования каких-то ресурсов лол. Написал же. Вот есть окошко. Хопа скрипт этого окошка, или папка этого окошка гуляют по проекту. Как хранить настройки окошка? Создавать файл? Надо тогда как-то следить за ним. Создавать когда его нет, как-то следить куда его пихать и желательно не терять если все это в разных папках. Неудобно. Надо чтобы юнити само как-то там делало всё и не теряло файлы настроек, а желательно даже чтобы я не знал где они вообще. Совать в реестр? Не вариант. Но! Юнити таскает за всеми файлами мета-файлы. Ткнул в них и смотрю обана а там же есть какая-то строчка с юзердатой. Я что, могу сам туда свою дату совать? И юнити будет за меня таскать эти файлы само куда скажу прямо за скриптом? И я их не буду видеть? Заебись!
А вот надо например как тут. Делаю окошко для редактирования паттернов. Допустим я хочу сохранять статус открытых кнопок-вкладок как справа, какие-то значения (в данном случае размер пиптиков и толщину линий) и какую-то библиотеку связывающую цвета с типом чтобы было понятно так что куда сунуть можно. Как бы мелочь, а как-бы приятная. Городить ради такой хуйни отдельный файл? Ну нахуй. А тут хопа и можно в метафайл скрипта самого окошка сунуть эти настройки предварительно сериализовав в строку через json который так клево встроен в юнити. Удобно? Удобно. Не проебу? Проебу только с метафайлом который кочует за скриптом один хрен. Да и даже если проебу то не так и важно всё это.
На мой взгляд для каких-то мелочей просто идеально.
Алсо да. Советую поглядеть https://youtu.be/SyR4OYZpVqQ когда стал смотреть че ещё люди творят наткнулся на это видео.
Я то понял, без обид, но ты пишешь какую-то ахинею. Тебе надо хранить допустим данные, для этого у тебя есть файл, или при очень большом количестве несколько.
Всё что тебе остаётся это написать один скрипт который будет сохранять/загружать, всё.
Поэтому повторюсь, без обид, но ты явно не шаришь, и советуешь адский велосипед.
Проблема пофиксилась удалением пробела в названии. Это норма или я такой криворукий?
Имена скриптов в юнити пишутся без пробелов. Вообще, движок бывает капризным периодически
типо редактора левелов? тоже интересно
Мне кажется это ТЫ не шаришь и читаешь не внимательно. Мне бы хотелось узнать сколько у тебя опыта работы с юнити.
Когда у тебя уже есть некоторые инструменты удобные для прототипирования, но тебе не нужны все они, то нужна модульность. Нужно иметь возможность разделять свои инструменты. Наличие какого-то единого файла настроек как минимум подразумевает какую-то общую архитектуру между инструментами. Уже неудобно. Совсем пиздец как неудобно. Сегодня в проекте нужен какой-то генератор хуйни, завтра нужен дебугер, послезавтра какая-то другая библиотека, а послепослезавтра они перестают быть нужны и надо их удалить и сунуть что-то ещё.
Какие варианты? Сделать скриптабл обжект "настройки" и писать их как partial класс добавляя туда от других инструментов? Неудобно, громоздко, требует зависимости одного проекта от другого.
Или делать так чтобы каждый инструмент имел свой файл настроек, тогда надо писать в каждом инструменте скриптабл обжект и некоторое количество кода чтобы он не потерялся. Менее неудобно, но более громоздко. А желательно создавать рядышком папку Resources просто чтобы не проебать его.
А тут обана вон выше десяток строк кода которые заменяют всю возню с файликами, потому что эту возню делает само юнити. Заебись.
Юнити как назло ещё и не даёт сериализовать EditorWindow в файл, не смотря на то что оно наследуется от ScriptableObject.
>>45370
Лучше не иметь пробелы в названии файлов со скриптами. Если создаешь монобихейвор или вообще всю хуйню что наследуется от UnityEngine.Object то лучше придерживаться тому чтобы название файла = название класса внутри него. И чтобы этот класс был первым который там упоминается.
Вполне возможно. Знаю одного человека который писал штуку для управления дронами в юнити. И другого который делал красивую хуйню для расчета материала нужного для кровли крыши. Юнити же удобно само по себе для такого сорта вещей.
А хуй знает. Предположу что ты с новым гуи сидишь.
Включи пиксель перфект, если не включил.
Попробуй поменять размер самого шрифта в настройках.
Попробуй поменять фильтрацию у шрифта. Это вроде font.material.mainTexture.filterMode.
Ещё можешь попробовать уменьшить скейл у компонента шрифта, но увеличить размер самого шрифта в нём.
Так это называется пивот поинтом у модели, и он фиксится либо в редакторе модели или созданием пустышки в юньке.
За сколько можно вкатиться с нуля с C# и юнити до первой работы? могу уделять 30 часов в неделю обучению. У кого какой опыт?
Я знаю про кранчи и тд, но стоит ли вкатываться вообще сейчас в юнити c# ?
Или лучше на галеру стандартную, но игры хоть мне нравятся, а веб прям работа работа
Мне 23 если что, хочу устроить перекот
Если опыт погромирования есть то наверно за месяц с таким темпом вкатишься. 3-6 и можешь уже принимать работу для дебилов.
Работу найти не трудно, трудно найти хорошую работу.
В шарп вкатываться это уже отдельная тема, но в целом юнити можно использовать для вкатывания в шарп в какой-то мере.
Вообще ответ больше зависит от твоих ожиданий. Что ты ожидаешь уметь делать? Быть человеком-оркестром трудно. Даже если только с кодом взаимодействуешь.
Ну я бы хотел запилить свою игру хотя бы из ассетов,ну и мобилки не самые казуальные на работку. C# не знаю от слова совсем. Хотя думал еще начать моделить семостоятельно и сделать не самую сложную игрушку про жизнь славика сычева в школе, мб не один в 3d.
>C# не знаю от слова совсем
Поэтому лучше начни с изучения языка. А то ты пытаешься освоить одновременно два очень сложных предмета. Приведёт это всё к обосрамсу.
Ну я планирую пройти курс по юнити, там c# в комплекте,вроде с языка и начинается там обучение.( с торрентов очевидно, я же не совсем поехавший) Моделлинг да, потом как-нибудь, уже после нахождения работы. Ну или самое простое в блендере если нужно будет для порфолио тайтлов.
Ну ладно, в общем вкатываться можно я так понял, сильно подводных нет. Спасибо
Ну, тут удачи можно пожелать только. Если моделить умеешь немного то может даже справишься. Если не умеешь то 2-4 недели ещё потратить придется до состояния когда себе плейсхолдеры сможешь делать.
Вообще следует сказать что "изучать" в юнити и делать в нём игры немного конфликтующие процессы. Так как по мере узнавания новых вещей проще зачастую будет снести проект и сделать заново, чем пытаться исправить. Так что в начале поменьше цепляйся за свои поделия.
>>45536
Да так то одно другому не мешает. Я вот погромировать научился примерно в тех-же обстоятельствах. А юнити в каких-то базовых вещах помогает узнавать язык как-то более интерактивно. Не сидеть консольное приложение писать, а делать чтобы там говно падало из жопы осла процедурно. Проще поставить себе цель!
Но да. Лучше для начала хотя=бы пройтись по различиям reference/value типам и че такое stack, а что такое heap,
>Не сидеть консольное приложение писать
Лул, я когда изучал C++, то параллельно начал писать консольную игру. А уже через несколько месяцев начал писать свой 2Д двиг, чтобы выводить картиночки.
Как лучше всего это сделать, чтобы без тонны ифов? Есть какой-нибудь пример?
>reference/value типам и че такое stack, а что такое heap,
А зачем это в юнитивском шарпе? Учитывая, что там распределение в памяти детерминировано, и массив, и объект будет размещаться только динамически.
А есть пример? Я пытаюсь по этому паттерны, но сложности с тем, как впихнуть проверки на колиженер
Кек. Делал почти то-же самое когда меня учили делфи, но решил что аутизм.
>>45613
А знаком ли ты с шарпом? структ от класса чем отличается?
>>45632
А в чем сложность то лол? Вот есть у тебя абстрактная нода стейт машины, в ней ебани проверку физона и спрашивай её из такого-же абстрактного метода "процессить ноду". Заимплементи например ноду "полёт" и в реализованном там методе "процессить ноду" спрашивай не окончился ли полёт, а если окончился, то перемещайся в другую ноду.
Можешь даже не писать всю эту мошню с графом, а просто использовать для неё аниматор. https://docs.unity3d.com/ru/2019.4/Manual/Animator.html
Там можно на ноды кидать бихейворы. Можно в этих бихейворах описывать все эти проверки. Заодно и анимации возложить на это.
>структ от класса чем отличается?
Тем что структура не имеет фишек ооп, не может наследовать и т.д.
C++ господин, ты? Или просто неуч? У меня где-то была клевая ссылка объясняющая различия для C, C++ и C# между структами и классами, но я её проебал.
Нет, различия в том где они располагаются. В стеке, или куче. И то как они передаются. По ссылке, или по значению.
Например, почему для класса мы получили 2, 2, а для структа 1, 2?
Ммм, то есть myClass2 не создает новую сущность в памяти, а просто становится указателем на уже существующую - myClass1. Поэтому участок памяти с данными один и тот же, просто обращаемся через разные имена.
А структура, значится, создает сущность в памяти уже на момент объявления без использования new. А через new просто инициализирует данные. Надеюсь я правильно понял. Если да, то этот new меня запутал. Я думал он конкретно для динамической памяти.
new просто для вызова конструктора. В случае структов не обязательно даже вызывать его. Достаточно объявить
MyStruct myStruct3;
myStruct3.myInt = 3;
и оно уже считается полностью инициализированным.
Но опять таки структы при желании можно передавать в методы по ссылке через ref.
Ну и если я объявлю массив MyClass[] то это будет массив с ссылками. А при объявлении MyStruct[] то это будет по факту просто массив с int. Ну и разумеется производительность при кешировании у них будет мягко говоря различаться.
Так что да, это такой достаточно поверхностный способ менеджмента памяти в шарпе.
То есть по правилам шарпа структуры только в стеке размещаются? А классы только в куче?
Если в общем и размыто то да.
Есть ещё боксинг-анбоксинг, в случае с юнити есть удивительные манипуляции с тем как копируются большие структы, ещё у шарпа есть unsafe код где можно упарываться пойнтерами и многое другое. Но в общем и целом да. При обращении к классу лезешь в кучу по ссылке, при обращении к структу ты обращаешься к связке полей.
Понял брат, спасибо.
>курс по юнити
На официальном сайте проходи, там есть два, один просто обозревает юнити как движок, во втором дают азы шарпа и поэтапно сделаешь 5 прототипов. Все остальные курсы говно.
мимо
Да у меня англ так себе пока что, так что пока думаю с отуса на торрентах пройти попутно апая язык, а там уже и досмотрю что нужно будет на англ. Жаль сакутина на торрентах нету, вроде годный чел.
Меня больше то интересовала перспектива, что там по рынку с работой, есть ли проблемы с поиском(очевидно вакансии уже смотрел и на гд.ру и на нн и в группах вк, но все равно не до конца понятно было, но насколько понял, смысл вката все еще есть, как и перспективы)
Там простой английский и после каждого ролика, есть простой список действий по пунктом для выполнения. Лучше этого формата ты не найдешь, будут 30 минутный ролики со скачущими туда-сюда мыслями без структуры.
У Сакутина, обычные курсы, там нет ничего особенного. Если интересно посмотри в предыдущих тредах, там анон давал ссылки на скачивания с файлообменников актуальных курсов 2019+
Хорошо, гляну, спасибо
Ну да, только там нет того, что я просил. Мне таймер нужен, чтобы секунду за секундой отсчитывал.
Да, но пришлось код перегружать, понижать читаемость. Мда уж, ну юнити.
Берёшь короче float и прибавляеш к нему в апдейте deltaTime. Обана в этом float считаются секунды!
Ну ты и дэбил. Есть ещё MonoBehaviour.InvokeRepeating, но это уже реально костыль.
Потому что для тебя это решение, судя по твоей сбитой системе координат.
Так вот, в скрипте двери я могу прописать какую сцену загружать, НО, как указать у какой двери спавнить игрока? Вроде в метод SceneManager.LoadScene() нельзя никаких дополнительных данных передовать.
В том то и вопрос - в какую дверь. Например если из хаба мы пойдём в верхнюю-правую комнату - в какую из 4-ёх даерей спавнить игрока?
У тебя проблемы с тем чтобы связать между собой двери чтоли. Ну сделай в нужной сцене менеджер, на котором будет висеть словарик с сценами из которых туда можно прийти. Когда сцена загружается, она в статичном классе смотрит "ага игрок раньше был в этой сцене, значит суем его в эту дверь", после чего перемещает его в нужную дверь, а затем обновляет переменную сцены в статичном классе, чтобы все остальные сцены могли проделать то-же самое.
Это если не хочется делать какого-то няшного редактора и просто хочется получить результат.
Для сохранения прогресса есть два пути.
1. Делаешь стартовую сцену перед своей основной игрой, и на ней объект, на объекте скрипт с нужными для тебя переменными, а в методе авэйк объекта ставишь донтдестрой, дабы объект не проебался при смене сцен.
2. Делаешь функию сохранения и загрузки из файла, и загружаешь/сохраняешь от туда в течение игры.
>>45807
Для текста файлик/файлики и смена текста при инициализации игры, либо же скрипты с текстом.
Для текстур/моделей хранить их дубликаты.
>Попробовал lean localization чтобы особо не заморачиваться, но это бред по-моему 9000 обьектов на сцене держать?
Это нормально. Я писал свой простой локализер, но он примерно так и работает. В UI вешаю на текст компонент LocalizedText, который подменяет текст на локализованный. А внутри скриптов, где динамический текст, уже напрямую использую Locale.GetString(...)
Единственное, у меня ещё есть расширенный вариант LocalizedText
>Никак не могу придумать, как пофиксить
Добавь пустой объект внутрь персонажа, назови его Pivot Point и размести справа. Пускай камера следит за ним.
>Это нормально.
А большое количество обьектов на сцене, которые содержат только тексты перевода не заруинит производительность?
Только учти, что root объект твоего персонажа не должен вращаться, ведь иначе тогда и Pivot будет вращаться. У меня сама моделька персонажа, которая вращается, хранится в объекте Avatar, который находится внутри root объекта.
Прости за глупый вопрос, анончик - то есть у тебя root объектом является просто пустой объект?
На нём весят скрипты связанные с персонажем. Это управление персонажем и всякая логика. А внутри этого объекта уже сама моделька с аниматором, пивоты для камеры, объект для озвучки шагов персонажа и прочее.
Снова спасибо, анон
Не понимаю. Скачал юнити, разрешил доступ в интернеты, а всё равно ошибка. ЧЯДНТ?
я вообще нубас, поглядел туторы на ютубе, решил руками потыкать и проверить всё сам, а тут засада
Действительно, всё так просто оказалось. У соединённых дверей просто должен быть какой-то общий id. Спасибо, держи фильтр.
Я бы ещё рекомендовал для рабочих папок не использовать пробелы.
Сделай сам, в чём проблема? Анимация для кнопок это плевое дело, можешь ITween использовать, еще проще будет
Я конечно понимаю что есть статьи в том числе и от юнитидева, но это все разбросано.
А мне надо вот прям за день вкатится в тему и начать делать игру - там игра на неделю разработки (я ее не сам придумал, а ворую с одной платформы со своими правками и заменой графики), нет времени вкатываться.
Делать методом проб и ошибок - хуита, сделал одну вещь, она них не работает - полдня гуглишь правильное решение, сделал вторую вещь, она них не работает - полдня гуглишь правильное решение. На игру времени нет
В прошлый раз пытался запилить рогалик и плюнул на него.
А да, я еще перфекционист, не могу тяп ляп. У меня даже от координаты типа 1.00011 жопа горит из-за этой дробной части, а если спрайт на пиксель дальше нужного подвинулся от скрипта - я кидаюсь на монитор с желанием его разьебать
Переводы текста лучше хранить в ScriptableObject'ах, а не в сцене. А ещё лучше - хранить весь текст в гугл таблицах, а потом его подтягивать в ScriptableObject, на который ссылается система локализации. Естественно, все это делается в редакторе, в билде у тебя будет объект со всеми строками и синхронизировать перевод "на лету" не получится.
Раньше когда чекал тему была фишка что надо было всё расстаскивать по большому количеству, и не углублять всё в одном.
Может сейчас уже что-то и поменялось.
как слайдер кастомизировать? ни цвета ни кноб нихуя нельзя поменять
почему Outline с толщиной по Х и У в 1 пиксель не всегда отображается?
Как анон выше написал, в юньке, ты можешь всё что угодно кастомизировать, вот вообще всё, у тебя полная свобода в редактирование и добавление, это не говоря об анимациях, свистоперделках и т.д. Единственное что, требуется понимать что ты хочешь сделать чтобы изучать в нужном направлении.
>как слайдер кастомизировать? ни цвета ни кноб нихуя нельзя поменять
либо упоротый, либо пиздоглазый.
>Outline с толщиной по Х и У в 1 пиксель не всегда отображается?
ебани материал с ним. UI вообще-то тоже можно шейдорами обмазывать.
>как слайдер кастомизировать? ни цвета ни кноб нихуя нельзя поменять
либо упоротый, либо пиздоглазый.
>Outline с толщиной по Х и У в 1 пиксель не всегда отображается?
ебани материал с ним. UI вообще-то тоже можно шейдорами обмазывать.
Если пользовались, то у кого брали?
Или может сами делали?
Анон, вот тебе гайд по лучшему кодревью, заливаешь на какой-нибудь pastebin/github (в зависимости от приватности проекта)
заходишь на любой форум Борду пишешь что у тебя самый ахуенный код в мире. Вуаля бесплатное кодревью ток придётся фильтровать мат
Адски двачую, рабочий вариант, и даже лучше, так-как тебе выскажут всё что думают.
Могу провести ревью кода, если проект небольшой. Бесплатно. Порядок такой - скидываешь проект/код, я его смотрю, а затем в текстовом/голосовом виде рассказываю, что не так и как это исправить. Делаю для себя, чтобы потренироваться. Если заинтересовал - пиши контакты.
>Бесплатно.
Хуита кстати. Так как обычно в таких случаях у ревьювера одна цель - обосрать тебя (почему в интернете все постоянно хотят кого-то обосрать?).
Никакого пользы от таких ревью нет и быть не может, так как их делают люди, возможно даже вообще не шарящие за программирование - ведь их цель не помочь, а обосрать. (поэтому в опенсурс проектах за такие попытки сразу дают баны и запрещают обсуждать тот же кодестайл).
Ну может ты не из таких, я не знаю. Просто это мой опыт просмотра кучи опенсурс проектов за десять лет жизни.
А вот идея платных ревьюверов интересна - может реально есть такая услуга? И кто предоставляет?
p.s. впрочем хороший код нужен ровно в одном месте - на собеседовании, так что...
Ты только что обосрал мое предложение, хотя вопрошаешь о том, почему все обсирают друг друга. Заранее обрекаешь мою затею на провал, не удосужившись проверить, действительно ли все так плохо.
По поводу попенсурса и комментариев в общих репозиториях - очень часто это делается для поднятия своего чсв. Формат моего предложения не подразумевает работы на публику, соответственно, мне не перед кем трясти бородой.
А это - многие другие!
Нельзя?
>Ты только что обосрал мое предложение,
Да я не твое предложение, а общий подход - когда ньюфаг выкладывает код на общее обозрение в надежде, что ему помогут и подскажут как надо писать код..
"headless" билд.
Уже продавал что-нибудь? Понятно, что рынок забит дампингующими индусами, но это единственное к чему у меня есть хоть какой-то интерес
>Set a price for the asset. Remember, Unity takes 30% of the sales;
Пиздец.
>After publishing my debut asset, the Asset Store brought me $56 in the first month. And in six months I have already received $316.8.
Пиздец.
Спасибо за статью, анон, полезно.
Все равно хотя бы раз попробую что-нибудь запилить, для кодинга я слишком тупой
Хотя если он сделал $316 пассивно со своего первого ассета, а не со всех в общем, то уже не так плохо
Есть желание перекатиться из околоэнтерпрайза (опыт год, java. Игрушки игогда раньше кириллил, но на голых джаве и крестах).
Насколько сложно попасть в юнити на разработку под мобилки с таким бэкграундом? Естественно, собираюсь подучить шарп (с джавы легко перейти будет) и сам движок изучить, запилить пет-проекты, с апи мобильных осей разобраться.
И вообще, гиблая затея? Готов в доходе потерять.
По-моему никто не покупает, кроме самых ленивых и богатых. Ибо умеющий гуглить и так найдет.
Хотя нет, нахуй надо. Передумал, лол. Лучше для хобби оставлю.
мм какой замечательный движок
И я так мой первый и я подозреваю не последний вопрос какого хера ему надо!!
>друг
Я пять раз входил и выходил из движка и несколько раз из из магазина в магазин.
На буржуйском форуме мне посоветовали скачать ранние сборки 18года и там закачать ассеты, после чего и в сборке 21года они будут работать, тупо, ноя попробовал и о чудо, каким-то образом это сработало.
Удивительный мир Юнити.Начало.
друг, а почему 18 юнити а не 20?
Насчёт этого кадра. Хуесосит всего и вся, когда можно было бы обойтись без оскорблений.Но что скажет анон, посмотрев как программирует Рома?Заслуженно хейтит?
Синтаксический сахар.
Давно за ним слежо и не только по юнити, но и видосы на канале, раньше гавнокодил, сейчас более менее научился, бесит его ЧВС и предвзятое мнение, да и курсы его гавно я покупал С#, знаю.
У вас случаем интернет не через проксю? Там есть проблема с юнити хабом, который не хочет авторизироваться если в видне включены прокси настройки
Уже сам во всем разобрался девелоперы вы чмондельные ваш уровень клепать мобилку парашу с кучей багов сиди тут короче и не отсвечивайте хуtйсосы. Дорога в геймдев вам закрыта. ^_^ ..!..
Пруф, что разобрался
Соседство с срачешизиками.
Вангую, что на видео и есть та самая "свинособака".
В целом чисто на твой вкус. Оба движка хороши, плюс недавно выкатили UE5 в котором много полезных фич.
В целом, если тебе нужно чисто чтобы на работу устроится или индюшатину делать - Unity будет выбором получше. Больше вакансий, движок удобней для всяких простых проектов аля мобилок и подобного что не отменяет возможность делать сложные игры аля Тарков или Pathfinder и пр. из шапки
В UE есть встроенные из коробки фишки, которые в юнити требуют действий от тебя, вроде пост-процессинга, болванчика-персонажа и подобного. Плюс, как я понял по презентации, в новом UE5 добавили много удобных штук для редактирования терейна и оптимизированного создания больших локаций. Еще из плюсов UE5 - у них довольно большой и удобный пакет ассетов для создания окружения.
Вся инфа по UE5 - сугубо статьи, презентации и поиграные игры на оном. В общем-то тебе ничего не мешает просто покопаться в одном и в другом недельку
UE для профессиональной разработки. Я бы рекомендовал начать с Unity. Гораздо проще вкатиться и проще будет найти работу/команду инди-разработчиков.
просо хочу схоронить проект на харде или возможно кому-нибудь скинут, а он блядь 2 гига весит (при том что билд игры весит 180 мб)
>как выпилить все мета файлы? и не сломается что-нибудь потом?
Сломается.
Сохраняй на гитхабе и оттуда скидывай.
Eсть гит игнор для юнити https://github.com/github/gitignore/blob/master/Unity.gitignore
>2 гига весит
Папка Library больше всего места занимает?
Всё что находится в папки Library это кеш, который можно удалить.
Я нажал на какую-то кнопку, причем быстро нажал, и значение Input.GetAxis("SomeShit") плавно меняется с 0 до 1, а когда нажал второй раз, значение вернулось с 1 до 0. Главный момент, чтобы смена значения была даже тогда, когда кнопка, отвечающая за ось SomeShit не была нажата.
PS на примере гонок: я лишь один раз нажал кнопку "W", и авто плавно едет второй, так как значение с этой оси равняется 1, даже с отпущенной кнопкой W.
Или это придется вручную писать?
изучи React Transform и в нём настрой привязку UI элементов к точке на экране
Расставляешь в настройках UI места куда ему привязываться и во всех разрешениях всё делается само из коробки. Прописывать в коде или что-то самому делать это уже вчерашний день, либо уж для слишком специализированных и узко направленных решений, обычно анону для инди 100% такое не нужно.
Я вот сейчас кастелванию на мобиле играю (которая симфония ночи) - охуенно же
То что на мобилах не делают нормальных игр - это другой вопрос.
Когда-то и на пк все это говно строчили всякие аловары
И на флеше (при том что на флеше также были и достойные игры)
хуя жара
Может у тебя комп слабенький? Потом будет быстро загружаться. Он генерирует временные файлы в папку Library.
>То что на мобилах не делают нормальных игр - это другой вопрос
Нормальные игры по каким критериям? Двачерским? Для меня хуинди в стиме - не игры - и я их никогда не покупаю. И что теперь? То, что на мобилках сплошной фритуплей, это уже особенности платформы. Никто не хочет там покупать игры.
Scene 'Assets/Scenes/SampleScene.unity' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
To add a scene to the build settings use the menu File->Build Settings...
UnityEngine.SceneManagement.SceneManager:LoadScene(String)
com.pub.rpg2e.GameMaster:StartGame() (at Assets/Scenes/GameMaster.cs:27)
UnityEngine.EventSystems.EventSystem:Update()
Кароче есть две сцены, сцена с игрой и сцена меню. В сцене меню настрои кнопку старт, привязал к ней пустышку объект, а на объект пустышку кинул скрипт, в котором есть метод загружающий уровень.
Если коротко то тело метода
SceneManager.LoadScene("SampleScene");
Так вот пишет, что не может загрузить сцену, окей делаю ещё одну сцену и вывожу её в вершину иерархии пути и ничего, копирую путь сцены, ничего, этот еблан в книги даже толком не указал в какую папку сохранить сцены с игрой, в какую скрипты, а ты теперь догадывайся куда файл засунуть или какой путь указать.
Настройки проекта открой. Там есть список включенных в проект сцен. Добавь туда все нужные сцены.
Сука боль ыыыыааааа.
Что сложного? Есть много способов на любой вкус.
https://docs.unity3d.com/ScriptReference/GameObject.SendMessage.html
https://gist.github.com/bendangelo/093edb33c2e844c5c73a
https://devansh.space/scriptable-objects-and-event-systems
Либо сделай один неуничтожающийся обьект, либо записывай данные в статик класс
>Только, как это сделать конечно не сказал.
Бля, если тебе еще и это обьяснять нужно, то нахуй ты вообще сюда пришел? Может ты еще и экран на телефон фотографируешь, вместо того чтобы скриншот сделать, потому что тебе никто не сказал на какую кнопочку для этого нажать?
Ищу годный гайд по разбивке проекта на два апк под андроид. Как водится - основной апк для кор-механик, вторичный (для дозагрузки) под контент, как паковать и как это дело потом согласовать. Пилю первый проект манямечты.
Нативные виндовс-компоненты и контролы не вставить.
А ты уверен, что оно тебе сейчас надо? До 100 МБ можно не разделять. Есть ещё автоматическое разделение:
https://docs.unity3d.com/2018.4/Documentation/Manual/android-OBBsupport.html
В гугле щас до 150 мб можно бандлом, до 100 мб можно апк.
От души душевно в душу, но это я читал, забыл дописать что ищу альтернативные гайды. Да, разделять надо, хотя бы из тех соображений, что при необходимости допила после релиза, не пришлось бы все перезаливать и перекачивать юзерам.
Ассет, платный можно спиратить
Сам юзал в одной игре - работает чудесно, помогает избежать костылей для сохранения листов + по заверениям разрабов работает даже лучше, чем встроенные префсы
Это всё элементарно реализуется с помощью Newtonsoft.Json. Можно сохранять любые данные, хоть List, хоть Dictionary.
двачую этого, только можно вообще без васянов и юзать дотнетовский бинарный сериализатор
писать почти нихуя не надо и все работает норм
Пишут что GameObject.Find() это медленно.
Проверил со стопватчем, среди 1000+ объектов нашло за 0.1 ms (меньше чем тратит Debug.Log()).
То есть если не юзать в апдейте то это норм?
Периодически, типа как меседж передать когда надо.
Диалоговая система ищет акторов по сцене к примеру.
(лень писать евент систему (если можно не писать))
Потому что некрасиво смотрится на кодревью наверн)
Ну, это очевидные вещи. УЕ отлично подойдёт для графонистой игры. А индюшатину проще запилить на Юнити.
По фактам все
Нашёл, всё в порядке пацаны.
>ми-ми-ми никто в твиторе ни лайкает мое говно((((((
Вон люди на реддите постят свои поделки на юнити и получают тысячи лайков за сутки
https://www.reddit.com/r/Unity3D
А вообще, имеет вообще смысл вместо обычных событий делать так(пик)? С одной стороны, так проще тестировать код, потому что любой может послать событие, ты не привязываешься к конкретному классу. С другой стороны, чтобы отобразить в том же UI текущее состояние, тебе нужно обратиться к конкретному классу anyway.
Есть UI, который отображает никнейм игрока. В OnEnable отображаем текущее значение:
var playerService = Context.Resolve<IPlayerService>();
nicknameUi.text = playerService.Nickname;
А потом привязываемся к событиям:
playerService.NicknameChanged += ...;
playerService.NicknameChanged -= ...;
я бы сказал единственная часто что мне понравилась, т.к. сам не понимаю этот feature creep пиздец
>часто
часть
Они-ж теперь акциями торгуют. И чтоб цена шла вверх надо постоянно создавать инфоповоды "смотрите какую охуенную фичц мы запилили", а после на эту фичу уже всем насрать.
Что за кент, дайте ссыль, плиз
Возможно они вынуждены этим заниматься? В отличии от UE45, который пригрели себе эпик геи
Настройки компонента аниматора покажи. Там есть поле как раз для этого. Apply Motion Root вроде
>Destroying assets is not permitted to avoid data loss.
>If you really want to remove an asset use DestroyImmediate (theObject, true);
Спасибо, но уже разобрался. У меня в OnAnimatorMove не было этой строчки:
transform.rotation = animator.rootRotation;
Бро, это не решение проблемы. Ты создаёшь копию и тут же её удаляешь. В чём смысл? Опиши задачу.
я его через секунду удаляю, так как анимация, которая на нём висит длится всего одну секунду
но вот что-то не делаю
Можешь для удобства повесить на префаб такой универсальный компонент.
бля... какой-же я невнимательный, это просто пиздец и люблю всё усложнить
Т.е. пока сцена не загружена, ее данные закрыты?
А если я хочу сохранить ее состояние в рантайме и не запускать каждый раз забилженное состояние?
Наверное да, раз сами игры они делать не хотят.
Как например херстоун, наверняка некисло им отвалил за свой успех.
Насчёт финансирования. У юнитеков есть менеджеры с которыми можно договориться. Условия под каждого свои. Нам они выписали приличный бонус на юнити адс. У них есть русскоязычные менеджеры.
Есть аналоги уечевского control rig? Что с IK солверами, физическими анимациями?
Можно ли пилить продвинутые процедурные анимации с функционалом из коробки, без покупки ассетов?
>Господа, пользовались такой услугой, как код-ревью?
Ожидание : обзор архитектуры с указанием на неочевидные проблемы и подводные камни.
Реальность : доёбки до нэйминга и орфографии.
Бесполезная хуита этот кодревью. Самый лучшщий способ отревьювить свой код - посмотреть на него через месяцок, другой.
> Самый лучшщий способ отревьювить свой код - посмотреть на него через месяцок, другой.
Два чая анону, также в процессе написания кода регулярно спрашиваю себя, а не делаю ли я хуету. Если ответ - возможно, то переписываю
это значит что при загрузке сцены надо все снова двигать туда где было
все закрытые двери открывать, все собранные бобы убирать, всех убитых гоблинов удалять (или спавнить труп) и тд
не проще было бы перепечь сцену с новыми данными и все?
>Если ответ - возможно, то переписываю
При этом важно не забывать, что это всего лишь инструмент. Я как-то посмотрел исходники Террарии, там вот разработчики не парились. По 10-20 тысяч строк классы. Все предметы и их логика были в одном единственной классе. Всего было где-то 10 игровых классов или меньше.
Так что запилили?
Сейчас достал один ассет, ассет охуенен, в нем 90% для моей игры уже сделано (при том что сложной игры - песочницы-выживалки, а не гиперказуала)
Смотрю код... Короче, если бы Сакутин его увидал, его ор бы услышали на марсе. НО!!!. Есть две большие но:
- код читается легко
- код делает свою работу
Я это к чему - меня реально удивляет вся эта мода дрочить на какие-то там стандарты, дрочить на бесполезную инкапсуляцию (извиняюсь спросить - что в коде может взять и само поменять переменные без программиста?)
Вот в восьмидесятые, девяностые и даже нулевые никто на это не дрочил - а столько великого софта было написано, и мы до сих пор пользуемся их трудами. А все эти Сакутины - что они сделали? Говноказуалки для андроида? Это вот ради этого надо так дрочить на код? Для очередной мобилки которую пилят за неделю, продают за 3 месяца, а через год забывают про ее существование?
И ведь дрочат же на собесах.
Не знаю, о чем ты. Я вообще из твоего поста узнал о нем, а далее любопытство сыграло злую шутку. Открыл рандомнвй видос из гугла и понял, что это бог во плоти. Ну как у него не взять в рот?
>дрочить на какие-то там стандарты, дрочить на бесполезную инкапсуляцию
Опытным программистам такие детали помогают. Если я вижу инкапсулированные поля, то понимаю, что они извне не изменяются. По крайней мере напрямую.
Если я использую какой-то сервис в игре, то мне нужно как-то запускать игру в редакторе с фейковым сервисом. Для этого я использую интерфейс, который описывает сервис и пишу две реализации. Одна реализация используется в билде, другая в редакторе.
ва первых - за 2 геткомпонента подряд нужно тупо расстреливать. написать var image = getcomponent<image>() должно работать на уровне рефлексов
ва втарых - правильно будет ввести поле куда или назначать имедж в инстпекторе или получать его в старте
ва третьих - так как эту кнопку будут нажимать раз в пятилетку буквально - никакого влияния на производительность тут не будет
>Если я вижу инкапсулированные поля, то понимаю, что они извне не изменяются
Что тебе дает это понимание? По факту это одно из мнимых аргументов, которое придумали чтобы оправдать очередную дрочку, тогда как в реале оно нах не надо. Есть такая категория аргументов, которая на бумаге красиво звучит (раньше кстати это называли методом черного ящика, а сейчас вот инкапсуляцией переобозвали)
Например в си вообще почти всё было в глобальных переменных. Никому это не создавало никаких сложностей, все операционные системы на си, почти все драйвера на си.
Твоя мобило-дрочка в 20к строк даже близко не стоит рядом с такими монстрами по объему кода. Так почему тебе сложно читать свой код?
На пикче если что - код Кармака из дума3 (теже самые глобальные переменные, при том что Кармак уже пересел на с++ к тому времени)
>за 2 геткомпонента подряд нужно тупо расстреливать
Ты скОзал? Понятно что это не эффективно, и можно реализовать лучше, но доёбываться нет смысла, зная какой уровень у программиста.
>правильно будет ввести поле куда или назначать имедж в инстпекторе
Можно придумать множество реализаций, и это причём не самые оптимальные с точки архитектуры.
>так как эту кнопку будут нажимать раз в пятилетку буквально
Называется сначала посрали, а потом убрали, с этого и надо было начинать.
>>47588
Как уже ответили вариантов много что сделать можно, но если всё устраивает и работает, и что главное понятно, то забей. Не забывай что надо сделать игру, а не дрочить на строчки кода.
Пожалуй что действительно важное, это не суй говно в апдейт, и не инстанси каждый кадр.
ога, я скозал. если человек привык писать вот так то и дальше он будет писать так же. чем дальше тем сложнее переучиваться, и если не бить по рукам за вот такой нафик ни на что не влияющий на плохой код то потом он у тебя в апдейте для кучи объектов будет по нескольку раз геткомпонент вызывать, загнав фпс в ноль на ровном месте
Хочешь я тебе одним предложением скажу божественную формулу программирования? Слушай:
Да начни уже писать этот чертов код; не дрочи на качество, просто пиши код
Не благодари
(даже без иронии, фраза вроде простая, лулзовая, но многие ее долго не могут понять... А вот когда поймут, тогда все сразу станет на свои места)
Двачую, тоже начинал с крестов на глобалках все делал, где надо указатели пердолил, борьба за каждый байт, начало нулевых, вашу мамашу! Эх, были времена...
Маня, стандарты, инкапсуляции, фелляции и прочий онанизм помогает только в групповой дрочке, когда несколько макак кодят, чтобы зверьки тратили меньше времени на понимание гоанокода друг друга и ничего друг у дружки не поломали ненароком, прижуманы все эти стандарты и инкапсуляции. Если же ты единичная макака и дрочишь жопу сам себе, то можешл смело класть хуй на все это и писать так как лично тебе удобно.
Те кто пропагвндирубт соблюдение неких стандартов, по сути отрабатывают заказ кабанчиков-капиталистов, чтобы к ним на галеры приходили уже подготовленные рабы с развальцованным очком под нцжный диаметр бутылки.
>>47599
Пчелики, раскрою страшную тайну, мы тут игры делаем, а не дрочим на код, парадигмы и еще кучу заумных слов. Вот говоря обычно анону дрочи код, а не делай игры, он подрочит, почитает, и забьёт потому что слишком сложна и долга, а ему зачем это? Денег не приносит, лишь время тратит как и само существование.
А вот даже если взять пример яндере дева, с его адским кодом, то он сделал пусть и из готовых ассетов игру, и она даже запустилась, и в неё, о ужас, даже играли!!
Короче посыл для всех анонов которые не работают в профессиональной сфере разработки или на дядю, шлите нахуй всех кододрочеров, это лишь пустая трата времени если вы не планируете строить свою жизнь на разработке.
Всё само придёт, постепенно, делая маленькие игры, начнёте понимать и видеть что где-то совсем плохо, и сами же заинтересуетесь в своих траблах, не слушайте безигорных петушков.
Не, парень то шарящий, и рубит кучу бабла на разводе лохов на курсы, типо вебинаров, но полезное с водой.
По сути есть чем возразить-то? Какая разница, что он написал или не написал, если он знает, о чем говорит?
Чел, там нет проблем с кодом. типичный продакжен код. Бери любой проект - там будет таже хуита - советую поинспектить решарпером какие-нибудь топ игры на юнити.
Просто люди ищут к чему прикопаться. Проблема яндере симулятора в чем угодно, но не в коде.
Там скорее проблема в аутизме яндередева, так как вместо нужных вещей он прогает очередную прическу (так-то он реально работает, а не пиздит, просто слишком закапывается в мелкие детали вместо общего геймплея)
>Чел, там нет проблем с кодом. типичный продакжен код.
Вот тут не соглашусь, код у него явно двачерский, куча нагромождений, ненужных и вредных. Полное отсутствие архитектуры, всё говно тянется и связывается друг с другом. Не знания постройки архитектуры, пусть и примитивной.
Любой опытный кодер бы сделал лучше во всех планах.
Но это не отменят того факта что он сделал всё таки своё подделие.
другойанон
>По сути есть чем возразить-то?
Есть теория, а есть жизнь. Не факт что шарит кстати. Ведь на его курсах слишком примитивные, можно сказать академические примеры, специально созданные для этого
Было бы интересно посмотреть на его код в каком-нибудь серьезном и реальном проекте - но это как раз увидеть нельзя
>Любой опытный кодер бы сделал лучше во всех планах.
Чтобы уметь в архитектуру - нужно сделать кучу подобных проектов. Ни из какой книжки ты не получишь эти навыки.
Также для качественной архитектуры нужно качественное тех описание, не все программисты в принципе это могут сделать (поэтому это вообще отдельная профессия). Без этого описания ты не сможешь сделать качественную архитектуру, так как просто не знаешь что ты будешь делать.
Не, сначала ты можешь сделать то что тебе кажется красивой архитектурой, а через полгодика понадобится внедрить новую фичу и вся твоя архитектура накроется тазом - про это была статья на хабре если что.
То что ты думаешь что архитектура у тебя хорошая - это всего лишь фантазии, так же как джуны думают что их код самый идеальный и хороший. Либо ты делаешь одни и теже проекты десятки лет и просто надрочился.
Слово 'Опытный' ты специально проигнорил?
Об этом и речь, челик который участвовал в разработке серьёзных проектах на должности выше подай/принеси.
Речь сейчас идёт об одиночных инди играх, которые пилятся в соляную прогерами, и лишь нанимают арт/музыку на аутсорсе. Там ты можешь сам, своими силами переписывать/переделывать архитектуру. А если ты не понимаешь что делать, не имеешь опыта, то выйдет как у яндере дева(Но в целом тут как уже писали дело в том что он аутист ебаный, за 7лет сделать такое и не переделывать, нужно быть дауном или похуистом).
>То что ты думаешь что архитектура у тебя хорошая - это всего лишь фантазии
Опять же речь о соло проектах.
Если ты хорошо ориентируешься в своём проекте, и через час копошения в скриптах не забываешь что-куда, то всё ок.
Ну и главный фактор для конечного пользователя шоб не лагало и не вылетало. Чек? Значит всё гуд, не трогай и не трать время на пустую оптимизацию и рефакторинг.
>так же как джуны думают что их код самый идеальный и хороший
Не пизди, это где таких кадров находят? Ниразу не встречал таких, все прекрасно понимают что ниОчень, и не выёбываются.
Разве что бесплатно если с челиками работать могут наверное бычиться.
>Слово 'Опытный' ты специально проигнорил?
Но мы-то говорим об яндередеве, а не Кармаке или Суини. Каким местом он опытный чтобы тредовать от него идеальной архитектуры?
>>47621
>Там ты можешь сам, своими силами переписывать/переделывать архитектуру
Только пока время разработки таких игры не больше года. А если твой проект в разработке больше 7 лет? За это время даже кодинг сто раз изменится. Яндере начинал когда юнити еще даже не был моден, не было никаких толковых курсов, а в официальных уроках от юнити тебя учили все поля делать публичными потому что.
Слушай, мне всё больше кажется что ты толстишь.
>таких игры не больше года
Ну мы как раз об анона играх. Они не делаются годами как маняпроекты. Тыж сам наверное знаешь что игру как у яндере дева можно с нуля за пару недель написать? И вся сложность именно в графике и других ресурсах которые кодеры обычно ленятся либо не могут родить в нормальном качестве.
Еслиб этот чухан хотел, он бы уже давно, САМ, именно что без посторонней помощи от студий или людей всё бы сделал, я уж молчу про то что, если ты кодишь и лазишь в юньке каждый день хотяб по 3-4 часика, сам во всём разберёшься.
Про проекты долгострои аля песочницы или патреоно доилки я не говорю, вот там всё сложнее.
пора завязывать этот пустой трёп неочём, яндере дев это позорище от мира кодеров. К тому же необучаемый и чсвшный.
>Тыж сам наверное знаешь что игру как у яндере дева можно с нуля за пару недель написать
Да, а еще дварффотресс можно за неделю запилить...
нет, нельзя. Это только так кажется. То что там сделали свои клоны яндерки за неделю - так они делали имея уже готовую игру для примера (да еще и код брали из нее же - это конечно вообще шедевр)
Симуляторы вообще сложно делаются. У меня в виш листах много инди проектов-симуляторов - все они долгострои. Даже не помню, был хоть один симулятор который бы сделали за год или меньше
Вот чисто рандом игра - Forager. Так если посмотреть - примитивная графика, примитивный геймплей - что там делать? Только вот автор на нее три года убил, так как где-то вроде в 2016 она была на какой-то конкурс. В 2017 году прошла гринлайт, в 2019 только опубликовалась в стиме
Хотя играбельна она была еще в 2016-2017 году, но два года до стима ушло на допиливание мелких деталей
Это как там говорят - последние 10% игры будут занимать 90% времени разработки
И тогда юнете тред будет еще чище...
The animation state Walk could not be played because it couldn't be found!
Please attach an animation clip with the name 'Walk' or call this function only for existing animations.
UnityEngine.Animation:Play(String)
PlayerMove:Update() (at Assets/Scripts/PlayerMove.cs:41)
Он не видит анимацию, но я её пять раз добавил через Анимации, аниматором я пока не пользуюсь, для меня сложно.
Я и пробовал дублировать анимации персонажа, настраивал легаси, дженерих и гуманоида. Я читал документацию но там только про аниматора и стейт машин, повторяю туторы слово в слово и нихера.
Да не, нет смысла.
>>47652
Ну чувааак, заканчивай уже толстить. Я писал именно про игру от яндере дева, а не про симуляторы другие.
Вот рили, если не зелёный, посчитай и посмотри механики игры на момент выхода +- пол года, и подумай, сколько тебе заняло это бы на разработку? Игра приметивишая, и ладно бы графика была своя, можно было бы простить, но нет, всё готовое.
Контроллер и осмотр час делов, юишку за пару часиков, нпс с листом навигации это час(не забываем то что в юнити всё из коробки и даже не надо париться, лишь зоны авто сгенерировать и всё), что там еще? Хз, это говно делается за пару недель, не знаю что ты там долго собрался реализовывать.
Вот в последних билдах, да, механик он уже подвёз побольше, нужно будет поболее времени, но сути не меняет.
bool GetGameServer( uint ip, ushort port, SteamId serverId )
чтобы получить из него значения ip, port, serverId ?
я написал такую конструкцию:
void Lobby()
{
uint xa = 8; ushort xe = 8; Steamworks.SteamId xu = 8; // "=8" т.к. компилятор требует присвоить значение
var s = myLobby.GetGameServer(ref xa, ref xe, ref xu);
Debug.Log("" + xa + "" + xe + "" + xu);
}
в итоге смог получить три 0, но чет кажется это совсем не то и я просто криво его вызвал
но зачем? там из фишек - трансляция в шарп код и его компиляция в юнити стеки что дает производительность собственность шарп кода. почему не писать шарп код?
так я и не делюсь мнением, я спрашиваю нахуя оно воопше нужно когда любой алгоритм сложнее "взять значние, произвести элементарную операцию, вернуть результат" превращается в запутаный клубок из узлов и стрелочек?
Блять, как вы меня заебали, надменные уебаны, идите нахуй из этого треда. До переката 1-2 шиза пукали такую хуйню раз в неделю в тред, сейчас листаешь и диву даешься - у одного движок виноват в том, что ебущийся в глаза уебан не может найти как редачить компонент, другой ошибку не в состоянии загуглить и на любой ответ огрызается, ты, собака ебаная, мало того что мог загуглить свой вопрос, а не писать свой высер сюда, еще и огрызаешься. Как вы меня заебали, надеюсь батя вас все еще пиздит, уебаны несовершеннолетние
>мало того что мог загуглить свой вопрос, а не писать свой высер сюда, еще и огрызаешься
Прими таблетки шизик и перестань отвечать на посты своими фантазиями, о которых тебя не спрашивали. Тебя ебать не должно, зачем мне, я тебя не спрашивал, что лучше, а ты высрался и начал доказывать, что шарп лучше. Мне похуй, понимаешь? Не в этом дело. То, что ты не можешь пройти мимо вопроса - исключительно твои проблемы.
а ну тогда все просто. болт 2 никогда не выйдет. потому что болт воопшем и болт2 в частности перестал существовать. юнити выкупило проект и переименовало в вижул скрипт, что позволило отказаться как разработчикам болта так и собственно юнити от любых обязательств по болту.
Во первых, я не тот анон, что тебе отвечал, во вторых "Ты м-м-мог бы просьто не отвецать" не оправдывает то, что ты еблан, не можешь открыть гугл и поискать ответ на свой элементарный вопрос, а вместо этого приходишь сюда и начинаешь срать
Пока что срёшь тут только ты своей разорванной жопой. Что ты сделал? Ты высрался, как тебе надоели мамлолетние дибилы и всё. Очень полезная информация. Молодец, ты определённо лучше.
>виноват не я, потому что я малолетний дебил, а ты потому что тебе это не нравится
Я учу тебя, еблана безмозглого, что вопросы нужно решать самому, особенно те, что решаются вбиванием оного в поисковик, чтобы ты сюда больше не приносил свой рак. И хуй с ним с твоим вопросом, но ты приходишь сюда, задаешь вопрос, а потом начинаешь вести себя как царь горы и нахуй всех посылать, повезло тебе, что я не мод
Ты строишь из себя тут умного и взрослого, но так и не понял, что не нужно высираться на темы, которые тебя не просят. Неужели не понятно? У тебя с головой проблемы что ли? Я задал конкретный вопрос в тред, пришёл умник и начал мне писать "а зачем тебе это, делай по-другому". Блять. И меня после этого ещё оскорбляют.
Давай приведу тебе пример, чтобы ты понял, как это выглядит:
- А как пройти в библиотеку?
- Зачем тебе библиотека, используй интернет и электронные книги, они лучше, лол.
Понял, нет?
Если у тебя туша анимирована, то гемор.
во-первых имеет смысл ибо что-то сложное в визуальном редакторе превращается в спагети код визуально. тебе все равно придется учится программировать и c# не самый плохой язык для этого
во-вторых зачем покупать плаймейкер если есть визуал скриптинг из коробки, который переименованный болт, который собственно и был лучшей альтернативой
а че там пытаться? из разработки там простейшая логика, которую можно реализовать даже на основе двд-формата, вон школьники в нулевые без проблем справились. все ложиться на катсценки, это тебе в /mov/
https://www.youtube.com/watch?v=O0rct6EdQ6Y
да, это нормально. тут или делать континиус проверку ручками, или лепить костыли вроде твоего/кидания лучей чаще или тупо забить
Увеличь частоту обновления физики.
Попердоль полгодика и будь готов потерять -30% в зарплате, я так перешёл с веб-макакинка шарпового на нестыдный проект.
профайлером
Редактор или билд игры?
да хоть непосредственно на канвас или другую кнопку - глубоко однохуйственно. собственно панель от имеджа отличается только тем что по дефолту принимает текстуру как 9-слайс
В подробном тексте должен быть весь лог до ошибки. А вообще у тебя где-то скрипт не может найти обьект\компонент
Да это и есть весь, единственное что если щелкнуть на нее то таки в инспекторе появляется, то что справа
Попробуй перезайди в юнити, иногда бывает такое после апа проекта хотя сомневаюсь, что ты апал, но может помочь
Вообще если это Graph, то он возвращает Null если игра не запущена, так что если у тебя какой-то скрипт с ExecuteInEditorMode и запрашивает Graph - оно всегда будет null
>Попробуй перезайди в юнити, иногда бывает такое после апа проекта хотя сомневаюсь, что ты апал, но может помочь
Обновлял пакеты, возможно из-за этого, спасибо
Попробуй добавить прозрачный бекграунд и на него повесь компонент с пикчи.
Я так делал, хочу по научному. Нашел, вроде, правильный вариант, используя public void OnPointerDown(PointerEventData pointerEventData)
Но вся суть в том, что придется еще один скрипт делать на родительском объекте, чтобы отслеживать клик по нему.
Эта хуйня срабатывает только по клику на объект, на котором она висит. Т.е. его придется вешать на все абсолютно все объекты, присутствующие на экране, чтобы закрыть маленький тултип. Пиздец. Как реализовывают закрытие окошек на телефонах?
Пришла идею обращаясь к rigidbody ставить velocity на 0, попробую утром
>Как реализовывают закрытие окошек на телефонах?
Я не знаю, что ты паришься. Это работает и на ПК, и на мобилках.
Я делаю маленький тултип, как подсказка, а не целое окно. Хочется, чтобы при клике на него или вне его он закрывался. А что, если этот клик был по кнопке? Она же не сработает и пользователь подумает, что приложение - говно. Я, допустим, сам так буду думать. Потому что второй клик - это очень плохое юзабилити.
Это твоя игра? Нейм дай, если да.
>Хочется, чтобы при клике на него или вне его он закрывался
Самое простое - в Update проверять Input.GetMouseButton(0). Это будет работать и с мышью, и с тачскрином.
Если на событиях, то можно так:
https://pastebin.com/YShp29iq
Что? Он не должен двигаться сам по себе. И причём здесь rigidbody? Ты либо используешь CharacterController, либо Rigidbody. Что-то одно.
Пиздец, анон, спасибо. Даже на заграничных форумах люди придумывают какие-то кастыли, а тут так просто всё и работает как часы.
Почему при импорте обычного куба у меня полигонаж удваивается?
Я читатал, что это вроде из-за марк сим в блендере, когда я помечаю грани куба перед развёрткой, так что эе мне теперь не разворачивать модели? Тогда я не смогу нормально красить текстуру, а если процедурную текстуру кинуть, то в юнити не понимает шейдеры из блендера.
Как быть?
Скорее всего, марк сим создаёт вспомогательную геометрию, и скорее всего, тебе при экспорте надо проверить галочки и убрать галочку вспомогательной геометрии. Чисто с дивана предполагаю.
В Update() :
>characterController.Move(offset * Time.deltaTime);
Offset - это тот самый вектор, на первой картинке его значения (после умножения на Time.deltaTime)
На второй картинке значения transform до и после движения в "нужную" точку.
На шарике висят character controller и sphere collider (отключение последнего кстати ничего не дает).
Подскажите пожалуйста, ЧЯДНТ?
CharacterController оперирует капсулой. Тебе не нужно добавлять никаких коллайдеров и ригидбоди.
https://www.youtube.com/watch?v=_QajrabyTJc
>Controller не реагирует на силы сам по себе и не отталкивает Rigidbody объекты автоматически.
>С другой стороны, если вы хотите, чтобы персонаж игрока подвергался влиянию физику, то возможно вам было бы лучше использовать Rigidbody вместо Character Controller.
Если тебе нужно реализовать физику сферы, то стоит тогда использовать ригидбоди.
Спасибо большое за ответ!
Гравитация не действует на чарактер контроллер. У меня вот такой код используется. Вместо своей "gravity" можешь использовать Physics.gravity.
Интересно, спасибо
Добавил в Update()
>characterController.Move(Physics.gravity * Time.deltaTime);
И мой шарик все равно парит как и парил
Где-то у тебя косяк, очевидно. Создай чистый проект с минимум кода и компонентов.
Ну что за говнокод, блять, чудо что у тебя вообще получилось открыть юнити с такими умственными способностями.
Если лень читать документацию и старфлов, то хотяб на ютубе ролики от индусов смотри...
Ирония в том что этот проект и так ничего не имеет кроме шарика и управления им. Забавно что столько гемора с такой простой штукой
>Ну что за говнокод, блять, чудо что у тебя вообще получилось открыть юнити с такими умственными способностями.
>Если лень читать документацию и старфлов, то хотяб на ютубе ролики от индусов смотри...
Что за боевые кратинки? По делу есть что сказать?
У меня жопа взрывается осознавать что кто-то на полном серьёзе не может реализовать функцию в пару строчек кода, это просто новый уровень долбоебизма.
Что-то мне кажется, что ты тролль из движкосрачей. Судя по твоим высерам и нападкам. Вот этот простой код заставляет падать сферу. Как он может у тебя не работать - я хуй знает.
Ты слепой даун?
ТАМ ЖЕ НАПИСАНО.
>читать документацию
>старфлов
>ютубе ролики
Вопросы? В любом из этих 3 мест ты найдёшь инфу как реализовать в юнити 99.99% вещей которые тебе нужны и лишь что-то супер сложное и комплексное у тебя не получится, но такое ты и не будешь делать, сукаблять.
Нет, я не тролль, перешел на rigidbody.velocity и все норм стало (держу в курсе). И где ты увидел у меня нападки? Про чистоту кода другой анон пишет, мне вообще некстати плеваться желчью в анона который пытается мне помочь
Сам хочу упороться ECS. ООП для геймдева не подходит. Но напрягает, что он до сих пор в превью. И вообще непонятно, каким будет релиз.
А ECS так подходит, что его какой год уже пытаются внедрить, да все никак не допилят, не напомнишь?
>А ECS так подходит
Старкрафт2, овервотч - на ЕКС, например. Сама система уже давно существует.
Окей, я ебанутый, проехали
Приподнял, он упал, но все равно не полностью, как и раньше. Похоже это фича character controller`а . Посмотри у себя, мб тоже остается такое расстояние от меша до поверхности.
На месте. Сначала пробовал Plane (и Mesh collider), потом Cube (cube collider), результат один и тот же.
он скопипастил мой совет, хуесос
не надо было тебе ничего писать, этот мудак бы тебе еще шинду переставить посоветовал небось
А нафига тебе отслеживать место нажатия, если оно не имеет значения? Просто отслеживай клик когда тултип активен.
Какой способ обработки событий лучше выбрать? Я не смог понять, как использовать метод "Invoke Unity Events", а простой "Send Messages" мне не подходит, т.к. я хочу вешать скрипты на дочерние сущности (например, камера со своим скриптом). Реализовал через "Broadcast Messages" - выглядит просто и удобно. Нормально или это слишком тяжёлый метод? И можно ли создать несколько Player Input, чтобы, например, второй отвечал за гуи, или гуи должен создаваться внутри "игрока"?
>>48590
Зачем тебе кряк? В новых версиях даже чёрная тема бесплатна.
Тебе стыдно что все будут знать, на каком движке ты сделал игру?
А если твоя игра что-нибудь заработает и кто-нибудь пронюхает про кряк?..
>простой "Send Messages"
Никогда и нигде не используй, оно медленное.
>И можно ли создать несколько Player Input
Да, но нет. Оно просто не нужно. Есть же экшнмапс. Единственная проблема, с которой я лично столкнулся, так это то, что нужна отдельная проверка при вводе, что у нас активно - игра или гуй.
>Какой способ обработки событий лучше выбрать?
Посмотрел свой код, кекнул с выбора анона, мой выбор - не использовать GameObject components вообще.
В следующий раз когда ты придешь помочь а тебя проигнорят и отнимут твои слова, вспомнишь меня, дупло.
Ты хотел помочь человеку, человеку помогли, какая разница кто, тут все анонимы же?
мимокрокодил
И где там его ААА игра?
Всё дело в форматировании строки. Попробуй настроить момент.
https://www.csharp-examples.net/string-format-double/
Cпасибо. Но, как оказалось, это все равно бесполезно, у меня неправильно идут сравнения. Есть отображение шкалы опыта от 0 до 100. Есть левел. Есть опыт, требуемый для лвл апа, с каждым следующим лвлом требуемый опыт растет на рандомное значение. Как сравнивать шкалу опыта от 0 до 100 на то, меньше ли она требуемого опыта? Он может быть и 228 и 1488.
Я нихуя не понял, но звучит так как будто ты изобретаешь велосипед, но с квадратными колесами.
мимо
>с каждым следующим лвлом требуемый опыт растет на рандомное значение
В чем проблема записывать это рандомное значение в переменную и потом сравнивать текущий опыт с ним?
Да оно не рандомное, а берется из массива . Оно присутствует: levelSystem.GetExperience(). Я хочу сравнить число от 0 до 100 с ним. Хуйня в том, то оно обычно больше 100
По-моему проще так сделать: сравнивать переменную с текущим опытом и нужным до лвл апа пусть хоть она и из массива. А на шкалу выводить процентное соотношение текущего опыта, где 0% - необходимый опыт до апа предыдущего уровня, а 100% - необходимый опыт до апа следующего уровня.
А зачем сага?
>>48773
Сделал с помощью соотношения текущего опыта с опытом, требуемым для апа( из массива). Как же я попотел, сегодня на работу не пойду.
примечание - если число целое, сначала умножить на 100 потом делить на 666
зы. почитал выше ага уже споткнулся об это
зачем приводить туда-сюда типы если все равно нужен инт?
vs code
вроде ксамариан был. но я его разок попробовал и удалил нахуй
Можно пиратить, только они обновляют защиту примерно раз в месяц-два и приходится изьебываться. Раньше пользовался утилитой, которая чистила реестр и можно было раз в месяц брать себе фри триал, спустя время заебался и переехал на лицензию, не жалею ни капли
Да и за платно. Месяц посидел на райдере, чёт вообще не зашло. Может просто за годы привык к студии, хз.
sublime text с соотвтетствующими расширениями
>уваки, я ненавижу visual studio
Дебил, что ли? Студия это самое замечательно, что выпускали майки.
Есть ещё круче это visual studio Code, это вообще маст хев и годнота.
Кайфовая штука, но не обновляется сейчас(
легче, быстрее, нет автокомплита для юнити функций
Не ругайся на меня, плиз!
У меня visual studio тормозит, а vscode, там нужно плугины всякие и настройки
Carasique
Без ООП даже не суйся, ибо дальше hello world не уйдешь. Открывай сайт майкрософт и учи справку по с# от корки до корки.
Ку. Единственное что тебе надо для создание своей игры это смотреть туториалы на ютубе.
Прям гуглишь как сделать к примеру гоночки в юньке, смотришь видосик, качаешь ассеты, повторяешь, и чуть позже сам можешь лепить что душе угодно.
технически это будет одна и та же операция, только вместо ссылки на объект источник в стек будет ложиться this. разве что предполагается что значения будут меняться и тебе нужно именно старое значение. ну и для удобства можно ввести локальную переменую в методе. что-то вроде что бы не писать каждый раз
SomeCashedComponent.SomeField
раз написать
var value = SomeCashedComponent.SomeField;
и юзать валуе. я бы мог сказать что технически операций меньше, так как сразу берется валуе, но фактически компилятор и сам это оптимизирует вводя локальную переменную в подобном случае
Excel + word хватает за голову для всего.
У меня в скрипте плеера было больше сотни полей
отвязать объект от префаба - пкм на нем в иерархии. собственно обычно предполагается что префаб - образец, посему изменения применяются ко всему
Спасибо
есть переменная x
public class Person
{
private int x = 8;
public int X
{ get {return x;}
set {x=value;} }
}
меняю ее значение из другого скрипта, таким образом:
Person p = new Person ();
p.X= 100; (в итоге она становится равной 100 и в первом скрипте и во втором, я проверял)
но потом я пытаюсь считать ее из третьего скрипта
Person p = new Person ();
Debug.Log(p.X);
и она по прежнему равна 8, что это за пиздец? как это работает, блеать на базовом уровне?
Ни разу не знаю юнити, но судя по контексту ты создаешь новый экземпляр класса у которого ессно будут дефолты.
Чеготты ожидал? Что приватное свойство будет шариться на все экземпляры объекта? Тогда тебе нужен аналог статик в похапе, не в курсе, если такое в юнитях.
new выделяет отдельный кусок памяти для класса и возвращает ссылку на него. далее все переменные типа Person которым присвоили эту ссылку будут иметь общие значения
var p = new Person(); //выделили первый кусок памяти
p.X = 100;
var a = p; // a.X == 100
p = new Person(); // выделили второй кусок памяти
p.X = 20; // a.X == 100 так как ссылается все еще на первый кусок
a = p; // теперь a.X = 20 так как тоже ссылается на второй кусок. первый кусок проебался так как никто на него не ссылается и будет удален когда у сборщика мусора дойдут руки
a.X = 50 // p.X тоже будет равно 50 так как оба ссылаются на один кусок памяти
посему правильный вариант будет получить в третьем скрипте ссылку на второй скрипт и оттуда получать именно ту персону что ты там создал.
//сериалазайбл что бы можно было менять значения в инспекоре юнити.
//{get;set;} автоматически создает скрытую приват переменную для вот таких простейших случаев.
// [field: SerializeField] делает эту переменную видной в инспекторе
[Seriazable] public class Person { [field: SerializeField]public int X {get;set;}}
public class Foo : MonoBehaviour : {
public Person person;
void Start(){
if(person == null) { person = new Person(); person.X = 100; }
}}
public class Bar : MonoBehaviour {
public Foo foo;
Person person;
void Udate() {
if(person == null) person = foo.person;
Debug.Log(person.X);
}}
в инспекторе вещает на обьект Foo и Bar. в поле Foo объекта, на котором Bar тащишь объект который Foo получаешь связь
new выделяет отдельный кусок памяти для класса и возвращает ссылку на него. далее все переменные типа Person которым присвоили эту ссылку будут иметь общие значения
var p = new Person(); //выделили первый кусок памяти
p.X = 100;
var a = p; // a.X == 100
p = new Person(); // выделили второй кусок памяти
p.X = 20; // a.X == 100 так как ссылается все еще на первый кусок
a = p; // теперь a.X = 20 так как тоже ссылается на второй кусок. первый кусок проебался так как никто на него не ссылается и будет удален когда у сборщика мусора дойдут руки
a.X = 50 // p.X тоже будет равно 50 так как оба ссылаются на один кусок памяти
посему правильный вариант будет получить в третьем скрипте ссылку на второй скрипт и оттуда получать именно ту персону что ты там создал.
//сериалазайбл что бы можно было менять значения в инспекоре юнити.
//{get;set;} автоматически создает скрытую приват переменную для вот таких простейших случаев.
// [field: SerializeField] делает эту переменную видной в инспекторе
[Seriazable] public class Person { [field: SerializeField]public int X {get;set;}}
public class Foo : MonoBehaviour : {
public Person person;
void Start(){
if(person == null) { person = new Person(); person.X = 100; }
}}
public class Bar : MonoBehaviour {
public Foo foo;
Person person;
void Udate() {
if(person == null) person = foo.person;
Debug.Log(person.X);
}}
в инспекторе вещает на обьект Foo и Bar. в поле Foo объекта, на котором Bar тащишь объект который Foo получаешь связь
>>49391
>>49399
Ах да. есть еще статики
public class Person {public static int X {get;set;}}
теперь к иксу нужно обращаться через название класса а не переменную Person.X и она будет общей для всех персон. var p = new Person(); p.X - не работает.
но это в общем случае считается очень хреновой практикой и не рекомендуется к использованию. можно использовать в случаях если тебе надо хранить информацию общую для всего класса а не его экземпляра
бинарная сериализация. json/xml платформо независимы и хороши для ручной правки. причем медленее. все это нахер не надо для сейвов.
так мне как раз надо наоборот, чтобы никак, кроме как из кода, они не редактировались. Так мне бы и плеер префс хватило
Бля, там бред какой-то произошел, вчера все сделал, ВСЕ ПРОТЕСТИРОВАЛ, думаю круто, скомпилировал проект и закрыл. Сегодня открываю а там эта бредятина, просто один из ведущих скриптов перестал нахуй работать.
>один из скриптов тупо перестал выполняться
Отдебажил? С объектом всё в порядке? Попробуй создать пустой объект и на него прикрепить
Объект мейн камера, работает нормально. Единственное, что я заметил, это то что у некоторых скриптов на ней нет галочки активации/дезактивации. У меня там около 5 скриптов, на 2 галочка есть на остальных (в том числе нерабочем) нет.
>хреновой практикой и не рекомендуется к использованию. можно использовать в случаях если тебе надо хранить информацию общую для всего класса а не его экземпляра
в том то и прикол. что все называют статитки хреновой практикой и при этом не дают внятного ответа на банальный вопрос, как изменить переменную в другом скрипте, чтобы эта переменная реально изменилась в том самом классе где она лежит, а не в экземпляре который нахуй не нужен по сути.
То есть у тебя на пустом объекте висит скрипт со скажем debug.log("test") в апдейте и не работает. Ты уверен, что названия не перепутал? Для надежности зайди в скрипт через объект
>посему правильный вариант будет получить в третьем скрипте ссылку на второй скрипт и оттуда получать именно ту персону что ты там создал.
пиздец костыль же, разве нет? неужели нет способа менять переменную в самом классе, чтобы она РЕАЛЬНО там менялась, кроме как вернуться к статикам, которые все хуесосят и у них есть минусы, это да
это же настолько примитивная задача, что я просто в ахуе от отсутствия ее реализации
>неужели нет способа менять переменную в самом классе
Что ты имеешь в виду, говоря "в самом классе"? Класс - это шаблон, по которому создаётся твой объект (экземпляр класса). В примере, который ты изначально показал - у тебя два не связанных между собой экземпляра класса. Можно передать ссылку на первый экземпляр, вместо того, чтобы создавать новый, тогда это будет один и тот же объект. Либо статики - тогда экземпляр или его поле существует в единственном виде.
мимодругойанон
>>49444
суть в том что такой проблемы не стоит. всё. ты берешь экземпляр класса и меняешь там переменную. классы и нужны ради экземпляров. кому нахуй нужна программа которая может работать только с 1 объектом? вот у тебя игрок например. он как бе один. почему бы его не сделать статиком? а потому что вылазит мультиплеера у тебя все на статиках. и ты просто не можешь сделать 2 игрока не заводя второй статический класс ровно с тем же функционалом и дублируя всю логику которая работает с игроком что бы она работала с двумя, тремя, сотней игроков. и этот пример скорее исключение. как правило у тебя множество сущностей даже одинаковых но со своими данными. например позиция объекта на экране. или хп врага. их бессмысленно делать общими.
собственно статики допускаются для заведомо общих свойств класса - например счетчик экземпляров класса для генерации уникальной идентификатора. повсеместно используется в том же юнити для всяких "менеджеров" которые рулят игрой, заворачивая их в синглтоны
Я тебя понял, спасибо
Но у меня еще есть вопрос по реализации:
Допустим у меня есть простой скрипт с огромной кучей переменных, к этим переменным периодически обращаются самые разные скрипты, чтобы получить значение некоторых переменных и иногда изменить их(изменить, значит реально изменить, т.е. следующее обращение к этой переменной из любого другого скрипта будет выдавать новое значение этой переменной).
Реально ли это сделать без использования статик переменных, у которых есть неприятная особенность не откатываться к исходным значениям при закрытии сцены в юнити? Т.е. при начале новой игры, их приходится откатывать в авейке к исходным значениям, что пиздец как не удобно из-за их большого количества
>То есть у тебя на пустом объекте висит скрипт со скажем debug.log("test") в апдейте и не работает.
Да, именно так.
Причем что сейчас заметил. У меня этот неработающий скрипт наследует от другого, в котором есть метод, устанавливающий одну хуйню. Так вот этот неработающий скрипт работает ровно до того момента, когда я этот метод из родителя вызываю.
спасибо более-менее ясно, но у меня более практическая задача - здесь ее описал. >>49457
получается придется ебаться с кучей статиков, т.к. вменяемой передачи значений переменных между кучей скриптов в юнити не существует, добавлять их друг к другу в публичные объекты не вариант, т.к. их овердохуя
самый простой вариант. упомянутый синглтон.
public class SettingManager : MonoBehaviour {
private static shared;
public static Shared {
get { return shared; }
public int Score;
public int SizeX;
public int SizeY;
private void Awake() { shared = this; }
}
ну и установи порядок выполнения ему в свойствах проекта пораньше
все теперь ты можешь повесить на объект на сцене и использовать из других скриптов SettingManager.Shared.Score;
причем (так это не полноценный синглтон) он удаляется при выгрузке сцены посему при следующей загрузке значения сбросятся на установленные
>неработающий скрипт работает ровно
Таки он работает.
Предположу, что тот метод ломает скрипт. Попробуй вызвать метод через try и в catch выводи в логи ошибку
ты случайно его не скрыл при наследовании?
спасибо, анон, помог
Неделю назад добавил в проект Facepunch.Steamworks весом в 14 мегабайт, подключил в пару скриптов несколько библиотек из него.. И проект с 800 мегабайт сразу стал весить 1350. Пиздец какой-то, как это происходит вообще?!
Почему, когда я нажимаю "Select Material", выбирается папка, в котором этот материал?
первый же запрос в гугле по amplitude gain unity redactor
https://forum.unity.com/threads/changing-cinemachine-cirtual-camera-noise-values-with-c-script.490137/
скажи, поридж, почему вы такие тупые, ленивые ушлепки?
Пиздец ты тугой, ссылку на объект передай туда где требуется с ним что-то делать, алсо зачем тебеивообще ооп, если ты собрался считывать и записывать значение напрямую?
Ооп ради ооп?
Не позорься. Используй ОБС
Я для кого капсом и жирным шрифтом выделил, что я работаю с FREELOOK камерой, а не с обычной?
>ссылку на объект передай туда где требуется с ним что-то делать
так и делаю
>зачем тебеивообще ооп
просто стало интересно, как оно должно быть по уму
какая хуй разница какая у тебя камера. если все эти параметры регулируются по одной методике
По уму, переменные внутри класса юзаются лишь классом и его потомками, на крайняк. А все взаимодействеи идет через методы класса. В эти пориджевые геттеры и сеттеры.
Там ТРИ нойза. Каждый на своём риге.
Через CinemachineFreeLook.Orbit. нельзя, нет в орбите такого компонента, как CinemachineBasicMultiChannelPerlin, я пробовал.
Не знаешь - не лезь, пожалуйста
есть, пишешь в скрипте
public GameObject zalupa;
суешь туда инспекторе текст и все. тоже самое с кнопками и картинками
Раз в пять секунд, например.
Да я так и делаю, но костыль же. Что за бред то, галочка вкл/выкл на всех этих кнопках в инспекторе есть, а и кода до нее не добраться.
суть в том, что это не костыль, т.к. они тоже объекты (с включенными компонентами текст, имейдж и т.п.). так что все логично
Но сам поход через одно место. Получается если мне нужно управлять 4 кнопками менюшки, придется пихать уже 8 элементов в канвас, по отдельному геймобъекту для каждой кнопки.
Лежит в Application.persistentDataPath, зашифрован в бинарном формате по симметричному алгоритму блочного шифрования и сжат в GZip
При старте добавляй их в ивенЛист с передачей id при вызове. id = номеру геймобекта, который нужно выключить.
cinemachineFreeLook.GetRig(0).GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>() и там меняй, что хочешь
Передавай в GetRig 0, 1, 2, чтобы получать доступ к разным ригам.
Отлично, спасибо
запусти параллельно 5-10 таких процессов в update, если не тормозит, то все норм.
Если каждый раз читать и расшифровывать из файла - будет жопа, если держать расшифрованную копию в памяти и сравнивать с ней - то норм. Ну или можно асинхронно всё это делать.
Есть enabled на компонентах
public int damge = 100; // ?
Потом обновил приложение и сохранения поехали нахуй. Обновилось вместе уже сохраненные данными, как будто я в бандл плауерпрефс залил. Даже если полностью очистить кэш и все данные приложения, после чего удалить его с телефона и скачать заново с плеймаркета, оно будет с сохраненным прогрессом.
Но, это все на одном телефоне, на другом скачивается из маркета без сохранений, как и должно быть. Где мой телефон хранит эти данные? Я пробовал очищать кэш, все данные, перезагружаться, и тд, один хуй качаю из плеймаркета игру с прогрессом.
А что с ним не так?
Не могу нагуглить ничего по этому поводу
Прочитал это гавно, не берите. Автор полный козёл, даёт примеры по платным и ассетам котрых нет в сторе. Всё поверхностно и однобоко, в конце получается игра где один персонаж может убивать мобов, всё млять.
можно только когда проект запущен, это для отладки. иначе в скрипте правь
(Stat) - означает тип поля, это какой-то енам или класс, число ты туда при всём желании не запишешь из редактора.
Ещё есть частая ошибка новчика, когда пытаешься менять значения в редакторе выделяя прямо файл скрипта - не делай так. Нужно в префабе или сцене на какой-то объект добавить скрипт, и уже там в редакторе менять значения и сохранять их в префаб/скрипт.
RTFM!
> On Android, PlayerPrefs are stored in /data/data/pkg-name/shared_prefs/pkg-name.v2.playerprefs.xml. Unity stores PlayerPrefs data on the device, in SharedPreferences. C#, JavaScript, Android Java and native code can all access the PlayerPrefs data.
https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
Да ты не понял нихуя, я удалил все от приложения же с телефона. Но в общем я разобрался где они сохранялись внезапно на гугл диске в резервной копии телефона, из-за android backup хуйни
> Какие туторы помогут лучше разобраться в интерфейсе?
https://learn.unity.com/project/roll-a-ball
>Какие книги стоит почитать что бы научиться кодить хотя бы как быдло?
Unity в действии. Мультиплатформенная разработка на C#
ну и вопрос - есть ли где бесплатно взять вот этот курс за тыщу долларов?
https://game.courses/game-architecture/?ref=15&utm_source=yt&utm_medium=desc&utm_campaign=mot
Спасибо за наводку на книгу, прочту на досуге то есть прямо сейчас.
Насчёт ссылки, есть что то подобное на расеянском языке, так как я в английском практически ноль.
>так как я в английском практически ноль.
Тогда начни геймдев с изучения английского, хотя бы чтобы читать мог, серьезно, даже по юнити искать что-то на русском - боль
Unity в действии. Мультиплатформенная разработка на C#
Пришлось брать очередное unity полное руководство от Корнилова(книга гавно походу, взял только из-за бомбермена в 3д) и Разработка игр на Unity за 24 часа от Майка Гейга(очень на неё надеюсь именно уроки по юнити), короче как прочитаю - отпишусь.
А по юнити думаю проще всего так: изучаешь основы C# прям основы, чтобы условия и циклы писать мог потом выбираешь простой жанр который хочешь сделать например раннер или платформер без излишеств и гуглишь "как сделать %жанрнейм% на юнити". Сначала делаешь все по туториалу, как более менее разберешься, начинаешь добавлять что-то свое
Та нахуй тебе это? Берёшь и качаешь книгу с тырнетов. Так принципиально, чтоб книга реальная была? На палочку положить? Нахой оно надо.
Пускай хотя бы до классов дойдёт, ибо важно знать как сценарии между собой действуют. Чтоб можно было сразу с начала накатить синглтон static public ScriptName Script; (Уже в awake) = this; и раздать всем подписочки за 500 рублей в месяц.
Есть ли где структурированные материалы по архитектуре, а не советы отдельные?
создай ивент и подпишись на него из другого скрипта. Погугли, там не особо сложно
Как пересилить себя и просто говнокодить игру? Я уже столько разных идей и проектов забросил из-за этого. Мог бы уже хоть пару игрулек для портфолио высрать, но нет же, надо сидеть и дрочить велосипеды и думать что мой код кто-то будет читать и использовать.
Проблема в том что у тебя нет стимула НЕ говнокодить. Тебе нужна команда и тогда у тебя будет стимул использовать нормальную архитектуру чтобы другой разраб мог нормально свои фичи подливать. покажи кстати игрушки свои
Легко гуглится
https://answers.unity.com/questions/128747/detect-face-of-cube-clicked.html
Выглядит так себе, конечно, но если сюда подставить - работает
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.transform.name == "Central cube")
{
print(GetHitFace(hit));
}
}
}
Про дрочь на архитектуру... Хотел обсудить с аноном проект https://github.com/UnityTechnologies/open-project-1
Вот запарились юнитеки за архитектуру, во многом благодаря запросу от сообщества. Получилась объемная система со своими эвентами через скриптабл обжекты, стейт машина игрока, которую нужно через редактор настраивать... И мне это кажется всё лишним и неудобным. Хотя анонам которые хотят побольше "архитектуры" может и понравится.
Я такие же системы обычно делаю, а потом забрасываю проект т.к. хочется сделать сложную игру, а контент 1 я тянуть не хочу.
Нормально написано, хотя элементы говнокода проскакивают.
Главное бездумно не копировать куски оттуда, конечно оно будет неудобным, если ты делаешь условного бомбермена.
У меня чуть другая проблема, я кликаю очень далеко от куба, поэтому все что я придумал, это два рэйкаста. Но все равно спасибо, это поможет для второго.
А что именно обновил?
Если стороннюю либу то там очень легко все что угодно может пойти не так, 100% решение это удалить эту рекламу в ноль и заного поставить новую версию.
Например у меня с кешем проблем было много, могут появлятся дубликаты манифеста (а тебе нужно их смерджить в 1 файл).
В общем контекста мало что там у тебя
Забей. Юнити не сохранил ключ приложения из адмоб, при том ничего мне об это не сказал. Оказалось это и есть причина.
>огут появлятся дубликаты манифеста (а тебе нужно их смерджить в 1 файл).
>В общем контекста мало что там у тебя
Можешь подробнее про это рассказать? Что за манифест, где он лежит, как сделать его в одном экземпляре.
Говорят переключение сцен в плей моде сильно медленнее чем в билде, попробуй в билде сначала проверить.
У меня наоборот, в билде медленнее
manifest.json (если я правильно помню)
в нем описываются настройки андроид приложения и его права. у меня была проблема когда несколько плагинов при билде должны смерджить все настройки в 1 манифест, но вместо этого я не мог найти пропавший файл либо создавались manifest.json и manifest(1).json и из-за этого ничего не работало.
Как я уже сказал полная переустановка всех плагинов помогает, а апдейт версий может сработать, а может и нет.
>>50765
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html
Еще добавь перед LoadYourAsyncScene какую-нибудь анимацию, переход, компонент загрузки как в PS/Xbox,
После asyncLoad.isDone добавь еще 1 переход т.к. в этот момент у тебя должно уже быть 2 сцены.
Короче старайся и удачи, лол.
Я уже горю! Я привык, что при выборе чего либо в Inspector, это подсвечивается и в Project. Но теперь этого нет!
Лучше используй этот тег в твиттере
Гугл адсенс. В любом случае для мобильных игр без вложения какой-то суммы в пиар ничего путного не выйдет, если эта игра не жля портфолио, конечно, но тогда зачем вообще ее пиарить?
Зачем дрочить на архитектеру, если ты не делаешь проект уровня гта5?
Отлично! Решение найдено б - надо было просто пересоздать проект.
спасибо
Создай в нем поле "тайлмап" и в инспекторе передаешь, как пример. Всё остальное, что нужно, по аналогии.
А в чем разница тогда между этим способом и просто префабом? Все равно же придется делать сотню пребафов уже созданных уровней чтобы передать их в скриптаблобжект. Или я туплю?
Нормальная тема, главное научись всякие общие менеджеры грузить и не выгружать при смене сцен.
На дваче либо сутками не отвечают, либо вообще не отвечают
Я просто реально офигел с этого, всегда писал в апдейтах по несколько раз что-нибудь типа trasform.position... Я думал что оно уже закешировано.
>GameObject.transform - это скрытая ловушка с тормозами
А чего скрытого, вроде же очевидно что оно геткомпонент вызывает. Как оно еще должно к компоненту обращаться?
>через конструктор
А как в метод этого класса передать массив с экземплярами другого класса?
Public void int(Classname[ ] classname)()
{
}
>А чего скрытого, вроде же очевидно что оно геткомпонент вызывает
Я думал что это не свойство, а прямая ссылка на Transform.
Обычно, ты программист или кто?
Скриптаблобъект - это обычный класс а не какая-то магия. Сам скриптаблобжект можно или просто создать как любой класс через new, или установить в инспекторе юнити
Cпасибо, работает. Просто у меня, почему-то, не выходило так же сделать с классом, который находится внутри другого скрипта.
В вк есть конфа lazy gamedev
>>50972
Сакутин не врал 6 лет назад, 5 лет назад юнитеки начали её кешировать и сейчас её можно использовать.
>>50958
Scale для UI и для обычных 3D компонентов работает немного по разному.
Для UI лучше используй TextMeshPro для текста, а для текстур использовать Tile настройки, например sliced.
ну код показывай, ты бы спросил еще как жизнь эту жить блин, ничего же непонятно в твоем вопросе
Действительно, если стрельнуть по два снаряда в разные копии - они всё равно подохнут. А как понижать у одного врага?
врагом проверять какой коллайдер в него вошёл, и если это пуля то уменьшать здоровье
мимодругой
void Update() // вариант 1
{ if (b == 7 && j == true) { j = false;} }
void Update() // вариант 2
{ if (b == 7) { j = false; } }
Хуй знает, сравнение добавляет дорогие инструкции условного перехода, так что не всё так однозначно.
Если кто-то сталкивался с подобным, подскажите как зачинили пожалуйста.
в 2020/12f1 такая срань. Откатился в 2019/28f1 - там не воспроизводится.
Не понял тебя. PlayerPrefs на винде - это просто записи в реестре винды. Я не знаю тонкостей, но скорее всего и нет вовсе никакого файла в папке с твоим билдом.
На мобилках, ясное дело, все совершенно иначе, так как ОС совсем другая.
Я к тому что многие говорят что сохранятся в плауерпрефс это мол хуйня. На мобилках это просто файл в папке игры. Вот интересно что плохого в этом
Как безопасно редактировать уже импортированные в проект файлы?
Я думал что в .fbx просто пересохранять и все. Но хуй там, сегодня добавил одну простую сетку к модельке, даже не изменяя ничего старого в иерархии и не редактируя риг/веса и после реимпорта файла у меня моба малость перекосило. Его палец уехал в район подмышки, лол.
Как избежать подобного? Может, работать напрямую с .max файлом в папке проекта?
Софт для моделей у меня 3Ds Max 2017, Unity 2018 LTS.
Как и почему? В чем разница в скорости сохранять просто json например или тот же json в плауерпрефс?
как пишут аноны с других форумов - перфсы не очень хороши с точки зрения безопасного хранения сейвов\прогресса\etc
мимодругойанон
Кто нибудь может занимался php + mysql + unity?
Есть пару вопросов.
допустим есть таблица users.
Как выбрать случайного юезра и отправить в юнити?
Генерируешь случайное число,делаешь запрос на сервак, получаешь ответ от сервака с нужными тебе данными
понимаю, разве что генерироваться оно должно на сервере т.к. комп не знает количество строк.
Но я похоже в синтаксисе не шарю. Какие команды я тока не пробовал.
$user = mysqli_query($link, "SELECT * FROM `users` LIMIT 1");
echo $user;
Какого хера возращает пустую строку?
>комп не знает количество строк
В чём проблема тогда проблема делать запрос на получение количества строк с бд?
Вроде нашел - Append. Пиздец у модуля справка ебанутая. Пиздец капча уебищная, с 10 раза ввел верную.
Никто и не спорит
Как подсказки в монодевелоп включить? искал не нашёл...
Я сделал Scriptable Object и насоздавал его экземпляров, теперь мне надо хранить ссылки на них в некой коллекции, доступной статически во всей игре независимо от сцен. Я сразу подумал надо бы статический класс под это сделать, но статический не может быть MonoBehaviour, а если не делать его MonoBehaviour то и нельзя его на объект прицепить чтобы руками закидать все объекты в список в инспекторе. А если не делать статическим, то он не будет доступен статически, то есть надо будет руками ссылку на него всегда давать, а это пиздец.
Ох, ёбвашу мать. Действительно! Спасибо, анончик, получилось.
Скажи, а почему у Юнити такая странная ебанутая система скалирования? Показал на скриншотах.
И нет ли какого-то режима "только 2D", чтоб не пришлось ебаться с Z-осью ?
А хуй знает, я сам только недавно тут
По-хорошему у ЮИ элементов скейл должен быть всегда 1,1,1. Ты что-то делаешь не так. Не спеши делать свое, попроходи туториалы сперва.
Вот интересно, что же я делаю не так?
У меня есть курсы по Юнити, но там на 10 дней примерно делать 3D игры, чего я не очень хочу. Я довольно опытный кодер (бекендер на эликсире), поэтому пытаюсь разобраться самостоятельно. Были бы курсы по 2D Юнити только - смотрел бы за милую душу.
>туториалы сперва.
А есть нормальные краткие туторы по ui? Не говно типа "пишу инвентарь". А именно по любым ui - чтобы и про привязку и про разные разрешения экрана, и про верстку и т.д.
Просто я прогал на других языках, и нет времени читать толстые книженции или лекции.
Что-то уровня - массивы создают так, структуры инициализируют так, классы копируют так, наследование делают так и т.д. То есть без стопятсотлишних слов, но полностью покрыт весь шарп
Это чтобы распечатать на бумаге и держать перед глазами, а то пишу код игры, нужно какую-нибудь вещь сделать, приходится идти и гуглить, потому что я знаю как это должно работать, но не знаю как в шарпе это пишется (по началу приходилось гуглить даже создание одномерного массива в шарпе, потому что не мог понять как скобочки писать (привык их писать после имени переменной, а не как в шарпе после типа))
>и "C# for <language name> developer
Мне надо именно как шпаргалку - я не запомню от одного прочтения. Взять теже массивы - я их не мог писать не потому что не знал как. Знал, все равно пришлось много раз гуглить пока окончательно не привык.
Думал написать сам - даже взял https://www.tutorialspoint.com/csharp/csharp_quick_guide.htm из оп-поста... Но и там много лишнего словоблудия, да еще и неудобная навигация.. Устаю, мозг начинает жаловаться "ну ты же это знаешь, не надо это писать"
Приходи сюда да спрашивай что непонятно, вроде быстро отвечаем
Создай у префаба child, на этот child повешай модель с анимацией.
Это фишка юнити такая.
Еще анимируй всегда от координат 0,0,0 т.к. иначе тебе придется child элемент двигать на то расстояние, в котором ты анимировал.
Надеюсь понял
Мы тут индюки все сидим, а твоя задача звучит как ААА дрочь.
Возьми сплайн какой-нибудь из ассет-сторчика и поменяй под свои нужды я так и сделал.
Я ж сказал что. Скейл элементов интерфейса должен быть 1,1,1. Ты конечно можешь делать любой другой скейл, но это палки в колеса.
Ты наверное используешь не TextMeshProUI, а просто TextMeshPro. Первый нужен для интерфейса, второй для текста как объекта в игре.
Нет, я использую первый.
У меня все остальные элементы интерфейса в разных скейлах, начиная с главного канваса...
Вот поэтому скейлы и хуево использовать. Приведи все в порядок, начиная от канваса сделай везде скейл 1, лучше переделай, так будет проще. А чтобы растягивать вьюхи у них есть width height, или ставь им отступы.
да вот я уже заебался искать, ни один не предлагает что мне нужно
Ключевое слово тут API, просто делаешь специальный http запрос к нужному сервису и обычно получаешь json в ответ.
Пример api погоды: https://yandex.ru/dev/weather/
Альтернативный и ненадежный вариант скраппинг сайтов (site scrapping), лучше ищи api с нужным сервисом.
Я дал ссылку на апи яндекса, и только потом проччитал, что для использования в юнити оно скорее всего платное, но потренироваться можешь. Если что-то серьезное делать будешь, то думаю можно найти совсем бесплатные альтернативы.
Так ведь скейл от родительского контейнера зависит, нет?
Хорошо, попробую переделать, спасибо!
Хотя, не очень понимаю, как потом мне это помешает, ну да ладно.
Ты про SQL EventData или паттенр события/подписчик?
Если про sql - юнити умеет в асинхронный код, правда нужно быть акуратным (как и всегда, работая с асинхронностью).
В ассет сторчике есть бесплатные либы для работы с sql, можешь скачать что-нибудь.
Если про подписчиков - стандартное юнити решение через SendMessage не советую использовать т.к. оно медленно работает и если будешь его дергать в update - заметишь просадки FPS.
Я себе простенький класс написал и в своих "детях" использую такую систему:
void Awake(){
GameEvents<SpookEvent>.On(SpookEvent.EventId, OnPlayerWasSpooked);
}
void OnDestroy(){
GameEvents<SpookEvent>.Off(SpookEvent.EventId, OnPlayerWasSpooked);
}
Полет нормальный, через il2cpp тоже компилится как часы
Я про IPointerDownHandler, IPointerExitHandler и т.д. SQL EventDatа - это делегат EventHandler, работающий с базой данных?
>оно медленно работает
В интерфейсе нет апдейта, кроме 2х лерпов в хендлере скроллов.
Ещё фасадирование хорошо помогает в теории
Да, некоторые компоненты могут быть маркерами, но в целом тема неплохая.
Я писал что-то вроде своих монобехов, юзал для каждого класса контексты. В общем и целом, профита и не дало, зато (возможно) более оптимизировано и выглядит гораздо кошернее
Тип как код нужно писать
С - single object responsibility - т.е. 1 класс должен делать 1 вещь
другие буквы тоже можешь загуглить через solid
название файла должно совпадать с названием скрипта и пробелы лучше не использовать
Я не понял почему в юнити while постоянно зависают? Даже когда просто внутрь цикла засовую if else зависает нахер. Не работают &&
внутри условия while опять виснет, что за гамно?
Благодарю
Graphics Engineer. До этого работал только на дядю, а теперь хочу перекатиться в индюшатник. Сразу споткнулся о недостаок знаний о дженерик геймплэй программировании. При любом расширении геймплэй в ширь код очень быстро превращается в кашу. Туториалы на ютубе особо не помогают, там обычно всё упрощено до предела и показывается как сделать какую-то одну механику. Мож есть какие нибудь книжки в стиле "архитектура геймплэй", только не для начинающих, а для продолжающих?
Они говорят что у них это как-то само получается. Просто много писали. Я в принципе так-же учился, но я не хочу 5 лет писать геймплэй чтоб научится, хочу как-то побыстрее.
ну в теории система не позволит, собственно за этим мелкософт перенес в свое время бинарники в програмфайлс а настройки в профиль. но это такая, очень хлипенькая защита, снести не системный диск можно без проблем если ты не настраивал права а кто нахуй их дома настраивает?
используй Application.persistentDataPath как корень для игровых файлов. это в винде указывает на %userprofile%\AppData\LocalLow\<companyname>\<productname> в винде
лол ты серьезно? посчитай на пальцах что происходит при с == 3
Это копия, сохраненная 10 декабря 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.