Вы видите копию треда, сохраненную 19 января 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
------------------
Прошлый тред: >>449619 (OP)
Шапка: http://www.writeurl.com/publish/zukmrogwv45ptyuseyol
------------------
Официальный сайт: 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
yni : https://www.youtube.com/watch?v=gnkBKtnYeb8
Made With Unity 2D Games Showreel 2017: https://www.youtube.com/watch?v=NMUr2yNALhU
The Unity Awards 2017 Winners:
https://www.youtube.com/watch?v=8--xPOlY7kU
------------------------------------------------------------------
На 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 - это начать делать игру и по мере разработки гуглить непонятные моменты.
https://www.reddit.com/r/csharp/comments/6nfsjd/beginner_c_books/
>>56743
90% асинхронизма в Юнити это рутины.
Однако же в 2017.3 ввели Job System:
https://www.youtube.com/watch?v=AXUvnk7Jws4
однако параллелизация в юнити все-равно гавно
И какал тоже?
Win32Exception: ApplicationName='C:/AndroidSDK\tools\aapt.exe', CommandLine='package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg, Int32 retriesOnFailure)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
Win32Exception: ApplicationName='C:/AndroidSDK\tools\aapt.exe', CommandLine='package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg, Int32 retriesOnFailure)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
Так не то гуглишь, гугли как дебажить ошибу процесса компиляции дабы получить читаемый и вменяемый трейс, а не то, как решить именно это трабоу.
СЧам же видишь, что эта чушь нечитаема и ни о чем не говорит
У меня при билде под вебгл было что-то похожее, помог старый дедовский способ переустановил юньку и все sdk
Да никакой еще уровень. Доделываю свой первый топ-даун шутер (начал по тутору с офф.сайта, потом понял что к чему и продолжил сам). Cейчас доделаю, и буду пилить какую-нибудь штуку для мобилки (хочу ознакомиться с 2D и особенностями разработки под телефоны. Потом попробую что-нибудь с онлайном поковырять). Как я изучаю: ставлю цель, что я хочу прикрутить к игре следующим, потом ищу что-то в API либо просто гуглю. В общем, это такой мой план на следующие пару месяцев.
>>56738
Мне очень помогла книжка c# player's guide. Все предельно просто. Позволила буквально за пару недель понять основы ООП, учитывая, что все, что я знал о программировании до этого это html-теги. Т.е. ничего.
Алсо, у меня вопрос. Где можно посмотреть ГРАМОТНЫЙ код? Как я понимаю, задача программиста не только в том, чтобы все работало, но и чтобы все было хорошо написано, и в случае чего быстро фиксилось, и не только написавшим. Просто хочу не потом это исправлять, а сразу учиться писать хорошо. Есть какие-нибудь уроки по этому мастерству?
(как комментить, обзывать переменные/классы, все такое)
C# assebly декомпиляться на ура, тот же dnSpy
Бери любой релизнутый проект, декомпиль и смотри что к чему
> Где можно посмотреть ГРАМОТНЫЙ код?
Где-то у меня был мем про то, что чувак понимает, что он теперь самый настоящий погромист, а того самого идеального кода не существует. И код, который он пишет, менее умелые люди берут в пример.
Он имеет ввиду common practices
Представь себе ты работаешь в коллективе из 20 кодеров. Твой коммент "эта та самая хуйнявка из наследного класса" будет охуенным брейнфаком для них
>Рекомендую обмазаться автоматическими ревьюверами, они знатно будут тыкать тебя в говно твой код. Типа codacy что нибудь
Спасибо, попробую эту штуку.
>>56783
>common practices
Во, то что надо.
https://en.wikipedia.org/wiki/Coding_conventions
Изучал и писал на Python, перекатился теперь на JavaScript и потихоньку изучаю Unity. Просмотрел несколько туториалов (Space Shooter и 2D roguelike если быть совсем точным), изучаю сейчас общее руководство по скриптингу и потихоньку практикуюсь с простыми задачами в самом движке.
В общем, можете накидать советов мудрых за щеку? Очень хотелось бы знать не прогадал ли с выбором языка, и нет ли у JS каких-нибудь минусов по сравнению с Шарпом на Unity? К тому же, обнаружил что туториалы по Unity 9по-крайней мере самые попадающиеся на глаза) в основном просвещенны максимально простым платформерам и топ-даун шутеркам в лучшем случае. Где можно посмотреть какие-нибудь более углубленные проекты или посвященные другим жанрам, кроме парочки старых туториалов по 3d-стратегиям на YouTube?
Ну, и просто напоследок - с насколько тупыми вопросами можно обращаться в тред? Пока что изучаю в одиночку, но боюсь во многих местах я действую с изрядным костылизмом в самых простых вещах, но не знаю куда с такой мелочью обращаться за помощью.
Если не ошибаюсь, тот же новый Job System, обмазанный по сто раз, в новых версиях 2017.2-3 - пока в полной мере только для шарпа.
JS же удобнее, если для мобильных платформ делаешь, там будет единая структура кода, в том числе и внешнего
> не прогадал ли с выбором языка
Я видел дохуя туторов по шарпу и ниодного по JS.
> Где можно посмотреть какие-нибудь более углубленные проекты или посвященные другим жанрам
Мне казалось, чувак с ником Burg Zerg Arcade делал какую-то более-менее полноценную RPG.
Официальные туторы по Unity заточены больше под реализацию конкретных механик. Советую посмотреть live сессии, потому что там материал поинтереснее и фичи идут уровнем выше, т.е. это уже не настройка камеры и движения игрока, это реализация способностей и оружий, например.
> боюсь во многих местах я действую с изрядным костылизмом в самых простых вещах
Похуй. Пиши как можешь, но не забывай про гугл. Потом все равно найдешь более изящное решение, прокачаешь навык. Опять же, смотри Live сессии, там помимо того, что грамотно написан код, тебе еще и объясняют, почему лучше писать вот так.
>В общем, можете накидать советов мудрых
Первый совет - забудь про "js" (в юнити не стандартный жс, а какая-то похожая скриптопараша). Все нормальные туторы, советы, ответы даны для шарпа.
Есть две переменные, int score и int waveCount.
Нужно, чтобы через каждые 300 score, waveCount повышалась на единичку.
Т.е.
0 0
300 1
600 2
900 3
1200 4
ИТД
Да, я совсем тупой.
Cпасибо. Сделал.
Это ему не поможет, ему нужно обновить waveCount соответсвенно текущему значению score, а не ловить именно 300, 600 и т.п. Мб у него score инкрементится по разным значениям, + 35, + 150 и т.п. деля на 300 он не только получит текущую фазу, если roundDown, но и, в случае с float, отеосительный остаток до следущей фазы, если нужно там шкалу отображать
Да, уже обратил внимание. Параллельно учу JS на Кодакадемии и непрерывно проигрывал с того во что язык превратили в движке. Что ж, к счастью в туториалах по скриптингу неплохой материал собран, надеюсь его хватит. Да и Шилдз где-то лежал.
>>56817
>Официальные туторы по Unity заточены больше под реализацию конкретных механик
Так-то ведь хорошо, но я уже сталкиваюсь с тем что остро нехватает некоторых аспектов. Например ни в одном из туториалов не нашел хороших примеров работы с камерами - везде она просто прибита к месту и максимум объясняется что означают её параметры настройки. Пришлось скачивать сборную солянку из стандартных ассетов чтобы посмотреть какие варианты реализованы там со всеми полагающими перемещениями и настройками видам. Я так понимаю не стоит стесняться и в будущем таскать ассеты и смотреть как они работают чтобы велосипеды не творить?
>Я так понимаю не стоит стесняться и в будущем таскать ассеты и смотреть как они работают чтобы велосипеды не творить?
Assetwhoring стандарт для Unity девелопинга. Собсно, Unity тем и популярен, что куча ассетов и за тебя уде все написано, просто, блять, в лего играй и составляй игру мечты.
За это же Unity и не любят, впрочем, патрицианы с UE или более серьезных движков.
>ничего работать не будет.
http://store.steampowered.com/tag/en/Indie/
работает еще как, весь Стим СТор в дерьме
1280x720, 0:58
Да брось. Вот никогда не понимал этих претензий к переполненности стим стора. Вы что, против капитализма чтоли? Чем больше товара на полках, тем больше среди них попадается хороших вещей. Т.е. из 1000 игр будет 100 хороших. А из 100 игр будет 10 хороших (ну ладно, 30). Но все равно, 100>30.
А то, что искать надо, ну а хули. Можно и поискать. Почему никто не жалуется, что в день публикуется под тысячу книг? Каждый может найти то, что хочет.
>А то, что искать надо, ну а хули. Можно и поискать
А ещё найдутся хитрые продавцы, которые будут товар проталкивать всеми силами. И будет дохуя никому не нужной рекламы к слову, согласно исследованиям, люди банально не видят всплывающую и контекстную рекламу на страницах. Приучились игнорировать вспышки Вот и зачем зря силы тратить сначала на заполнение сверх меры, а затем пропихивание и конкуренцию?
https://msdn.microsoft.com/ru-ru/library/system.reflection(v=vs.110).aspx?f=255&MSPPError=-2147217396
https://stackoverflow.com/questions/3101577/what-is-reflection-in-c-what-are-the-benefit-how-to-use-it-to-get-benifit
По сути, как переводится, так и понимается. Отражение. Например, через reflection ты можешь получить тип переменной по ее имени в строковом формате и т.п.
>И почему он такой медленный, как пишут?
Ну тут нужно глубоко копать
https://stackoverflow.com/questions/771524/how-slow-is-reflection
Так пусть проталкивают. Не против, если кто-то зарабатывает свою копеечку на дураках. Но зато если я захочу найти во что поиграть, я точно найду. Конечно, есть тренды, и триплэй текстовый квест ты не получишь. Но просто качественный найдешь легко. Как и вообще что угодно.
>Но зато если я захочу найти во что поиграть, я точно найду
Не найдёшь. В этом-то и вся суть, об этом исследования и говорят.
Проверка на nullcheck - первое, чему должен научиться C# кодер
Тем более, когда речь о Unity. Там аж два типа null когда conditioned
Ну хуй знает. Я вот сейчас захотел поиграть в игру про летающий спиннер в космосе, нарисованную одноруким раковым ребенком дауном. И что думаешь, не смог я найти такую игру?
Конечно смог: http://store.steampowered .com/app/745510/Fidget_Spinner_In_Space/
Не знаю с чего я проиграл больше - с того что эта игра существует, или с того что в списке "похожие товары" первая же ссылка ведет на новый Ассасинс крид.
Тайна раскрыта
>И почему он такой медленный, как пишут?
Грубо говоря, обычный код обращается по цифровым ссылкам, а рефлекшен сначала ищет ссылку по символьному имени, потом использует
https://www.youtube.com/watch?v=8mol-WPnstY&t=459s
В этом видео ещё элементы из yni на превью
Да они задолбали, даже на тестовых сценах меньше сотни объектов.
Что если я хочу от 1к до 10к сложных юнитов и объектов на сцене, с анимацией, физикой, аи. Это же пиздец как лагает.
Даже без графена, потому что 4 ядра да и то, если повезёт. Почему вычисления на gpu не перенесут? Или я чего-то не знаю (знаю про physx).
private int score;
public int Score
{
get
{
return score;
}
set
{
score = value;
waveCount = Mathf.FloorToInt(score);
}
}
Делай так
/300 забыл
Ну это же пиздец, а есть привязка объектов к границам камеры какая-нибудь? НАпример мне в камеру 16:9 надо засунуть 14x25 спрайтов, и без сетки пиздец не удобно работать над дизайном уровней, нахуя она вообще нужна тогда, если даже под границы камеры не подстраивается
Не понял что для тебя "размер сетки", но в ортографической камере покрути Size, может это то, что тебе нужно.
>в ортографической камере
Это где? Напиши по английски расположение или заскринь пожалуйста
Сетку ту и имею, что там за размер юнита и отвечает, просто она не вмещается ровно в область камеры, а мне нужно чтобы всё чётенько было
> Как прекратить задавать настолько тупые вопросы, до которых сам додумываешься через минуту
https://ru.wikipedia.org/wiki/Метод_утёнка
Если полотенце будет с принтом стилизированной буквы U - то сразу вытру ноги.
> хуле волноваться
Тут смотря на кого попадёшь. В прошлом или позапрошлом треде ананас рассказывал как его или его товарища на собеседовании обоссали за foreach, мол, труЪ-посоны так не делают, надо через for прогонять.
Обоссали, наверное, потому как в старой Unity был баг, когда foreach в heap срал, его починили в 5.3.x. Какие другие причины могут быть - не вижу.
Ошибся, 5.5.0.f3
https://forum.unity.com/threads/is-there-a-better-and-cleaner-way-then-foreach-c.451228/
Абсолютно ничего плохого в foreach нет, это лучший метод лупить через тот же словарь и им подобные. На уровне компиляции кода foreach банально будет превращен в enumenator iterator, это виртуально одно и то же.
> 5.5.0.f3
Хм, ебашил через форич ещё со времён царя Гороха и даже не замечал что он серит.
Да и хрен с ним.
Это чисто баг Юнити.
>>56934
Спасибо, я чёт и не углядел.
Слушайте, а где почитать мануал, как сделать возможность менять разрешение графики в опциях игры. Например я сделал игру в 5:3 (400x240), а мне надо чтобы при выборе опции могло делаться в 16:9 (1920x1080), при таком раскладе кратно не получится увеличить, надо чтобы графика немножко растянулась в ширину, а в высоту например чтобы просто лишнее скрылось, например черная полоска, которая была в 5:3
Мне бы мануал, или может кто так подскажет, как это делается, две разные камеры надо или как, но если разные камеры, то графика не растянется, на канвас натягивать спрайты? не очень удобно при дизайне уровней
Анон, а как лучше сделать набор уровней для моей игрушки? Ну то есть допустим я сделал сцену игровое поле там, фишки, башенки, врагов, написал скрипты - вот мой уровень. Для каждого уровня понадобится ведь новая сцена? А для каждой сцены вновь создавать фишки-башенки-врагов и писать скрипты? Или можно как-то единоразово описать геймобжекты и их поведение, а потом как-то лишь прописать их расположение для каждого из уровней?
Можно уровень генерить, можно листать статичные.
Тебе изначально необходимо понять что такое сцена. Это набор геймобджектов и их компонентов в иерархии.
Все ресурсы проекта могут быть заюзаны хоть в первой сцене, хоть в десятой, хоть у чёрта в залупе.
Блядь, я почему-то думал, что сцена выступает так же и контейнером для использующихся в ней ресурсов. Сейчас глянул, действительно, похуй вообще. Сцены отдельно - ресурсы отдельно.
Дублируй существующую и изменяй как новую, с новым сеттингом и т.п, сохраняй как scene2. Пожалуйста, загружай после scene1
Тут все зависит от нужды и контекста. Загрузка готовых сцен будет самым быстрым и дешевым способом. Генерация - самых дорогим (expensive)
> я почему-то думал, что сцена выступает так же и контейнером для использующихся в ней ресурсов
Если только начал, то это нормально, не парься.
Щито поделать, на то оно и мыло.
Лучше постпвь себе задачу и решай при помощи гугла. Анализируй решение, придумывай что-то свое. В видосиках порой неучи ебаные, поэтому нет лучше учения, чем самоучение.
Суть нарисовал на пике, надо толщины, отмеченные красными стрелками.
Все хуйня, давай заново.
Впредь не открывай юнити сразу после краша.
Вытаскивай сцену из бэкапа.
https://support.unity3d.com/hc/en-us/articles/210224803-Can-I-restore-my-unsaved-scene-after-Unity-crash-
Не мог бы ты пойти нахуй, если у тебя нет ответа на заданный вопрос? Заранее спасибо.
Не нервничай, сучечке, ты мне за работу не платил, дабы по твоим правилам отвечать. Никто тут тебе ничего не должен, запомни.
Так у тебя вся планета одним объектом? Ну ебни вторым проходом текстуру облаков с дисплейсментом по нормали, умноженной на высоту облаков и всякие uv искажения на нее захуяч. Зачем тебе ширину то считать?
Я бы вообще планету и облака разными объектами сделал, чтобы не ебаться с этим.
Причем тут subsurface scattering, он хочет отрезать наложеный шейдер правильно, как по маске
Если я всё правильно понял, то тебе хочется голубую обводку нарисовать, так?
Попробуй сделать так: 1 меш -- это планета. У неё рисуются фронт-фейсы, 2 меш -- это атмосфера. У неё рисуются только бэкфейсы.
Вот при затмении, на "поверхности" Луны это называется короной, а вот на "поверхности" атмосферы земли - есть свое имя.
Угла между нормалью и камерой достаточно чтобы правдоподобно зафейкать же.
Да, я уже почитал об этом, спасибо.
using System;
using UnityEngine.UI;
public class SliderExponential : Slider
{
private Func<float, float> getValueFunction = x => x;
private Func<float, float> setValueFunction = x => x;
public float expotentialValue
{
get
{
return getValueFunction(base.value);
}
set
{
base.value = setValueFunction(value);
}
}
public void setExpotential(Func<float, float> getValueFunction, Func<float, float> setValueFunction)
{
this.getValueFunction = getValueFunction;
this.setValueFunction = setValueFunction;
}
}
В Start() родителя нужно инициализировать slider.setExpotential(x => 0.1f x x, x => Mathf.Sqrt(x * 10f)); Вторая функция - обратная первой
using System;
using UnityEngine.UI;
public class SliderExponential : Slider
{
private Func<float, float> getValueFunction = x => x;
private Func<float, float> setValueFunction = x => x;
public float expotentialValue
{
get
{
return getValueFunction(base.value);
}
set
{
base.value = setValueFunction(value);
}
}
public void setExpotential(Func<float, float> getValueFunction, Func<float, float> setValueFunction)
{
this.getValueFunction = getValueFunction;
this.setValueFunction = setValueFunction;
}
}
В Start() родителя нужно инициализировать slider.setExpotential(x => 0.1f x x, x => Mathf.Sqrt(x * 10f)); Вторая функция - обратная первой
Кроме слова base которое тут не нужно. Ну и разметка проебалась: x => 0.1f УМНОЖЬ СУКА x УМНОЖЬ СУКА x
Лол, на самом деле base нужно, без него логика ломается. Охуительная практика для разработки движка - использовать поле value рядом с зарезервированным словом value, 10 юнити из 10
>>57231
Блять, ядумал там что-то серьезное:
https://msdn.microsoft.com/ru-ru/library/dwb5h52a(v=vs.110).aspx
Обычная практика очищать List/Dictionary перед использованием, если используется заново
Так про то и речь - оно заново не используется. В каждом экземпляре класса сначала создается List, потом очищается, а потом используется. Я этого не понимаю.
>Я этого не понимаю.
Потому как подобно 90% всех юнити-говнокодеров, ты сформировал мнение, мол, "C# простой, по сути - скриптовый язык, синтаксис выучил и все, готов в бой". Оно как бы так, однако знание простых основ целевого языка таки отсеяло бы 99% вопрос аналогично заданному.
Очистка даже новосозданного generic-массива а-ля List/Dictionary - просто common practices.
>Очистка даже новосозданного generic-массива а-ля List/Dictionary - просто common practices.
Пруфы то будут?
>>57262
Да пжалста, есть куча аргументов за и против:
https://www.dotnetperls.com/list-clear
^ List.Clear() используется без пояснения, автоматом - common practice
А вот тут поясняется:
https://stackoverflow.com/questions/1969993/is-it-better-to-return-null-or-empty-collection
А вот тут чувак, будучу модным круты contrarian? хайпит и зарабатывает brownie points, пихая "мэтров" (в его воображении) с горы и заявляя обратное:
https://www.codeproject.com/Articles/794448/Is-it-Really-Better-to-Return-an-Empty-List-Instea
То есть все как обычно. Выводы делайте сами.
Кул-стори тайм:
Лично я говнокодер и ничего этого не знал. Привычка клерить пустой, новосозданный лист просто сама по себе развилась. Потом, начав вникать в чужой код, заметил что многие кодеры делают то же самое. Само собой пришло понимание что к чему.
Это как использовать `internal` для класса или нет - каждый сам решает.
Братишка, ты вообще в курсе что твои ссылки не имеют отношения к тому что надо очищать список после создания? В первой, например, пишут что надо ИЛИ создавать новый список ИЛИ очищать
Возвращайся, как прочитаешь полностью и вникнешь.
Вообще, заметив в чужом коде кучу странных вещей, как тот же List.Clear(), у тебя должен резонно возникнуть вопрос - а заче--, ох, да вот жеж блять этот вопрос: >>57158
Ну пиздец, ты еще не только приведенные аргументы не читаешь, да и сам тред тоже. Ну и нахуй ты тогда?
Пиздец ты поехавший, приводит статьи на другие темы и еще чем то не доволен. Вообще в ахуе, сижу проигрываю с тебя а мог бы игры делать
А вот и подрыв. Вместо того что бы признать что ты обосрался и привел левые примеры в которых clear() и используется то всего то полтора раза
>Вместо того что бы признать что ты обосрался
Ты из /b/ сюда пришел, что ли? Этот старый прием там со школотой на ура работает, мол, заявить что кто-то обосрался и спровоцировать его на damage control.
Поясняю на пальцах: тут никто никому ничего не должен. Чувак задал вопрос, я ответил. Ответ не понравился - ну и ладно, никто не обязан его принимать, как святые скрижали.
Но если ты заявил, что он тебе не понравился потому как НЕПРАВИЛЬНЫЙ: будь добр, сучечке, доказать это и обосновать свою позицию.
ну это я, конечно, замахнулся, доказать ты ничего не сможешь и тупо в обратку пойдешь на перекидывание стрелок, ad hominem и strawman/
Но ведь доказывать СВОЕ утверждение должен был ты, но не смог, приведя ссылки на рандомные статьи. О чем я тебе и говорю, с сожалением и сочувствием так то обосраться прилюдно
>Но ведь доказывать СВОЕ утверждение должен был ты
Что я и сделал. Нужно понять простую вещь: тот факт, что ты не считаешь мое доказательство правильным или не понимаешь его - не значит, что оно не правильное.
А вот еще одна вещь: вместо того, что бы как глупый попугай повторять "ты не прав, ты не прав", мог бы уже привести правильное доказательство на поставленный оригинальный вопрос, которое, в сравнение с моим доказательством, было бы более весомым и актуальным и, соответственно, нивелировало мое.
Внимание, риторический вопрос: почему ты еще этого не сделал?
Отвечать не нужно.
>что ты не считаешь мое доказательство правильным или не понимаешь его - не значит, что оно не правильное.
>
Братишка, я говорю что ты рандомные статьи привел, которые никак не являются доказательством того что Очистка даже новосозданного generic-массива а-ля List/Dictionary - просто common practices
я прям как с пахомом тут сижу и доказываю очевидные вещи
Братишка, как я тебе приведу более правильные доказательства не существования common practice? Чайком тебя не ошпарить?
>как я тебе приведу более правильные доказательства не существования common practice?
Ну как я и сказал, ты будешь переводить стрелки. Мы же оба прекрасно понимаем, что тебе не нужно этого доказывать, тебе лишь нужно привести своё доказательство и пояснение на вопрос >>57158:
>Почему List.Clear() так используется.
Вот и все.
Само собой сделать ты этого не можешь, поэтому занимаешься goalposts moving - делая вид, что объект аргумента был совсем другой (как правило, в подобных случая выбирают более широкий топик, который в принципе доказан или опровергнут быть не может, ты выбрал адресацию common practices, хотя это НЕ было вопросом или субъектом его, это было частью моего ответа) и тем самым смещая линию обсуждения на другой топик.
>Очистка даже новосозданного generic-массива
>Should you clear a List to reuse it? Or should you just allocate a new List?
>https://stackoverflow.com/questions/1969993/is-it-better-to-return-null-or-empty-collection
>https://www.codeproject.com/Articles/794448/Is-it-Really-Better-to-Return-an-Empty-List-Instea
>Is it better to return null or empty collection?
Братишка, ты же поехавший, доказывай давай свое первоначальное утверждение Очистка даже новосозданного generic-массива а-ля List/Dictionary - просто common practices или уже признавай что обосрался, хуле ты.
Алсо, чайку попей https://ru.wikipedia.org/wiki/Чайник_Рассела
Короче почитал ваш срач, даже интересно стало. Скорее всего это сделано для удобства расширения. Никакого сакрального смысла в очищении листа после создания нет. Просто потом этот метод может вызываться чтобы ВНЕЗАПНО очистить aka инициализировать лист, что и подразумевается из его названия.
ps весь тутор я не читал, может там этот боард менеджер используется повторно, учитывая что initialize принимает номер сцены в качестве аргумента
>>Is it better to return null or empty collection?
Ну вот теперь перечитай и задумайся, где же тут ответ.
Альсо,
не был ответом на вопрос, это было частью ответа, в которой я показал пример аналогичного использования .Clear() (outside of Unity-sphere)
>>57295
Свой ответ на вопрос анона у тебя есть или нет?
Есть - выкладывай, нет - не отвечай.
>>57302
>может там этот боард менеджер используется повторно
ЕСЛИ используется повторно, то тогда ответ очевиден.
Однако же, это не умаляет оригинального вопроса, ибо я привел пример использования в контексте, где инстанция не реюзается.
И вообще, common practices - это не знак "правильного кода", не призывк действию, мол, если ты так не делаешь - то лопух. Понимайте это банально как "привычка" или "так принято". Вы не раз встретите еще аналогичные примеры в чужом коде,с опытом придет понимание и таких вопросов не будет.
А вообще, можно, блять, банально хотя бы Шарп по книге поучить, там уже ответы есть на подавляющее большинство подобных вопросов.
Херачу на ведро, проблема такая. После компиляции, на телефоне в одной сцене не отображается часть объектов, хотя во вкладках сценс и гейм все ок. Камера перспектив.
>Альсо,
>не был ответом на вопрос, это было частью ответа, в которой я показал пример аналогичного использования .Clear() (outside of Unity-sphere)
Ты - законченный дегенерат. Там clear используется для очистки существующего списка а не свежесозданного
> Правильно ли я понимаю, что можно зайти на assetstore.unity3d.com, выбрать любые ассеты с подписью FREE, нажать Add to Downloads, скачать их, вставить в свою игру
Да.
> заработать на ней 100к долларов
Нет.
Что да/нет? То, что я смогу физически их вставить в свою игру - я и так знаю. Интересует правовая сторона вопроса.
> Интересует правовая сторона вопроса
В ассетах пишут, даёт ли автор право использовать их в коммерческих целях.
> Или можно только те, в которых написано что разрешено?
Если пишут что разрешено — значит смело хуярь.
Обычно пишут "для ознакомления" или "можно смело пидорить и продавать".
Я вот прямо сейчас с десяток рандомных фриассетов открыл - нигде подобного не написано.
>In order to use Unity Asset Store you must be 18 years of age or older. On using the service you warrant that you have legal capacity to enter into the agreement.
Ну ахеть теперь. Если правда вскроется - мои игры удалят, а заработанные копейки потребуют вернуть?
Даунич, посмотри на реализацию clear и убедись, что твое common practice это жиденький обосрамс
https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
>мимокрокодил с гринтекстом вместо курсива
Плюсом даже коллайдер работает.
Кирюша, очень серьезный вопрос.
Какая практическая разница между использование CommandBuffer vs Graphics, в создании скрин-спейс ефектов.
Вообще какая между ними разница, мб командБуффер помогает как то по ресурсам выигрывать, я так понял это более низкоуровневая поебота?
У меня вот задача сделать "скрин спейс фог", под мобилки. Естественно, желательно мммаксимально дешево.
>мб командБуффер помогает как то по ресурсам выигрывать
Блять, вам профилирование на что? Сделай оба варианта и смотри, что будет быстрее в твоем случае.
Однозначного ответа нет
То есть ты задаёшь бесконечный цикл в одном из кадров, и удивляешься что следующий кадр не прорисовывается?
>То есть ты задаёшь бесконечный цикл в одном из кадров, и удивляешься что следующий кадр не прорисовывается?
Ниет жи, я пишу йоба-условие которое иногда содержит ошибки и уводит цикл в бесконечность.
>>57489
>break?
>Можно включить в цикл таймер и брейкать если занимает более чем n секунд/минут
Спасибо, но имел в виду что то встроенное в систему. Типа ставишь брекпойнт, и останавливаешь выполнение кода нафиг, выходя таким образом из бесконечности
>Типа ставишь брекпойнт, и останавливаешь выполнение кода нафиг, выходя таким образом из бесконечности
Ну брейкпоинты в дебагерре есть, однако откуда дебагерру знать, что ты в "неправильном" бесконечном цикле
Ну была же у них причина пилить два отдельных класса...ну выжеумные лучшечемгугл!
Алсо, заказал хозяина купить мне пикрил. Годное чтиво? На компе полистал, вроде все чинно: буквы в ряд, слова в предложения, да и по теме.
Дано 2D поле, на котором по заданными минимальным и максимальным float-координатам пространстве рандомно спавнится заданное количество звезд. Естественно, из-за float существует вероятность что звезды заспавнятся почти друг на друге.
Какие есть простые способы решить это, не вводя клетки в игру? Была идея решить через проверку коллизий, но сначала она не заработала в 2D режиме, а потом при рассуждениях я подумал что идея не выгорит (чтобы проверить коллизию нужно чтобы звезда заспавнилась, а значит ещё нужно будет её удалять если место неудачное, и по идее это будет тупо долго так вот спавнить-удалять пока не найдется подходящее место).
1. Сгенерируй рандомно точку
2. Для каждой звезды проверяй расстояние от этой точки. Если расстояние меньше размера звезды, то goto 1
Можешь все звезды, точнее, их координаты в список и затем по циклу проверяй каждый новый сгенеренный результат, если слишком близко, делай оффсет или пропускай.
Это медленно, но если операция нужна лишь однажды при загрузке - пойдет.
Нет, всерос не нужно подтверждать результатами ЕГЭ. Даже ДВИ сдавать не нужно, зачисление вне конкурса по диплому и аттестату.
>>57474
Вся суть олимпиад школьников в том, что теория не выходит за рамки школьной программы. Но всякие основы алгебры, аналитической геометрии, теории чисел и, в особенности, теории игр, дискретки и логики будут очень полезными. Причем оттуда необходимы не сами формулы и понятия, а именно методология рассуждений и поиска доказательств. Готовился просто, без задней мысли.
Ты пиши свою подпись под основным текстом, а не над, а то я на секунду подумал, что по твоей ссылке опровержение моих слов.
> что программирвоание на С# и Unity не особо улучшает тебя, как программиста
Конкретно это, в контексте Юнити и c# - правильно.
А вот это:
>потому что в играх логика гораздо сложнее
тупая генерализация, потому как игры могут быть написаны на любом другом языке и движке, в том числе и своем. Как пример: UE4 и С++ это вообще другая весовая категория.
https://null-code.ru/solution/41-vzaimodeystvie-s-dvizhuscheysya-platformoy-liftom.html
Типа всё, что контактирует с платформой, становится дочерним объектом, но код нихуя не работает,хз, я нуб, помогите
Бля отбой, перезагрузил студию и всё заработало. Заебало это кстати, что часто код не работает, потому что что-то юнити не улавливаетс первых разов
В Юнити слишком легко набраться плохих привычек, что может быть плохо если ты до Юнити ничего не знал. В противном случае ты будешь кодировать и плакать, плакать и кодировать, настолько Юнити в этом аспекте ужасно.
ООП в играх имеет принципиальные проблемы: http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ Data oriented design работает лучше.
Да не всегда, хз что за фигня
Синглетоны на каждый чих, сильное связывание, связывание через редактор, говнокод вообще, Invoke, SendMessage. Это краткий список. Юнити не предлагает тебе никакой архитектуры или структуры, тебе дают API, редактор, сборку и MonoBehaviour - ебись с этим всем сам конём. Получается совершенно лютые формы народного творчества в реальных играх.
Анрыл хотя бы предлагает более-менее чёткую структуру.
> радиус, при попадании в который этот объект за мной начинал бегать?
Тебе именно радиус вокруг объекта? Типа "если подошёл на метр, то хуё-моё", или, скажем так, "угол зрения"?
> Синглетоны на каждый чих
Но что в этом плохого, если смысл синглотона оправдан? Инвентарь у игрока почти всегда один, если не пилить тактикул, например.
Это ровно то что я и имею ввиду под "плохими привычками".
1. Ты привязываешься к конкретной реализации инвентаря. Слишком легко добавить ещё одну функцию которая вроде бы не совсем инвентарь но всё же связана. Инвентарь превращается в монстра делающего всё, включая кофе.
2. Через N месяцев код будет настолько запутанным и напичкан взаимными связями что каждое изменение где угодно будет что нибудь ломать в другом месте
Связи должны быть явными, хорошо видимыми, через прописанные интерфейсы и разрешаться через DI по возможности.
Извиняюсь за проёбанные окончания в словах.
>>57635
Мне надо, что бы когда я подошёл к этому объекту, он подлетел ко мне и дальше за мной летал, никак не взаимодействуя своим телом с другими объектами, пролетал сквозь всё подряд, но мог бы в будущем стрелять. Мы говорим о 2д.
>Типа "если подошёл на метр, то хуё-моё", или, скажем так, "угол зрения"?
Да можно и то и то. Я просто пока догадался только сделать колайдер с радиусом, и через онтриггеринтер оттдавать комнаду на привязку к герою, типа зашел в область коллайдера, начал действовать метод. Мне нужен способ без использования колайдера, если есть такой, ну или че с этим колайдером сделать, что бы он не баговал так. Мне пригодится потом в программировании врагов
> Да можно и то и то
Если чисто радиус, то бери расстояние от игрока до моба, нахер тебе онтриггерэнтер лишний раз дрочить?
А если угол зрения, то помимо радиуса проверяй угол между "зрением" моба и позицией игрока. Если угол меньше заданного (например, 45 градусов) и расстояние попадает в условие, то начинай за ним бегать под Бенни Хилла.
Можешь пример с кодом кинуть, как угол этот прописать, как это "зрение" представить?
Ну, например
Transform player;
float angleV = 45f;
float playerDist = 2f;
void Start () {
player = GameObject.Find ("Player").transform;
}
void Update () {
if (player) {
float dist = Vector3.Distance (transform.position, player.position);
Quaternion look = Quaternion.LookRotation (player.transform.position - transform.position);
float angle = Quaternion.Angle (transform.rotation, look);
if (angle <= angleV && dist <= playerDist) {
//тут уже пиши что тебе надо, побегушки за игроком, посвистывание и попёрдывание
}
}
}
В начале осени решил получить работу в GameDev. Читал учебники, срал в тредспасибо за ответы, экспериментировал с 2D. Хотел к новому году запилить небольшой но свой проект, написать немного документации и с этим добром обивать пороги студий дабы получить работу. Стремлюсь к должности Game Designer И вовсе не потому что я ничего не умею но хочу делать игры. Это взвешенное, осознанное решение основанное на самоанализе.
Две недели назад узнал об одном мероприятии, на котором, теоретически, меня могут схантить. В связи с этим, было принято решение запилить хоть что-то играбельное из экспериментальной каши.
Вопрос только один - с этим можно на что-то рассчитывать?
Скачать бесплатно, без регистрации и смс:
drive.google.com/file/d/1ypTcc28LPZOWTM0rB_8gN4JH4FbfTngK/view
Арт и звук из открытых источников. Ассеты не использовал (кроме частиц)
> Стремлюсь к должности Game Designer
чтобы стать гейдизайнером ты должен сперва сделать парочку годных игр в соло. таких кирюх с АХУИТЕЛЬНЫМИ ТОП ЕДЕЯМИ ЛУДШЕЙ ЕГРЫ различной степени всратости жопой жуй, спрева докажи что чего-то стоишь
>АХУИТЕЛЬНЫМИ ТОП ЕДЕЯМИ ЛУДШЕЙ ЕГРЫ
Это не идея охуительной игры. Это что-то полностью сделанное мною. Просто демонстрация того, что я что-то могу.
>ты должен сперва сделать парочку годных игр в соло
Довольно высокий порог, тебе не кажется?
важная должность - высокий порог. геймдизайнеры никому нахуй ненужны, если не понимают как делаются игры.
ты не понимать стремись, ты игры стремись делать. твое понимание бесполезно, в отличии от умения делать игры.
Ты сейчас описал не то, почему синглтон будет плохо использовать для инвентаря, ты описал ситуацию, в которой синглтон просто будет лежать в куче лапши. Плохому танцору и кривой пол мешать будет.
>>57646
> Скачать бесплатно, без регистрации и смс:
Больше смахивает на прототип, и дело даже не в графоне. Графон ничего так, вернул меня во время фанатских карт на SC:BW. Но геймплей слишком вялый.
В мобов стрелять скучно, особенно потому что их надо закликивать бесконечными снарядами. Пушки работают одинаково. Сосульки, я так понимаю, замедляют, но их не хочется использовать, потому что никакого преимущества это не дает: можно просто закликать противника рокетами/бутылками. Мобы слишком быстрые, но при этом легко кайтятся. Хилки с такой сложностью не имеют особого смысла.
В дизайне комнат нет никакого смысла, но на это похуй.
Я бы сделал больший упор на разнообразие оружия, чтобы игрок мог выбрать подходящий ему способ убийства мобов и добавил второстепенные оружия, которые бы замедляли, травили, поджигали мобов.
Плавное торможение стоит либо убрать, либо подкрепить большим количеством этих зеленых лазеров (я так понимаю, они наносят урон игроку), чтобы можно было в них легко въебаться по неосторожности.
Мобы впитывают слишком много урона, стоит сделать их опаснее. Либо превратить их в пушечное мясо, с которым ходят более-менее опасные противники. Соответственно, впускать игрока на арену со всякими бочками, укрытиями и т.п.
Не взлетает чёт. Если проверку на угол убераю, то реагирует, но не так как мне надо, я не пойму как сделать...если я отхожу от объекта, расстояние теряется и объект перестает за мной бегать, а мне надо, что бы он один раз активировался и постоянно действовал. Я пиздец чёт тупой, мозг не привык в таком ключе мыслить...
Используй булевую переменную, например followON.
Сцену открой, идиот.
>Что за DI?
Data Interface
У Unity есть похожий аддон под названием ECS - Entity System, он - data-driven
> Invoke, SendMessage
Не использовал это ни разу.
> Синглетоны на каждый чих
Не делаю их.
> Юнити не предлагает тебе никакой архитектуры или структуры
Я сам ее делаю.
Вообще, я почти все свожу к дефолтномуотносительно ооп.
Я нормален?
Намек понял, Кэп, паста для >>57646 incoming:
http://www.lizengland.com/blog/2014/04/the-door-problem/
Ну типа того. А если в мобильный ф2п проект, то нужно учиться тервер и как задизайнить микротранзакции в матч3
>Не использовал это ни разу.
а зря. иногда полезно. но обычно нет.
>Не делаю их.
интересно как же ты тогда гуи делаешь, например. че, даже менеджеров не делаешь? человек ли ты?
>Я нормален?
учитывая что ты не пользуешься какими-то инструментами по мутным причинам то не очень. дальше что? goto не использовать?
Я являюсь тимлидом с 4 юнити-погромистами в подчинении - они творят такую хуйю что волосы на жопе шевелятся. Всё что написал - не более чем краткий обзор типичного народного творчества.
>>57654
Типично где есть синглетоны там есть и лапша.
>>57663
>Что за DI?
Dependency Injection. Ты не пишешь "вот ты, да ты, дай мне инвентарь", ты пишешь "мне нужен инвентарь для работы" и система снаружи тебе его даёт и тебя не ебёт откуда он приехал.
>>57672
Это будет более expensive d Update.
Представь у тебя 100 врагов на каждом левеле.
OnTrigger лучше.
Касательно:
>Я это все сделал, но сделал через OnTriggerEnter и колижн бокс, всё круто, но только есть баг, колижнбокс хоть и триггер, но всё равно часто нажимая влево-вправо и подпрыгивая, я умудряюсь отталкиваться от него
>я умудряюсь отталкиваться от него
Дрочи Physical Layers и ignore mask
>Ты не пишешь "вот ты, да ты, дай мне инвентарь", ты пишешь "мне нужен инвентарь для работы" и система снаружи тебе его даёт и тебя не ебёт откуда он приехал.
То есть SendMessage/broadcastMessage аналог
лолка
>Я являюсь тимлидом с 4 юнити-погромистами в подчинении
да как бы грош цена твоим заявлениям после написанного.
>Ты не пишешь "вот ты, да ты, дай мне инвентарь", ты пишешь "мне нужен инвентарь для работы" и система снаружи тебе его даёт и тебя не ебёт откуда он приехал.
про синглтон рассказал во дела
Это просто такие базовые вещи, надо с ними раз и навсегда разобраться, помогите аноны
>про синглтон рассказал во дела
Ровно нет. DI и синглетоны это две противоположные вещи, pull vs push.
Знаю. И хочу как можно быстрее получать реальный боевой опыт, уйти в глубь специализации, а не дрочить индюшатину где ты на все руки мастер.
У меня есть все необходимые для этого качества. Мне просто нужно получить свою первую работу в GD.
Язык и эмпатия. Вот два главных инструмента геймдизайнера. Остальное посредственно.
Эмпатия не позволит тебе объективно проанализировать что именно делают игроки в игре.
Я серьезно.
В моем юнити нет никакой "системы снаружи", зато можно сделать GameManager, который будет выдавать ссылку на инвентарь, небо и аллаха.
Снаружи - снаружи конкретного объекта. Ты не делаешь MyAss.Instance.Poo(), у тебя есть некий IAss ass значение которому подставляет внешняя по отношению к объекту система. Потом ты пишешь ass.Poo() и тебе нет дела до того чья эта жопа, ни как устроена.
Азубка софтварного проектирования же, ну!
public Characteristics[] CharArray{
get{
return new Characteristics[]{ Strength, Agility... };
}
}
Если нужно часто обращаться к массиву, то можешь закешировать массив и изменять его при изменении одной из стат.
Ты хочешь о чем-то поспорить? С одной стороны, именно благодаря эмпатии я могу ставить себя на место разных типов игроков и анализировать что они делают. С другой стороны никто не отменял аналитику и психологию.
Ага.
А, это. Извечная проблема, понять людей, любящих говорить сложно об очевидный вещах.
Еще и с сажей пишет, тимлид мамкин.
> часто обращаться к массиву
Не, массив нужен чисто при генерации юнита, в остальных случаях нужны отдельные характеристики. Поэтому и возникла нужда в такой конструкции.
> [Serializable]
Это имеет какой-то дополнительный смысл кроме того, что я смогу править значения в редакторе?
> Characteristic - в struct
В чем соль? Типа референсы могут проебаться?
Не бейте, я нюфаг.
>Physical Layers и ignore mask
Повелосипедил посидел, так и не понял, как их использовать. Что мне нужно в объекте изменить, что бы он перестал контактировать с остальным говном?
Как из кода можно отключить box collider?
>Это имеет какой-то дополнительный смысл кроме того, что я смогу править значения в редакторе?
Гугли Unity data serializing/deserializing
>>57723
>В чем соль? Типа референсы могут проебаться?
Struct - value type.
>>57725
Зачем отключать? Выведи свои триггеры на отдельный phys layer и убери коллизию с layer игрока. ЕМНИП, в этом случае, OnTrigger все равно пашет.
но надо проверить
> Unity data serializing
Ага, насколько я понял, это нужно, для переноса данных между сценами, сессиями и т.п. Сделаю, как ты сказал, потом почитаю.
> Struct - value type.
Это-то я понимаю. Нагуглил вот эту статью: http://www.albahari.com/valuevsreftypes.aspx — встал вопрос:
Раз в игровую неделю будет обновляться список персонажей, которых можно нанять. Если использовать value type, это не будет раздувать используемую память? Или, если у меня NPC реализован через класс, то и его характеристики будут исчезать из памяти вместе с ним?
Я понимаю, что сейчас об этом нет особого смысла думать, пили прототип и не выебывайся, но мне уже просто любопытно, хочется же все ПО УМУ.
>Это-то я понимаю. Нагуглил вот эту статью: http://www.albahari.com/valuevsreftypes.aspx — встал вопрос:
>Раз в игровую неделю будет обновляться список персонажей, которых можно нанять. Если использовать value type, это не будет раздувать используемую память? Или, если у меня NPC реализован через класс, то и его характеристики будут исчезать из памяти вместе с ним?
>Я понимаю, что сейчас об этом нет особого смысла думать, пили прототип и не выебывайся, но мне уже просто любопытно, хочется же все ПО УМУ.
Тут нужно читать хендбуки по C# дабы понять какой, в твоем конкретном случае, вариант лучше.
Ладно. Я рад, что хотя бы конструкция с массивом на том скриншоте — это не вырвиглазный пиздец.
Да я смотрел это, тыкал эти галки, код всякий пробовал, нихуя не получается
Collider[] hitColliders = Physics.OverlapSphere(hit.point,trigger.CellSize*2);
if(hitColliders.ToList().Where(c=>Contains(obstacleLayer, c.gameObject.layer)).Count()==0)
{return true;}
else{return false;}
Как можно получить эти самые объекты?
>if(hitColliders.ToList().Where(c=>Contains(obstacleLayer, c.gameObject.layer)).Count()==0)
Хз по вопросу, но я более чем уверен, что простой for for массиву с кондишенами будет быстрее и будет генерировать меньше отходов, нежели залупистый linq
Хм, и правда. Только это какое-то кастыльное решение. И мне кажется капсюли будут больше жрать. Но попробую пока так.
>>57744
Оптимизатор, плиз. Есть сотни всякого говна, которое влияет на производительность больше, чем такие мелочи. У меня в колайдерах будет от силы объектов 5, я тут не бигдату ковыряю, чтобы писать лишние буквы ради пары наносекунд.
Спасибо, работает.
> кажется капсюли будут больше жрать
Твоими же словами:
> Есть сотни всякого говна, которое влияет на производительность больше, чем такие мелочи.
Ну да, это то самое.
Короче это бессмысленный спор.
По запросу linq performance:
>The best practice depends on what you need:
>Development speed and maintainability: LINQ
>Performance (according to profiling tools): manual code
Не зная что конкретные linq-функции творят за кадром можно так нехило какать в heap.
А если это чудо еще и в Update и аналогах - это будет пиздец.
Чем гексы рисуешь? Просто префаб с прозрачным материалом?
Это эдитор гуи, а вообще прожекторами.
Да.
Это пофиксить можно?
Z-fighting?
Впервые работаю с анимацией. Сделал быстренько модельку с анимацией в блендере, гружу в юнити. Все хорошо кроме правой руки. Рука и предплечье почему-то статичны, хотя в блендере анимация корректная. Причем правая ладонь двигается как надо, а рука и предплечье стоят на месте. Пробовал грузить и .blend файл, и экспортировать в .fbx. Наверняка кто-то сталкивался с таким. Как решить проблему?
Проблема в том, что их нельзя систематизировать: какие-то трейты повышают стат или два, какие-то влияют на последствия взаимодействия с другим персонажем, какие-то повышают качество той или иной работы.
Можно ли сократить количество говна, которое придется писать ручками? Потому что пока что я могу только взять базовый класс на пик1 и от него делать детей как на пик2. В голову приходит только прикручивание ScriptableObject, чтобы дублировать классы для уровней трейтов и прописывать в редакторе переменные, ну и сделать контейнер, из которого трейты можно будет доставать при генерации персонажа.
Scriptable обджекты выбирай, правда как вот это сделать - вопрос
>какие-то влияют на последствия взаимодействия с другим персонажем
Я вот собираюсь на скриптбл обджектах скоро систему скилов пилить, чуствую наебусь с логикой немало
>The Unity Awards 2017 Winners:
>[YouTube] The Unity Awards 2017 Winners[РАСКРЫТЬ]
эту красоту делают одиночки или студии в 20+ рыл с суммарным оытом 100+ лет?
>Made With Unity 2D Games Showreel 2017: [YouTube] Made With Unity 2D Games Showreel 2017[РАСКРЫТЬ]
эту красоту делают одиночки или студии в 20+ рыл с суммарным оытом 100+ лет?
а есть пример того, что делают 1-3 чела, анпример?
Подскажите код как сделать, через Random.insideUnitCircle хуита получается, она трясётся в одну какую-то сторону слишком
Сам навелосипедил короче:
public float elapsedTime = 0F;
public float perlinNoiseY = 0F;
public float perlinNoiseX = 0F;
public float multiplier = 4F;
private float shakeTimer;
private float shakeAmount;
private bool isShaking;
private Vector3 startPosition;
private void Start()
{
startPosition = transform.position;
isShaking = false;
}
private void Update()
{
ShakeDiractionRnd();
if (Input.GetButtonDown("Fire1")) ShakeCamera(0.2F, 1);
//Move();
}
public void ShakeCamera(float shakePwr, float shakeDur)
{
isShaking = true;
shakeAmount = shakePwr;
shakeTimer = shakeDur;
}
private void ShakeDiractionRnd()
{
if (shakeTimer >= 0)
{
Vector3 rnd = Random.insideUnitCircle 2;
elapsedTime = Time.time;
perlinNoiseX = Mathf.PerlinNoise(elapsedTime, 0);
perlinNoiseY = Mathf.PerlinNoise(elapsedTime, 0);
transform.position = startPosition + new Vector3(perlinNoiseX rnd.x shakeAmount, perlinNoiseY rnd.y * shakeAmount, transform.position.z);
shakeTimer -= Time.deltaTime;
}
else if (isShaking)
{
if (transform.position != startPosition) transform.position = Vector3.Lerp(transform.position, startPosition, 1.5F);
isShaking = false;
}
}
Только не получается камеру на startPosition плавно вернуть, не рабоатает Vector3.LerpюLerp, когда ставлю Time.deltaTime (сейчас там пока 1.5F, но не суть можно просто transform.position = startPosition написать):
f (transform.position != startPosition) transform.position = Vector3.Lerp(transform.position, startPosition, Time.deltaTime);
Сам навелосипедил короче:
public float elapsedTime = 0F;
public float perlinNoiseY = 0F;
public float perlinNoiseX = 0F;
public float multiplier = 4F;
private float shakeTimer;
private float shakeAmount;
private bool isShaking;
private Vector3 startPosition;
private void Start()
{
startPosition = transform.position;
isShaking = false;
}
private void Update()
{
ShakeDiractionRnd();
if (Input.GetButtonDown("Fire1")) ShakeCamera(0.2F, 1);
//Move();
}
public void ShakeCamera(float shakePwr, float shakeDur)
{
isShaking = true;
shakeAmount = shakePwr;
shakeTimer = shakeDur;
}
private void ShakeDiractionRnd()
{
if (shakeTimer >= 0)
{
Vector3 rnd = Random.insideUnitCircle 2;
elapsedTime = Time.time;
perlinNoiseX = Mathf.PerlinNoise(elapsedTime, 0);
perlinNoiseY = Mathf.PerlinNoise(elapsedTime, 0);
transform.position = startPosition + new Vector3(perlinNoiseX rnd.x shakeAmount, perlinNoiseY rnd.y * shakeAmount, transform.position.z);
shakeTimer -= Time.deltaTime;
}
else if (isShaking)
{
if (transform.position != startPosition) transform.position = Vector3.Lerp(transform.position, startPosition, 1.5F);
isShaking = false;
}
}
Только не получается камеру на startPosition плавно вернуть, не рабоатает Vector3.LerpюLerp, когда ставлю Time.deltaTime (сейчас там пока 1.5F, но не суть можно просто transform.position = startPosition написать):
f (transform.position != startPosition) transform.position = Vector3.Lerp(transform.position, startPosition, Time.deltaTime);
Чёт знаки проебались
>transform.position = startPosition + new Vector3(perlinNoiseX rnd.x shakeAmount, perlinNoiseY rnd.y shakeAmount, transform.position.z);
Лол, я просто ебанулся походу от недосыпа
Скажите, эта тряска так и делается с Random.insideUnitCircle и Mathf.PerlinNoise, или можно только из нойза рандом замутить?
Внутри лерпа твое 1.5F обрезается до 1,
а уже lerp(a, b, 1) = b, поэтому плавного перехода не будет. Поставь 0.5 к примеру
> Скажите, эта тряска так и делается с Random.insideUnitCircle и Mathf.PerlinNoise, или можно только из нойза рандом замутить?
В вики вот такой пример лежит. Посмотри, может чего увидишь, что можно в свой велосипед засунуть.
http://wiki.unity3d.com/index.php/Camera_Shake
Там большая часть все - уже неактуальна.
Спасибо!
>>57997
Да я так и делал как тут написано сначала, потом вычитал про PerlinNoise, с ним эффект лучше выглядит. Да ладно, сейчас работает как нужно и ок, просто я думал может попроще можно наговнокодить. Получается в моём примере если делать без Random.insideUnitCircle, то получается это нойз в определенный вектор делает движение, если указать x и y, то камера просто по диагонали качается и все, я не долго думая добавил рэндом и сам не понял, что сейчас происходит. Получается каждая ось получает рэндомную точку в радиусе и от этой точке летит по perlinNoise куда-нибудь.
Вся соль в том, что если, как из той вики, использовать только Random.insideUnitCircle, то камера трясётся не плавно и в одну сторону её уносит, а если добавить perlinNoise, тогда тресётся плавно и никуда её не уносит
Что скажете на счет визуального скриптинга, ктонибудь юзает?
Хотелось бы обмазаться ассетами или дополнениями там всякими и чисто мышкой элементарные вещи делать.
Мне например для UFPS надо сделать плавание, наверное это невидимый триггер где можно медленно летать с мыльным эффектом.
Как вы плавание делаете например?
> правда как вот это сделать
Проверять списки этих персонажей на наличие нужных трейтов, потом вызывать функцию из трейта.
Мне больше хотелось понять, как удобно складывать все трейты для конструкторов персонажей, но я проснулся и понял, что скорее всего мне нужно будет ручками сделать как минимум общую помойку всех трейтов. Максимум статичные списки для каждой категории и функцию, которая будет принимать на входе данные от магазина персонажей и выдавать персонажам нужные качества.
Чё-то всё-равно не работает. Хотя хз, всё вроде понятно же должно быть, откуда, куда и с какой скоростью, че ему надо
> else if (isShaking)
> {
> if (transform.position != startPosition) transform.position = Vector3.Lerp(transform.position, startPosition, t);
> else isShaking = false;
> }
Попробуй так
А нахуя?
По какому времени? Через n секунд/минут после начала игры? У тебя для этого есть Time.time и Time.realtimeSinceStartup
Заработало. Спасибо, бро.
Я второй месяц программирую, мозг не привык в таком ключе мыслить, туплю что-то совсем.
Нет, не через n секунд, а скорее, выполнять программу n секунд, заниматься всем остальным, сново выполнять программу n секунд. Как куратины, только куратины выполняют программу n шагов за любое время, а нужно, чтобы выполнялось любое количество шагов за время n.
Она ждет определенное время перед тем, как начачать выполняться, а нужно, чтобы она выполнялась определенное время
Да тут большая часть треда таких.
Я каждый раз берусь за какое-то новое говно, дропаю его. Начинаю новый проект — охуеваю от того, что задачи, которые ебали мне мозги в предыдущем проекте, теперь кажутся довольно простыми. Но у меня в основном проблема в том, что я, вместо того, чтобы написать хоть какое-то решение, хожу вокруг компухтера и думаю, как охуенно написать одну-две строчки кода.
Ёпта, в одной корутине запускай вэйтфорсекондс, после чего меняй флажок. В другой корутине делай проверку по флажку и ебошь свои вычисления.
Т.е. тебе нужно типа:
void DoStuff(float t)
{
float startTime = Time.time;
float endTime = startTime + t;
if (Time.time != endTime)
{
//происходит йоба
}
}
Сюда посмотри, тебе ж сказали про Time.time
https://docs.unity3d.com/ScriptReference/Time-time.html
Пример для кого написан?
Так не получится - фложок то будет проверяться после того, как вторая куратина свой цикл отработает. Это ничего не даст.
>>58053
В целом типа того, только оно не так работает. Вот куратина, например, делает конкретный кусочек ебы, потом в следующем кадре конкретный кусочек ебы. А мне нужно, что прогроамма делала конкретное время кусочек ебы (сколько успеет), потом в следующем кадре делает такой кусочек, какой успеет.
>>58057
Да это мне никак не поможет. Мне не оно нужно.
Да и float'ы вытащить из функции, чтобы просто в Update() это прокручивать.
Нихуя не понял. Можешь привести конкретный пример того, где это применимо. Я разве что могу это прилепить к постройке зданий в RTS.
Привет. Ты чё, охуел? Ты можешь нормально расписать задачу? А то вся твоя постановка вопроса пока звучит как "ну надо шоп кароч заебись было, но ваши советы - не советы".
Бля, ну у тебя же есть какая-то единица выполненной работы? Просто сохраняй состояние процесса и выполняй более простую операцию внутри функции выше, эта будет просто таймером.
> Программа, которая будет выполняться кусками по n секунд
Записываешь в переменную oldTime значение Time.time, тут же запускаешь программу на n секунд в цикле while (Time.time <= oldTime + n)
Блядь. Ну допустим у тебя есть класс Yoba с количеством выполненной работы
public class Yobas
{
int yobaCount;
float yobaReadiness;
}
В каком-нибудь MonoBehaviour:
public Yobas yobas = new Yobas();
float yobaEndTime;
void Update()
{
if (Input.GetKeyDown.YobaKey)
{
yobaEndTime = Time.time + 10;
}
if (Time.time < yobaEndTime)
{
AssembleYoba(yobas);
}
}
Yoba AssembleYoba(Yobas yobas)
{
yobas.yobaReadiness += 1;
if (yobas.yobaReadiness > 100)
{
yobas.yobaCount += 1;
yobas.yobaReadiness = 0;
}
}
Хули тут непонятного-то?
Блядь. Ну допустим у тебя есть класс Yoba с количеством выполненной работы
public class Yobas
{
int yobaCount;
float yobaReadiness;
}
В каком-нибудь MonoBehaviour:
public Yobas yobas = new Yobas();
float yobaEndTime;
void Update()
{
if (Input.GetKeyDown.YobaKey)
{
yobaEndTime = Time.time + 10;
}
if (Time.time < yobaEndTime)
{
AssembleYoba(yobas);
}
}
Yoba AssembleYoba(Yobas yobas)
{
yobas.yobaReadiness += 1;
if (yobas.yobaReadiness > 100)
{
yobas.yobaCount += 1;
yobas.yobaReadiness = 0;
}
}
Хули тут непонятного-то?
С какого хуя?
Допустим, с запуска прошло 10 секунд. На момент запуска программы имеем следующие значения:
Time.time = 10
OldTime = 10
Например, запускаем программу на 5 секунд.
Условие (Time.time <= oldTime + n) принимает вид (10 <= 15) и это самое "10" будет расти, пока через 5 секунд не достигнет значения "15" и условие перестанет выполняться.
Ты жопой-то не читай.
В main thread только если так программу структурировать.
То, как ты хочешь, проще по корутине сделать, дать ей заданный промежуток времени и обрубать, если время вышло.
Можешь даже пожировать, и сделать две корутины - одна дело выполняет, другая время чекает, стартуют одновременно, чекер гасит раба
Тогда хуй соси, даун. В основном ему потоке блядь. Ты сам то понимаешь что ты хочешь, дебил ебаный?
> столько шагов, сколько успеет
Оно у меня это и делает. Есть заданное время и нужный алгоритм. Сколько раз успел этот алгоритм повертеться за заданное время — столько и повертелся.
Это траллинг тупостью такой что ли? Тебе уже 10 раз всё объяснили.
И не лень же ему.
Я примерно знаю как делать сохранения во внешний файл, но ведь тут получается нужно сначала сохранить, а потом загрузить, а это слишком заморочено, у меня ведь игра не выключается.
Из того что знаю - Синглтон в виде гейм-менеджера. Это лучшее решение, или можно как-нибудь иначе это сделать, да так, чтобы скейлилось и на 100+ дверей?
Я в своей игре использую две сцены. Одна сцена Game, которая хранит различные объекты, интерфейс и тому подобное, другая сцена представляет уровень. Уровни постоянно сменяются, а Game остаётся.
Открыть UnityEditor.exe hex редактором и поправить парочку значений. В интернете найдешь.
Можно аддитивно подгружать и активировать сцену, тогда будет склейка из двух. Как только дверь за игроком схлопывается - выгружать старый левел
Ну, по OnTrigger2D получаешь глобальные координаты центров коллайдеров, получаешь их bounds и extends, транслируешь в world coordinates и вычисляешь точку столкновения
Делаю
void Start()
{
GetComponent<RectTransform>().localPosition = new Vector2(2f, -52f);
}
И его кидает хуй пойми куда. Я понимаю, что это как то связано с якорями и пивотами, но как? Как мне установить окно в определенное место? Допустим, якорь в верхнем левом углу и пивот (0,1)
Точняк. А то я давал глобальные коорды, их перехуячивало относительно якорей и получался какой то рандом.
Я не могу сообразить, я тупой, не понимаю куда и на что там время надо умножить, или как его замерить, я знаю про функции GetKeyDown и GetKeyUp или просто GetKey, прыжок знаю, как двумя способами сделать:
GetComponent<Rigidbody2D>().velocity = new Vector2(0, jumpForce);
или
GetComponent<Rigidbody2D>().AddForce(transform.up, ForceMode2D.Impulse)
Мне не нужна реалистичная физика, мне нужно ретро
Хотя нет, наверное нужна реалистичная, сейчас подумал, что хотел сделать, чтобы прыгнув в сторону, в воздухе нельзя было легко повернуться в другую сторону, ну всмысле повернуться можно, но импульс должен остаться в приложенном векторе изначально.
>прыгнув в сторону, импульс должен остаться в приложенном векторе
>нельзя было легко начать двигаться в воздхуе в другую сторону
Кстати как это сделать?
Сейчас прикрутил в Uodate гравитацию Physics2d.gravity поменял её по игрику и прыжок стал реалистичнее, если с ней поиграться, получается сейчас игрок быстро подпрыгивает, типа с импульсом, а падет медленне, получается реалистичнее. Но я до сих пор не пойму, как сделать зависимость высоты прыжка от продолжительности нажатия клавиши. Помоги добрый анон
Я в туториале глянул, вот тут:
https://www.youtube.com/watch?v=aYE-1cAjdew
Ну а как? Не смейтесь, я нуб, лучше посоветуйте, как сделать реалистичный прыжок самым достойным способом, и чтобы высота он t нажатия зависила
FixedUpdate() есть. А то в Update() у тебя физон от фреймрейта будет зависить, зашкварно.
И вообще странно это как-то: через гравитацию делать прыжки. Есть же rigidbody2D.
>FixedUpdate()
Да точно, не успел об этом подумать.
Я не по тутору делал, я от туда только изменение гравитации взял, а так он у меня с rigidbody прыгает:
GetComponent<Rigidbody2D>().AddForce(transform.up, ForceMode2D.Impulse). Но если делать только так, то он как-то не очень естесственно прыгает...или хз. Че просто массу ему поменять? Сейчас попробовал без измененной гравитации, вроде почти так же прыгает, упоролся я что ли. В любом случае, подскажите как сделать зависимость высоты прыжка от времени нажатия клавиши
public float ExtraJumpMultiplier = 0.5f; //доп. множитель прыжка, при макс. множителе игрок будет прыгать в 1.5 раза выше
public float ExtraJumpDelay = 0.5f; //время, за которое достигается макс множитель
private float jumpMultiplier;
//Player.FixedUpdate/Player.Update/шонибудь
if (Input.GetButtonUp("Jump")) Player.Jump(1 + jumpMultiplier); //если игрок отпустил кнопку, то прыгаем
if (Input.GetButton("Jump") && Player.IsGrounded) //увеличиваем множитель только если игрок на земле и кнопка прыжка удерживается
{
if (jumpMultiplier < ExtraJumpMultiplier) //если мы не достигли максимума
jumpMultiplier += ExtraJumpMultiplier Time.deltaTime / ExtraJumpDelay; //то увеличиваем множ.
else jumpMultiplier = ExtraJumpMultiplier;
}else jumpMultiplier = 0; // если игрок не на земле/не держит кнопку
//Player.Jump
float vel = Mathf.Sqrt(2 Physics2d.gravity.magnitude PlayerBaseHeight multiplier); //скорость для прыжка
//PlayerBaseHeight - начальная высота прыжка
// multiplier = 1 + jumpMultiplier
//(mv^2)/2 = mgh
// v^2/2 = gh
// v^2 = 2gh
// v = sqrt(2gh)
GetComponent<Rigidbody2D>().AddForce(transform.up * vel, ForceMode.VelocityChange);
> ExtraJumpMultiplier Time.deltaTime / ExtraJumpDelay; //то увеличиваем множ.
ExtraJumpMultiplier УМНОЖИТЬ Time.deltaTime / ExtraJumpDelay; //то увеличиваем множ.
> float vel = Mathf.Sqrt(2 Physics2d.gravity.magnitude PlayerBaseHeight multiplier); //скорость для прыжка
float vel = Mathf.Sqrt(2 УМНОЖИТЬ Physics2d.gravity.magnitude УМНОЖИТЬ PlayerBaseHeight multiplier); //скорость для прыжка
>458403
> if (Input.GetButtonUp("Jump")) Player.Jump(1 + jumpMultiplier); //если игрок отпустил кнопку, то прыгаем
> if (Input.GetButton("Jump") && Player.IsGrounded) //увеличиваем множитель только если игрок на земле и кнопка прыжка удерживается
> {
> if (jumpMultiplier < ExtraJumpMultiplier) //если мы не достигли максимума
> jumpMultiplier += ExtraJumpMultiplier Time.deltaTime / ExtraJumpDelay; //то увеличиваем множ.
> else jumpMultiplier = ExtraJumpMultiplier;
> }else jumpMultiplier = 0; // если игрок не на земле/не держит кнопку
Ну вот же, если игрок нажимает и сразу отпускает, то небольшой прыжок
А если нажмет, задержит на ExtraJumpDelay (0.5) секунд, то прыжок будет в 1 + ExtraJumpMultiplier (1.5) раз выше
Чё-то в этом коде хуй ногу сломит, не мог просто в 2D заставить кубик прыгать и его скрипт сюда залить? сам то пробовал, что получилось?
Можешь для 2D сделать с нуля и скрипт показать? Я не дорублюсь, у меня не взлетает чё-то
Че ты еще спизданешь блядь? Как что-то вообще может менять скорость без ускорения?
Без ускорения свободного падения, прикинь, можно просто плавно двигаться, у меня так и падало всё, но я в коде накосячил. Алсо, как менять глобальную гравитацию?
Я запек сетку, и она покрывает дорогу, как на первом пике. Но как только игра стартует, в консоль сыпятся ошибки со второго и третьего пика.
Ошибка с SetDestination вызывается на такой строке в коде:
navAgent.SetDestination(targetPoint);
Сталкивался ли кто с таким? Спавню ботов максимально близко к сетке, разница в 1 по оси OY. Не помогает.
>>58420
Вот, держи: https://hastebin.com/ecerijowev.cs
Чуть улучшил код, теперь проверка нажатий в update
Спасибо! Но ты похоже не так меня понял, мне то надо было чтобы игрок прыгал сразу по нажатию клавиши. я нажал и он прыгнул незамедлительно. Если я нажал быстро - прыгнул низко, нажал и подержал дольше - прыгнул выше
Можешь описать, чем мой код отличается от того, что тебе нужно? Я что-то туплю, так и не могу понять. Может, если ты напишешь различия, то я буду лучше понимать, что тебе нужно.
Shadow Tactics: Blades of the Shogun
По твоему скрипту, пока я держу клавишу нажатой, игрок стоит на месте. Отпускаю - прыгает. Держу не слишком долго, прыгает не высоко. Так?
По моему надо, что бы как только я нажал клавишу он сразу прыгал. И если я держал её не долго, то прыжок был бы низкий. Держал бы долго, прыжок достигал бы максимума и заканчивался.
Я так и сделал, но заказчику не понравилось, сказал: хуле машинки выезжают за пределы трассы, сделай навмеш мне.
Но я с этим уже разобрался, а вот с чем не разобрался, так это с тем, что машинки надо выталкивать с трассы, а навмеш строит невидимые стены вокруг себя. Ну и как такое сделать?
>По моему надо, что бы как только я нажал клавишу он сразу прыгал. И если я держал её не долго, то прыжок был бы низкий. Держал бы долго, прыжок достигал бы максимума и заканчивался.
Это блядь не прыжок уже управляемый полет
У тебя приыжок начинается сразу, а контроль длительности прыжка происходит потом
миммо
Это прыжок, просто его высота может регулироваться длительностью нажатия клавиши, но у него есть свой предел конечно. Блять в тысячи игр такой прыжок.
Кароч, прыгаешь сразу как нажал, потом, в полете, проверяешь если кнопка еще вжата то придаешь дополнительное ускорение прыжку, проверяя макс. предел
Бля. Чёт не представляю, как автомобили на навмеше делать. Физона же не будет. Или уже появился? Давно не глядел.
>то придаешь дополнительное ускорение прыжку, проверяя макс. предел
Спасибо кэп, я знаю как это работает, я не знаю, как это сделать, потому что я нуб.
Физон сам написал.
По сути все, что мне сейчас добавляет к сцене navmesh - это невидимые стены. А ИИ ботов работает из отдельного скрипта.
Хуя ты велосипедист. Проще было пофиксить езду по точкам. Ну тип едешь меж точками регулируя нажатие на педаль газа в зависимости от угла меж автомобилем и направлением к следующей точке.
А кто заказывает заниженные тонированные приоры? Ну так, любопытно.
Хороши ли туторы на сайте Unity для изучения всего этого дела с нуля? Программировать на С# немного умею.
Unity in Action полистай параллельно с этими туторами. А так можешь просто начать делать свой проект и попутно нагугливать нужные тебе уроки. Потом Live сессии зацени.
>Программировать на С# немного умею
Unity - это конструктор lego autism edition
Даже примитивные троглодиты могут сваять свою игру в Unity. Именно по этому 99% всех игр на данном движке - унылое гавно.
Потому как если ты честно серьезно начнешь делать "правильную" игру, ты поймешь что Юнити для таких усилиезатрат - дохлый выбор.
Мемесы с форчана — это круто, конечно, но нормальные люди не сидят в тредах по теме, которая им ненавистна.
> правильные игры
Ну это вообще пушка.
Нормальная такая пушка, когда твоя игра выдает 60fps и не заикается каждые пять секунд, как 101% unity-дерьма
>но нормальные люди не сидят в тредах по теме, которая им ненавистна.
Проецировали-проецировали да не выпроецировали.
Я не ненавижу Unity и мое личное отношение тут не причем, strawman'а не тягай. Я просто называю вещи своими вещами.
UNITYFAG'у НЕПРИЯТНО
Хуя you по english шпаришь)))
> когда твоя игра выдает 60fps и не заикается каждые пять секунд, как 101% unity-дерьма
Чего-то у Tyranny таких проблем не было. У Getting Over It, в который сейчас все играют, тоже. Может быть не стоит винить инструмент в том, что у людей кривые руки?
>Tyranny
Не особо интересовался ей
>Getting Over It
Жалобы видал и в стримах и на форуме.
У Cuphead, вон, assembly декомпильни - по всем правилам C# OOP написано, там вообще без пары фур бутылок не разберешься. А в результате - те же Unity-баги, что и от косого Васи с 125 синлетонами и "ГЕЙММЕНЕДЖЕРАМИ" блдж
Хуле там не разберёшь, придурок?
Там всё просто как три копейки. Зашёл и хоть перепедаливай половину кода. Ты 100% будешь знать, что навряд ли что-то сломаешь.
У меня сейчас на проекте сидят сишники упоротые, для которых копипатить код и хуярить всё пабликами -- норма. Из-за чего весь проект нестабилен и ломается даже от того, что ты логи выпилил.
>Потому как если ты честно серьезно начнешь делать "правильную" игру, ты поймешь что Юнити для таких усилиезатрат - дохлый выбор.
Свой движок то написал уже? А то юнити хуйня, тормозит и текстуры не яркие.
Перепилил код под свою задачу, но работает не так как надо, пока кнопка зажата, он постоянно прыгает, и работает это как-то криво, может на разную высоту подпрыгивать. Блджат, заебало, и в сети не могу найти, как сделать. Надо, чтобы было так:
1. зажал кнопку и держу - игрок прыгает до максимума, приземляется и стоит. Для того чтобы прыгнуть второй раз, надо отпустить клавишу и нажать ещё раз.
2. нажал кнопку быстро, например 0.5 сек, то игрок прыгнул не до максимума, приземлился и стоит ждёт, когда я отожму и еще раз нажму.
3. по сути нужна высота минимального и высота максимального прыжка, и возможность получаться высоту между этими значениями в зависимости от продолжительности нажатия на клавишу.
Ну и увеличение множителя прыжка должно быть конечно через Time.deltaTime, что бы на всех машинах прыгал одинаково при одинаковом времени нажатия клавиши.
Я говнокодил, говнокодил, и не наговнокодил. Unity боги, где вы? Я думал это тривиальная задача с которой уже все давно разобрались. С меня нефти
Непонятно только зачем ты приполз в наш уютный тред со своим беспруфным кукареканием?
Это опять тот поехавший, не обращай внимание.
Вроде сам справился
https://hastebin.com/inetupopik.cs
Хз, посмотрите, может можно ещё лучше сделать, если хотите конечно
Спасибо вот этому парню:
https://www.youtube.com/watch?v=qghDqO74I5M
Но мне нужен открытый мир, а не одна сцена. Мне нужна туева куча неписей и объектов, которые будут перемещаться по открытому миру.
Первое что пришло мне в голову, сделать просто огроменную сцену, но вангую это всё хуёво просадит производительность.
Второй вариант сделать мир из тучи сцен и расположенными в духе двумерного массива, проще говоря клеточкой и при подходе к границе подгружать следующую сцену. Вангую что будут загрузки при переходе от сцены к сцене.
Внимание вопрос, как сделать на юнити бесшовный отрытый мир типа ведьмака? Я смотрел примеры других разрабов, не всем это удалось, например у беседки в их "открытых мирах" постоянные загрузки при переходах в пещеры и дома, такое мне не надо.
В гта 5 самая оптимальная для меня система подгрузки лолдов на лету, такое можно сделать в юнити и есть ли готовые примеры? Я сам нашёл только создание огромной сцены, где школьник заставлял её готовыми ассетами деревьев и покрасил землю в зелёный цвет.
Видимо так в его представлении выглядит открытый мир. Ни неписей, ни понятное дело врагов он не добавил, только пустые декорации, и то подлагивало.
>(скопипастил) контроллер. Всё пиздатенько, уже платформер готов, добавить стрельбу и вот и шутер
Нихуя ты простой
Не реалистичный прыжок у тебя, если клавишу зажать, плеер подымается, как на лифте, без импульса, выглядит паршиво. А правильно было бы сделать так, если прыжок высокий, импульс толчка больше, если прыжок ниже, импульс толчка меньше, т.е. зависимость величины импульса должна быть от длительности удержания клавиши
В юнити такое сделать можно, но ты с таким подходом построения мира упрёшься в то, что у тебя float начнёт пидорасить в какой-то момент. точнее будет сказать так, что чем больше у тебя будет целая часть, тем сильнее float у тебя распидорасит, т.к. float не резиновый и очень быстро начинает терять точность
Поэтому тут надо строить систему варпов карты, чтобы ты далеко не уходил от цетра мировых координат.
мимо-ПРО-быдлодев
> зависимость величины импульса должна быть от длительности удержания клавиши
Сначала сказал, потом подумал. Я хуйню сморозил, импульс же в единую еденицу времени только применяется, сори
Ладно хуй с ним, пойду поковыряюсь ещё.
Нахуй бы не сходил
Мне 25, я просто тупой. Не могу сообразить, в коде еще плохо разбираюсь. Просто я бомблю в тред, запутался, и уже сам подумать не успеваю, что бред несу. Просто не могу сделать прыжок, таким как мне надо и всё. Хз в этом коде мне не всё понятно, как работает >458549 пытаюсь разобраться. Я не пойму, там сопротивление гравитации не логорифмически изменяется, пока клавишу держу? Смысл вот этого корня Mathf.Sqrt(2 • Gravity.magnitude • height) не пойму, с математикой туго
Формула кинетической энергии - E=(mv^2)/2, где m - масса, а v - скорость
Формула потенциальной энергии - E = mgh, где m - масса, g - ускорение свободного падения, а h - высота
При вертикальном прыжке в верхней точке они будут равны =>
mgh = (mv^2) / 2
Потом преобразовываем:
2mgh = mv^2
2gh = v^2
sqrt(2gh) = v
>При вертикальном прыжке в верхней точке они будут равны
Чет тупанул, при прыжке кинетическая энегрия переходит в потенциальную, а значит кинетическая энергия на старте будет равна потенциальной в верхней точке
Но почему по этому скрипту он всё равно прыгает без ускорения, т.е. я зажимаю клавишу, он как на лифите с равномерной скорость подымается, достигает верха и уже с ускорением падает. Получает скорость вверх при прыжке линейная. Или я что-то не так там выставил в мин. и макс. значении или ещё где? Надо чтобы скорость движения вверх и скорость падения были одинаковыми хотя бы.
Как сделать чтобы бокс 1x1 юнит подпрыгивал на 3 юнита вверх максимально, и на 1 юнит минимально, по этому скрипту >>58549, какие gravity scale выставить и прочее?
Как я понимаю более менее реалистичный прыжок, мы прыгаем например со скоростью 1.0 м/c и пока летим вверх наша скорость падает, потому что на нас действует сила притяжения, 0.8, 0.6, 0.4, 0.2 и при 0 мы зависаем не надолго в воздухе и начинаем падать -0.2, -0.4, -0.6, -0.8, -1
Сейчас, сколько скриптов я не перепробовал, всегда с этим проблемы, то оно и вверх и вниз с одинаковой скорость движется, то когда вверх с одинаковой. Помогите, я заебался, два дня уже мучаюсь. В этом скрипте >>58549 всё в порядке, есть то что мне нужно и я просто туплю и что-то не так там делаю? Или его надо подправить? Извините, заебал уже всех наверное
Всё равно смысл не доходит, зачем её так задавать надо, а не просто цифрой?
Короче хороший скрипт, спасибо! Это просто я долбоёб. Сейчас отрегулировал всё как надо.
В поле Gravity добавил коэффициент силы прыжка, поигрался с ним и с высотами BaseHeight и ExtraHeight, вроде годно получилось. Я просто сначала в самом риджидбади gravity scale начал крутить, чтобы скорость прыжка изменить и всё по пизде пошло, сейчас вроде норм.
Но меня не оставляет паранойя насчёт фпс, с разным фпс будет прыгать одинакового же? Мы же там на Time.deltaTime когда в прыжке умножаем, все ок же будет? Просто при начале прыжка не умножаем, но оно и не важно? Пиздец у меня каша в голове короче. Ладно, главное прыгает как надо теперь, но насчёт паранойи можешь меня успокоить?
Срыв покровов. Что правда не кошерно юзать Instantiate/Destroy и всё остальное, что там описано?
>Что правда не кошерно юзать Instantiate/Destroy
Да, это даже мануал на офф-сайте вещает.
Гугли unity object pooling
Но это касается частого юзания, раз в в N минут - несмертельно, если платформа не мобильная.
Ну вот тут они монетки дестроят например:
https://unity3d.com/ru/learn/tutorials/topics/2d-game-creation/creating-basic-platformer-game
Это вообще годный мануал? Посоветуйте что-нибудь актуально и самое годное для 2д платформера пожалуйста. Потому что после этой статьи >>58593 я понял, что даже некоторые сворованные мной платные мануалы, полная хуйня
>>58600
Я не дебил, я нуб. Просто мне в мануалах одно рассказывали, а на деле то совсем всё по другому, и похоже, что те ребята и документацию то сами не читали
Годных мануалов просто НЕТ.
Если ты реально планируешь запилить говномобильную игру - придется страдать год, вникая.
Где Time.deltaTime, там надо добавлять скорость к телу постепенно, поэтому и Time.deltaTime.Лучше заменить на Time.fixedDeltaTime, код в fixedUpdate же выполняется
Даже официальные мануалы не годные? Что это за хуйня такая, во что мне вникать то.
Объект будет через все клипаться, так что если ты не делаешь призраков, пиши через rigidbody.
Старайся юзать трансформ только для телепортации и прочая, например Dash, с заранее просчитанными рейкастом координатами
>>58621
Ну пиздец, во всех туторах так делают, ублюдки, даже в платных. и ещё много чего плохого, как я понял
И чё как в туторе надо? https://hastebin.com/aluhedicub.cs
Пиздец, такие базовые вещи, и с ними умудряются обосраться
> И чё как в туторе надо?
Ну да. Толкаешь rigidbody2d, спрайт притворяется, что он бежит.
> такие базовые вещи, и с ними умудряются обосраться
Да я вообще сторонюсь движка, пока делаю основную логику. Но я пилю экономический сим с РПГ элементами, тут можно и через консоль все важное отображать. С другой стороны, если ты делаешь сайдскроллер, тебе по большей части надо пилить карты или их генераторы, там особо выебываться не надо.
Вид сбоку, бежишь (обычно вправо) — экран за тобой двигается в сторону. Сайдскроллер, ну.
Лол, я прочёл как сайдколлайдер. Сейчас только заметил
Так что нельзя привязывать движение камеры за персонажем что ли? Надо двигать карту?
>С другой стороны, если ты делаешь сайдскроллер, тебе по большей части надо пилить карты или их генераторы, там особо выебываться не надо.
Ну, зависит от sidescroller'а. Если адвенчура-метроидвания, то левелы не обязательно генерить, некоторые ручные делают. Тут проще, можно логику подгонять под левел-дизайн и наоборот.
>>58665
>Так что нельзя привязывать движение камеры за персонажем что ли? Надо двигать карту?
Можно, в Hollow Knight вроде привязана.
>Можно, в Hollow Knight вроде привязана.
Ну её трансформом привязывать? Через Lerp красиво получается. Запугали этой производительностью, я теперь вообще боюсь что-либо делать, пока перед этим 100 раз не погуглив
Сам ты сука, что толку мне с этого профилирования, если для начала надо узнать, как правильно делать такие базовые вещи, как сраные перемещения объектов и прочее, что бы потом не переделывать.
Потому как профилирование покажет, кто где срет, в реальном времени, с зумом и запахами, и даже, если нужно, анализ кала сделает.
Тебе, пока ты прототип делаешь, несколько похуй на производительность должно быть.
>Тебе, пока ты прототип делаешь, несколько похуй на производительность должно быть.
Ага, блядь, а потом когда прототип написан выяснится, что переписывать придется дохуя, с костылями и //do not edit, it just works
>выяснится, что переписывать придется дохуя
ТУПАЯ CERF БЛЯТЬ
ТАК ГЕЙМДЕВ И РАБОТАЕТ АУТИСТ
НИКТО НЕ ПИШЕТ ИДЕАЛЬНЫЙ КОД СРАЗУ СУКА БЛЯТЬ
Заебал нахуй, или Ворды переставляй
Манямирок.
Без этого никак, братишка. Так рука и набивается.
Я свои самые первые проекты как вспомню, так аж передёргивает.
> выяснится, что переписывать придется дохуя
А ты как думал.
Нужно оптимизировать. Нужно вычитывать дохуя мануалов если ты хочешь продать свое говно. Все равно потом будешь одним глазом смотреть на профайлер, другим на игру.
Хотя вон симуляторы спиннеров выкладывают и нормально. Но это для хайпанувших.
Зачем переписывать, особенно физику, которую потом нельзя ни в коем случае менять, по крайней мере для моего 2д платформера это очень важно, камера и физика. Я не так давно вкатываюсь в тему конечно, и понимаю, что надо перелопатить кучу мануалов, но госпади, неужели нет такого руководства, которого вы не можете посоветовать? Как сделать норм физику и несколько базовых вещей, по всем правилам движка, в сраном 2д платфомере? Там не так уж много и надо, я же не скайрим пилить собрался.
Просто для меня стало открытием, что 90% всех советчиков и мануалов, особенно с ютуба, или с других сайтов(даже платные мануалы!) - некомпетентные пидорасы, впаривающие какую-то хуитку. Мол, о, заебись прыгает бегает стреляет, видали как легко? а оказываетя, что их говнокод хуй взлетит нормально на той же мобилке, или при большом проекте в десктоп. Никто не говорит про пулы, правильные иерархии, построение карты, даже как ебаную зелю сделать, все из боксов с отдельным колайдером на каждом, землю эту наклепают и пиздец, а если при этом сделать движение по горизонтали через эдфорс (о чем хуй кто из них слышал), а не через трансформ, как все уебки, то он начинает и скользить по этим боксам и втыкаться в швы и прочее, и никто про это не рассказывает, как делать такие базовые вещи, добавлять материалы, делать правильные колайдеры. Там блять на час разговоров то, просто изначально дать правильную информацию, как сделать бег, прыжок, передвижение объектов, статические объекты, добавление объектов и удаление их со сцены, смену сцен там и т.д. Нет блять, все занимаются какой-то дизенформацией, и даже в юнитевских мануалах какие-то противоречия сплошные, на уровне вот с платформы на платформу прыгает и заебись, монетки собирает. А те же монетки уебанские не через фабрику делают, а создают да дестроят, пидорасы. А потом Валентин говорит, ебать вы дауны, зачем так неправильно делаете?
Смотрел тут лекцию про оптимизацию, там пиздец косяки появляются просто из-за какой-нибудь одной строчки кода, но хуй кто об этом упомянет где. А у меня теперь хуй пойми что в голове, то нельзя, это нельзя, записали? ага вот это тоже нельзя, записали? А КАК БЛЯТЬ МОЖНО, скажи мне дядя? А иди ты нахуй с такими вопросам, отвечает дядя. И пиздец. Это вот этот дядя Валентин Пидорас из юнити технолоджис https://www.youtube.com/watch?v=LE4t37fY9rw
Порвался короче.
Зачем переписывать, особенно физику, которую потом нельзя ни в коем случае менять, по крайней мере для моего 2д платформера это очень важно, камера и физика. Я не так давно вкатываюсь в тему конечно, и понимаю, что надо перелопатить кучу мануалов, но госпади, неужели нет такого руководства, которого вы не можете посоветовать? Как сделать норм физику и несколько базовых вещей, по всем правилам движка, в сраном 2д платфомере? Там не так уж много и надо, я же не скайрим пилить собрался.
Просто для меня стало открытием, что 90% всех советчиков и мануалов, особенно с ютуба, или с других сайтов(даже платные мануалы!) - некомпетентные пидорасы, впаривающие какую-то хуитку. Мол, о, заебись прыгает бегает стреляет, видали как легко? а оказываетя, что их говнокод хуй взлетит нормально на той же мобилке, или при большом проекте в десктоп. Никто не говорит про пулы, правильные иерархии, построение карты, даже как ебаную зелю сделать, все из боксов с отдельным колайдером на каждом, землю эту наклепают и пиздец, а если при этом сделать движение по горизонтали через эдфорс (о чем хуй кто из них слышал), а не через трансформ, как все уебки, то он начинает и скользить по этим боксам и втыкаться в швы и прочее, и никто про это не рассказывает, как делать такие базовые вещи, добавлять материалы, делать правильные колайдеры. Там блять на час разговоров то, просто изначально дать правильную информацию, как сделать бег, прыжок, передвижение объектов, статические объекты, добавление объектов и удаление их со сцены, смену сцен там и т.д. Нет блять, все занимаются какой-то дизенформацией, и даже в юнитевских мануалах какие-то противоречия сплошные, на уровне вот с платформы на платформу прыгает и заебись, монетки собирает. А те же монетки уебанские не через фабрику делают, а создают да дестроят, пидорасы. А потом Валентин говорит, ебать вы дауны, зачем так неправильно делаете?
Смотрел тут лекцию про оптимизацию, там пиздец косяки появляются просто из-за какой-нибудь одной строчки кода, но хуй кто об этом упомянет где. А у меня теперь хуй пойми что в голове, то нельзя, это нельзя, записали? ага вот это тоже нельзя, записали? А КАК БЛЯТЬ МОЖНО, скажи мне дядя? А иди ты нахуй с такими вопросам, отвечает дядя. И пиздец. Это вот этот дядя Валентин Пидорас из юнити технолоджис https://www.youtube.com/watch?v=LE4t37fY9rw
Порвался короче.
> Порвался короче.
Добро пожаловать в мир современной разработки.
Для жопозаживления читай и не слушай ньюфань:
http://giant.pourri.ch/Graphics Programming Black Book/Graphics Programming Black Book.pdf
> 0% всех советчиков и мануалов, особенно с ютуба, или с других сайтов(даже платные мануалы!) - некомпетентные пидорасы, впаривающие какую-то хуитку
Блядь, ну а что ты хочешь. Умные дядьки не смотрят на такие руководства, они уже умные. Они ходят на GDC и делятся друг с другом идеями. А у нас на дне никто не знает, что такое хорошо, а что такое плохо. Вот люди и хавают говно с лопаты, причмокивают, и говорят: "Заебись, давай еще братиш". И ходят и рассказывают, как они охуенно потратили деньги на бесполезное говно такой прекрасный гайд.
> в юнитевских мануалах какие-то противоречия сплошные
В live сессиях такой хуйни не замечал. Напротив, если я в чем-то сомневаюсь, я просто иду смотреть стрим. Вот решил отвлечься от основных механик — голова нихуя не варит, когда ты 5 нужных конструкторов для одного класса собираешь — и сделать главное меню. Угадай, как я их запилил? Правильно: через сраный Instantiate(). Но потом я вспомнил, что есть VOD, в котором это все делали через SetActive(). И действительно так стало заебись.
Православно ли бросать спрайты в ui panel? Или игровые объекты отдельно, юай - отдельно?
И второй вопрос: в юнити чо правда нет гридвью контрола (не лэйаут)?
https://www.youtube.com/watch?v=hn9lkAua3Vk&list=PLX2vGYjWbI0SUWwVPCERK88Qw8hpjEGd8&index=2
Че вот в таким стримах хуйни не посоветуют?
>Как задать значение (например 0.1f) всем точкам RenderTexture? Допустим, канал R (или еще куда)
Причем это одноканальная текстура RenderTextureFormat.ARGBHalf
Если ты критикуешь реализацию, то я не понимаю, в чем проблема. Я особо не смотрел код, но я так понял, что здесь сделана простая физика, где предметы не вращаются хуй пойми как, а просто падают вниз, может быть толкаются игроком в сторону; у них нет инерции. Физика на уровне первого HL, короче, но для сайдскроллера в самый раз, к тому же оптимизация реально есть, ведь у тебя весь физон на кинематических телах, которые двигаются только так, как нужно тебе. Не просчитывается, опять же, инерция, центры тяжести, коробки не будут входить друг в друга и пидорасится. Они будут делать только то, что тебе нужно без лишних свистелок и перделок.
Слушай сюда, сынок.
Физику завести довольно-таки сложно как таковую, поэтому тут каждый педалится так как может. Посмотри сюда для настроя: https://youtu.be/NwPIoVW65pE
А потом смело в бой. Ну или не шибко смело.
мимо-ПРОбыдло-дев
>Циклом если хочешь поточечно
Но как, там же нет RenderTexture.SetPixel
И из Texture2D вроде нельзя копирнуть
надо быстро-быстро проверить не пересекает ли множество линий другое множество линий.
>Но как, там же нет RenderTexture.SetPixel
Бамп вопросу. Как ПРОЧЕСТЬ пиксель из RenderTexture
Вопрос: Есть не работающий скрипт, как заставить юнети его игнорировать?
Галочку с него сними. Или вовсе убери его со сцены. Нахуй он тебе там, если он не работающий?
Ну так пофикси. Может у тебя имя файла отличается от имени класса, вот он и ругается.
Спасибо бро, погляжу как время будет, работаешь по геймдеву?
А вот она https://github.com/MattRix/UnityDecompiled
Но многие методы вызываются из неуправляемого кода дизасембл которого я не нашел
А еще он неадекватно влияет на столкновения. Как батут отшвыривает игрока и дальше прет. Без навэйджента при столкновениях он сам отбрасывался.
Работаю.
>>58916
Легко!
Сначала создай Texture2D, а потом копирни RenderTexture туда. Пример: https://docs.unity3d.com/ScriptReference/RenderTexture-active.html
>>58953
Можешь декомпильнуть его сам, при помощи IDA. но боюсь, ты слишком молод, чтобы в ассемблерном коде ковыряться, даже если у тебя будут сигнатуры всех методов
>>58971
Вангую у тебя на геймобджекте и физон и навмеш агент. Короче, читай тут: https://docs.unity3d.com/Manual/nav-MixingComponents.html
мимо-ПРОбыло
Загружаю я из плейрпрефсов настройки звука и прочее говно, начинаю выставлять в опциях соответственно тогглы разные - тогглы вызывают прикрепленные к ним методы ончендж и получается ебаная лапша.
Решил путем наворачивания була isUISetup, слава богу все в один менеджер-синглетон прилетает.
Сталкивались с подобным? Кто как решал?
>
>>>458916
>Легко!
>Сначала создай Texture2D, а потом копирни RenderTexture туда. Пример: https://docs.unity3d.com/ScriptReference/RenderTexture-active.html
>
>>>458953
>Можешь декомпильнуть его сам, при помощи IDA. но боюсь, ты слишком молод, чтобы в ассемблерном коде ковыряться, даже если у тебя будут сигнатуры всех методов
Как всегда в таких случаях оказывается что я где то обсрался а метод переписывать и не нужно.
Все равно спасибо!
Нас таких цельные треды в суппорте юнити, так что иди нахуй.
Использовать папку Resources ? ассетбандлы? Кто сталкивался с подобным?
Так инстанть префаб только когда он потребуется, в чём проблема?
Но лучше Resources, потому что если префабов реально дохуя, то легче их по имени искать, чем ручками каждую штуку в инспектор пихать.
Что думаете о такой архитектуре, посоны? Вроде, выглядит годно.
Ладно, я потестил. Оверхеда не видно. У такого подхода конечно есть куча подводных камней, но если осторожно использовать то очень годно.
>>58992
Пиздато для крупной конторы и в плане обособленности систем, но для инди-хуинди по большей части неоправдано, имхо.
> Оверхеда не видно.
> если осторожно использовать то очень годно
Тут нужен дядька гейм-дизайнер, который уже распланировал всю игру в документе на 300 страниц, из которого станет ясно, что да как пилить.
>даун даже не понял сути претензий, но высрать что-то обязательно нужно было
Съеби в агдг и там щитпости например, аутист безигорный
Давай лучше тут, т.к. у меня времени нихуя нет, чтобы всем отвечать в индивидуальном порядке.
>Sapio F. - Getting Started with Unity 5.x 2D Game Development - 2017
>Джозеф Хокинг - Unity в действии. Мультиплатформенная разработка на C# - 2016
>Крис Дикинсон - Оптимизация игр в Unity 5. Советы и методы оптимизации приложений - 2017
>Торн А. - Искусство создания сценариев в Unity - 2016
>Хорхе Паласиос - Программирование искусственного интеллекта в играх - 2017
Вот это хуйни навернуть не вредно будет? Мне английский плохо даётся к сожалению. Я подумал в книгах то уже пиздеть не будут скорее всего..
> Джозеф Хокинг - Unity в действии
> Мне английский плохо даётся к сожалению
Эта дичь на русском есть, могу залить.
Книжки читать полезно чтобы не упираться.
Да у меня тоже есть. Сижу читаю сейчас в книге про оптимизацию главу про физику, то что нужно, начинаю понимать как устроен физический движок.
Мне бы по 2D что-нибудь на русском, но вроде переводов нет, но думаю и этих 4 переведенных толмутов мне пока с головой. Буду поглядывать с сабами GDC, которые мне насоветовали, да оф мануалы изучать. Всем спасибо! Надеюсь напишу свой охуенный платформер, разбогатею и куплю квартиру
Бампану свой вопрос. Чего городить-то по уму? Или я как всегда не вижу очевидного?
>получается ебаная лапша
Какая у тебя лапша-то получилась? Яичная или гречневая?
Делись опытом.
>ставлю чек на тоггл
>вызывается метод
>метод снимает чек
>или наоборот
Рисовая похоже, со вкусом индийсокго карри.
>метод снимает чек
>или наоборот
Так бы и сказал изначально. Попробуй дедовскую практику: дебаж логами.
Понапихай во всех местах, которые дёргают логику тоглов что-то наподобии этого: Debug.Log("BLYA SLOJNA CHECK DEBAJIT");
Проблема в том что юнька дергает прикрепленныей к тоглу метод, каждый раз когда я вызываю сеттер Zvuk.isOn
Дебильная логика, как по мне. И приходится городить костыли.
Я так понял эта вся ебала из за капсульный формы и нужно делать из цилиндра ригбоди или как?
Да, это потому что тебе на склонах интерполированная нормаль поверхности возвращается.
Можно не юзать дефолтный isGrounded и написать свой метод для семпла нормалей.
> Зачем тогда Character Controller
Затем, что это дефолтная приблуда. Хочешь охуенчик - пиши сам.
Карандаш это хуевый инструмент. Художники не рисуют карандашами.
>public UI.Toggle.ToggleEvent onValueChanged;
>Callback executed when the value of the toggle is changed.
>Дебильная логика, как по мне.
А ты забавный, да.
На самом деле это нормальная практика, создавать СОБЫТИЕ, если какое-либо значение изменилось. Вот как ты по-другому узнаешь, что значение поменялось? В Update будешь каждый кадр опрашивать и сравнивать с предыдущим значением?
Какую камеру брать? Можно ли ее вертеть скриптом, а не заготовленной анимацией? Никак не разберусь с этим инструментом.
Юзер нажал - событие.
Методом сменил - другое событие.
С хера бы простой сеттер эмулирует жмак кнопки? Это же разные события
Я скачал крякнутую Unity pro, хочу делать игры и выкладывать в Google play. Делать их бесплатными но с рекламой, возможно с внутриигровыми покупками. Живу в Украине. Нищий. Могут ли меня как-то наказать? Какие будут последствия? Меня забанят без возможности повторной регистрации? Они сильно проверяют и как вычисляют пиратство? Как вообще мне лучше поступить, забить и пользоваться фри версией?
> pro
нинужна
> хочу делать игры и выкладывать в Google play
делай, выкладывай.
> Живу в Украине
соболезную.
> Могут ли меня как-то наказать?
с учетом что живешь в украине — максимум игру удолят со стора
> Какие будут последствия?
10-50 загрузок
> без возможности повторной регистрации
и как они допетрят что это ты же?
> Они сильно проверяют и как вычисляют пиратство?
пока не лопатой деньги гребешь, хуи кладут. а как будешь грести, там уж разберешься.
> забить и пользоваться фри версией?
именно так.
удачи.
Какая? Free или купленная pro? Покупать я точно не в состоянии, а вот в бесплатную может и вкачусь если нет другого варианта. Просто у меня весь софт крякнутый, если бы я это все покупал, мне пришлось бы уже квартиру продать
>>59127
>и как они допетрят что это ты же?
Так я реквизиты карты банковской им при оплате акка передаю, не?
именно так.
Бля, ну я уже установил про, можно все таки про?
То есь это не опасно вроде да? Чето мне страшно
Сделаешь игру - выложи сюда, мы ее тоже спиратим.
Ставь бесплатную, она ничем не отличается, кроме цвета интерфейса.
Эт самое, попробую на украинском
Тi поставуй бесплатнову фрi версiю, она от про не отличацаэ и не ыбi мозговину.
Версия про нужна когда твои бешеные продажи перевалят 100К баксов
Как ты игры писать собрался, если ты даже прочитать на сайте инфу не можешь?
Ты ебанутый?
У тебя изменилось значение тогла, за ним же вызвалось событие, что ЗНАЧЕНИЕ изменилось.
Ты, блядь, читать научись сначала, а потом уже свой манямир доставай.
И как мне выставить значения тоглов при инициализации меню настроек без запуска всех привязанных методов?
У меня стоит тогл включения таймера. Если игрок включил таймер, вышел из игры, вернулся в игру, то тогл должен быть включен, но блять таймер не запущен с 0, а продолжать свой отсчет.
Я читаю в сейве что таймер включен - выставляю тоглу тру - запускается метод, надо ловить эту ебанину, что не пользователь нажал включение таймера, а это инициализация, и это лишний код, лишние баги.
> как мне выставить значения тоглов при инициализации меню настроек без запуска всех привязанных методов?
ScriptableObject же!
void OnEnable()
{
myToggle.isOn = PlayerPrefs.GetBool("myToggleBool");
myToggle.onValueChanged.AddListener(OnMyToggleValueChanged);
}
void OnDisable()
{
myToggle.onValueChanged.RemoveListener(OnMyToggleValueChanged);
}
void OnMyToggleValueChanged(bool value)
{
PlayerPrefs.SetBool("myToggleBool", value);
}
>GetBool нет такого.
>myToggle.isOn=PalyerPrefs.GetInt("mybool",0)>0?true:false;
А если где еще по ходу надо перещелкнуть тогл, опять - отвязывай-привязывай.
Не костыль ниразу.
Я не знаю почему ,но эта архитектурная хрень меня разбесила в юнитях.
Я код писал так, чтобы суть донести, а не выдать тебе финальный код, который ты тупо копирнешь.
Алсо, ручками привязать эвенты - это удроченая практика, которую еще деды мутили. А то, что тебе в юнити дали сериализовать эвенты - вот это костыль, т.к. сериализация эвентов безбожно ограничена. Блядь, да тебе даже эвент больше чем на 1 аргумент подвязать нельзя. Особенно радует то, что когда эвент сериализуется, то пишутся все возможные поля int, float, bool, string, Object. Заебися сделоли.
Алсо, тебя никто не ограничивает в том, чтобы написать отдельный компонент, который будет сначала лезть в PlayerPrefs, присовывать данные в UI, а потом подписываться на эвенты. И вишенка этого компонента в том, что тебе даже хардкодить поля префов не надо будет, т.к. все спокойно можно будет настроить в инспекторе. Просто сядь и подумай, а не ной, что УУУУ БЛЯДЬ, АРХИТЕКТУРА ГОВНО ЕБАНОЕ. ДЕБИЛЫЫВВЫВАПРП
> Data oriented design
Ну бля, старая вещь же. Емнип в старые времена это называлось композиционной архитектурой.
А построение архитектуры как дерева наследования классов - совсем уж дедовский метод какой то. Каждый конкретный объект просто реализует определённые интерфейсы и всё.
Пра вильно.
Поделитесь пожалуйста.
Да это опять тот тральщик.
КапсулКоллайдер, ригидбоди и вперед.
И есть объект, на который этот скрипт повешен. Объект стоит на месте, но периодически скачет, хотя никаких действий не делает.
Я внимательно присмотрелся, и вот что происходит: объект слегка отъезжает назад на абсолютно ровной поверхности, из-за чего скрипт и считает, что он сдвинулся.
Пробовал менять Drag у Rigidbody - не помогло.
Какие еще есть варианты?
Никакого ветра, ничего нет. Вообще не вижу ничего, что могло бы влиять на него из вне. Поэтому и грешу на настройки Rigidbody.
Определил изменение в 1 для каждого элемента Vector3:
bool Equal(Vector3 value1, Vector3 value2)
{
return (Mathf.Abs(value1.x - value2.x) < 1) &&
(Mathf.Abs(value1.y - value2.y) < 1) &&
(Mathf.Abs(value1.z - value2.z) < 1);
}
Не помогло.
А если отключить этот скрипт мониторинга позиции - все-равно объект сам сдвигается?
Да.
Я уже давно заметил, что он медленно сползает. Не придавал значения, пока не понадобилось отслеживать изменение.
Заметил, что он и вперед движется, не только назад. Все еще не понимаю, от чего это зависит.
Может, физический движок хуево обрабатывает объект, и он успевает войти в пол и выйти из него?
Отключать нахуй ригидбоди, т.к. ригидбоди объект тянет вниз, а коллайдер толкает объект вверх.
Надо подвинуть объект? Включаешь ригидбоди.
Объект должен стоять на месте? Вырубаешь нахуй ригидбоди.
Я у мамы егний.
Rigidbody.isKinematic
Я бы рад реализовать орбитальную механику исключительно средствами юньковской физики, но к сожалению юнити не очень дружит с дистанциями в миллионы километров и скоростями в тысячи метров в секунду. Спасибо за ваш экспертный отзыв с котиком, а теперь съеби нахуй, пидорас тупорылый. Заранее спасибо.
>>59333
Я помню, что это не рекомендуется, прост юньки сейчас под рукой нет, а вопрос внезапно возник.
Какие мы нервные.
>>59066
http://positech.co.uk/cliffsblog/2017/06/23/your-indie-game-will-flop-and-you-will-lose-money/
Читаем, вникаем, понимаем, что дальше хобби вы никуда не уползете.
Поэтому, продолжаем работать дворниками, и в свободное время клепаем говнопроекут, которые купят от силы 1.5 человек и то для многотысячной коллекции в Стиме, похвастаться.
Да, делаю реальные масштабы. Собственно, масштабы уже есть, но кораблики пока не сталкиваются друг с другом.
Ебать, ну с какими же я довнами на борде сижу.
Разбиваешь мир на чанки. Все объекты перемещаются в пределах чанков. Камеру делаешь статичной и в начале мировых координат. И просто двигаешь мир вокруг камеры, а не наоборот.
Деды так делали и ты делай. И float будет хватать.
мимоПРОбыдло
Продвинул тебе за щеку, проверяй.
Я использую Vector3d, там даблы. Точности хватает. Ну кроме того, что пришлось поправить значение пи, которое создатель либы заебашил с точностью до шестого знака.
>>59422
>чанки
Надо гравитацию считать, чанки не катят. А вообще модель СС с расчетами живет отдельно, а отрисовка отдельно, там сделано как ты написал, планеты расставляются вокруг корабля, который находится в (0, 0, 0).
bool peremennaya; //v klasse
if(uslovie && !peremennaya){ //v update
peremennaya = true;
//tut kod
}
Другой вариант делать через EventManager. Но его у меня нетне нужен. Я знаю что можно сделать просто и изящно, но не могу понять как.
Action ChangeScaleOnce = () => {
//rescale;
---------
ChangeScale = null;
}
void Update()
{
if(NUZNORESCALITYOBU)
{
ChangeScaleOnce?.safeinvoke();
}
}
В Unity - нет
давно уже
Поясню.
Обычный спрайт, отображаемый через sprite renderer при повороте или изменении размера сильно искажается из-за отсутствия мипмапов. В самом спрайте включить их можно, но на картинку это никак не влияет.
Другое дело, если закинуть спрайт на сцену по старинке, через mesh renderer и текстурку в качестве спрайта. Тогда мипмапы генерятся.
Вопрос: как заставить юнити генерить мипмапы для sprite renderer?
Что я делаю не так? Как это можно исправить? Может как-то можно запечь навмеш с указанием, что вот эту область тоже надо затронуть?
Как на пикрил? Говорю же, не работает со sprite renderer. Или у тебя норм всё?
Среда разработки Unity 2017.2.0f3.
Я просто думал что так красивее будет. Так то я и сам смогу. + проблема с окном конфигурации остаётся
Конкретно можешь описать?
Мне надо создать проект(Меню), в него запихать предыдущие проекты и вызывать сцены?
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
private Rigidbody rb;
public float speed;
public float tilt;
public Boundary boundary;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.velocity = (movement speed);
Vector3 bounds = new Vector3((Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax)), 0.0f, (Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)));
rb.position = bounds; rb.rotation = Quaternion.Euler(0.0f, 0.0f, (rb.velocity.x -tilt));
}
}
[System.Serializable]
public class Boundary { public float xMin, xMax, zMin, zMax; }
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
private Rigidbody rb;
public float speed;
public float tilt;
public Boundary boundary;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.velocity = (movement speed);
Vector3 bounds = new Vector3((Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax)), 0.0f, (Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)));
rb.position = bounds; rb.rotation = Quaternion.Euler(0.0f, 0.0f, (rb.velocity.x -tilt));
}
}
[System.Serializable]
public class Boundary { public float xMin, xMax, zMin, zMax; }
> rb.velocity = (movement speed);
rb.velocity = movement;
> Vector3 bounds = new Vector3((Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax)), 0.0f, (Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)));
> rb.position = bounds; rb.rotation = Quaternion.Euler(0.0f, 0.0f, (rb.velocity.x -tilt));
Это может лочить. Пропиши в Update() лог со скоростью. Если скорость меняется, то проблема в этом.
Когда поворачивал объект, он у меня растягивался. Это было из-за про билдера, который у меня был включен в режиме редактирования полигонов.
Сцена с меню отдельно, плюс по одной сцене на каждую игру.
Земля тебе пухом, братишка.
Ну вопрос так то был про аналог в студии. Удобно в два клика вызывать, показывается сразу что было выделено. В общем хуй знает хули ты агришься как полуебок. Так то документация скачана.
Попизди мне еще тут
Поставил на террейн пустые объекты и по их координатам создаю объекты из префабов. По какой-то причине всегда при первом запуске сцены объекты инициализируются абсолютно в другом месте, но всегда в одном и том же. При следующих перезапусках все нормально.
Что это может быть?
На объектах навешаны rigidbody, navmesh agent, collider и еще некоторые самописные скрипты.
Бля, копировал вопрос с телеграма и случайно прилепилось имя.
Ну ты скажи куда копнуть, что почитать? Мастхевную книжку из шапки прочел, пару туторов с оф сайта прошел. Примерно понимаю что я хочу сделать и как, вопрос в графоне (модельки вотэтовсе).
Каждая камера рендерит в свою RenderTexture, а потом просто через Blit прогоняешь.
А чего тут читать? Хочешь графона - рисуй. Не умеешь - нанимай того, кто умеет. Если денег мало - покупай ассеты. Если денег нет совсем - воруй ассеты.
Сам себя графон не нарисует.
>>Где воровать
Это правильный путь? Я просто думал туторов наебнуть чтобы самому рисовать, но когда начал гуглить, ахуел от кол-ва материала к изучению и спросил совета тут. Нужны ли навыки триде для инди разраба или я увязну в обучении этому на долго и есть более простые пути.
на пирсах и прочих тематических форумах, насколько я понимаю.
Хуй знает. У нас вот в команде 4 человека, один из них купил ассетов баксов на 250, залил в проект. Само собой, доступ к ним есть у всех четверых, они ж просто в папках лежат. И вот они вроде и купленные, а троим достались бесплатно. Считаются ли они теперь пизженными, если я их в свою личную игрушку засуну? Я не знаю.
Ну так у вас же наверно и юнити куплена, если вы делаете командой. Там вроде в договоре что то про это написано.
> Ну так у вас же наверно и юнити куплена, если вы делаете командой
Нет, персональная версия. Бабло платить надо только если годовой доход перевалил за сотку тысяч баксов.
Хотя, коллаборейт скоро из бесплатной версии уберут, будем брать подписку на год.
Всмысле? Вместо персонажей - кубы? Опять таки, опыт у меня не большой, я без сарказма спрашиваю.
> Я просто думал туторов наебнуть чтобы самому рисовать
Люди годами дрочат академичский рисунок. Если тебе это просто нравится — учись наздоровье. Если ты хочешь как можно быстрее выкатить свое GOTY 2к18 — пизди ассеты или покупай людей, которые в этом шарят.
> Нужны ли навыки триде для инди разраба
Ты странные вопросы задаешь. Прежде всего тебе нужно понимать, что ты хочешь сделать. Может, ты хочешь сделать 2D платформер. Может быть ты там космосим пытаешься запилить.
Хочешь не работать на дядю и получать деньги — продавай наушники с алика. А так учи код, учи понравившийся тебе движок, коли рисовать не умеешь. Сделай нормальный прототип. Графон к прототипу не относится.
а я без сарказма задаю вопрос. он не касается твоего опыта. нахуй тебе графон? ты без графона можешь сделать игру, если нужно что-то чтобы протестировать какую-то фичу - скачай бесплатное и тестируй на нем.
Окей, а где про это можно почитать/посмотреть? Я наверное не корректно выражался, под "графоном" я имел ввиду визуальную составляющую, а не только модельки.
Типо через код Graphics.Blit Всех текстур делать?
> а где про это можно почитать/посмотреть?
На ютубе видео как говна. Проблема в том, что они в основном сами по себе тоже говно.
Был такой чувак с ником Stream, пилил сносные видосы, где человеческим, а не академическим языком разжёвывал дохуя разного.
Но канал он потом удалил, так что ищи перезаливки. "stream утерянные видео" или что-то такое.
Он часто ебланит, но в русскоязычном секторе это одни из немногих видео по юньке, от которых не сильно хочется блевать.
А если инглиш норм тащишь, то смотри официальные туторы, их там на пару недель дрочева хватит, если не просто переписывать скрипты с экрана, а попытаться разобраться что и зачем ты делаешь.
Спасибо, начал смотреть.
RaycastHit hit;
if (!Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
return default(Vector2);// -1;
MeshCollider meshCollider = hit.collider as MeshCollider;
if (meshCollider == null || meshCollider.sharedMesh == null)
return default(Vector2);//2;
И все работает, но hit.point дает всегда 0 по Y оси, хотя меш нифига не плоский и вообще ничего плоского там нет (кроме гуя, но это не то)
Где я обосрался?
картинко для привлечения внимания
Алсо, передаю пример местному завсегдатаю что мотивировал меня пилить симулятор эрозии
Моча съела говно, лол. Забудь, я хз что это у тебя. Генератор рельефа? Не важно. Просто продолжай.
Слушай, годнейшие туторы. Реально хороший контент для русека. Единственное что хотелось бы больше фундаментальных основ про меши, нормали и другие интуйтивно непонятные моменты.
layerMask = ~layerMask;
RaycastHit hit;
if (!Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity))
Мне окну коллайдер добавить, што ли блять? Канва - скрин спейс оверлей. Что делать то?
> Лучи проходит свободно сквозь ЮИ. А должны блокироваться
if (EventSystem.current.IsPointerOverGameObject ())
https://docs.unity3d.com/ScriptReference/Physics.Raycast.html
>Casts a ray, from point origin, in direction direction, of length maxDistance, against all colliders in the scene.
> against all colliders in the scene.
>coliders
Ну это жи совсем безумно лепить соллайдеры на окна, еще в оверлей скринспейс
>>59800
>if (EventSystem.current.IsPointerOverGameObject ())
Вау, спасибо, анон. Все так просто. С меня нефть (растворенная в моче). А вообще это правильный путь использовать Physics.Raycast - для определения куда юзер ткнул в меше?
> А вообще это правильный путь использовать Physics.Raycast - для определения куда юзер ткнул в меше?
Вполне.
Проблема в том что при этом немного падает точности установки маркера.
Вопрос нельзя ли как то задетектить попадание рейкаста в объем плоского меша который выглядит объемным? Пробовал в update писать
item.GetComponent<MeshCollider>().sharedMesh = item.GetComponent<MeshFilter>().mesh;
(тип обновляем меш коллайдера) но чет не работает (толи доступа к видеопамяти не дает, толи он совсем плоский). Вот шейдер, если нужно : https://github.com/Nashet/Interactive-Erosion/blob/master/Assets/InteractiveErosion/Shader/LandShader.shader
Рейкаст попадает не в меш, а в коллайдер. Так что смотри что там у тебя нахуеверчено. Может у тебя на меше бокс коллайдер, лол, откуда ж нам знать.
Хотя в scene view меш выглядит вполне полигональным а не плоским, хм.. Обновляется меш так
m_landMat.SetFloat("_ScaleY", scaleY);
m_landMat.SetFloat("_TexSize", (float)TEX_SIZE);
m_landMat.SetTexture("_MainTex", m_terrainField[READ]);
m_landMat.SetFloat("_Layers", (float)TERRAIN_LAYERS);
Добавляется коллайдер так m_gridLand[idx].GetComponent<MeshFilter>().mesh = mesh;
m_gridLand[idx].AddComponent<MeshCollider>();
Но в этот момент он точно плоский. Да и потом меш жи меняется, коллайдер обновлять надо
>MeshRenderer сам должен обновлять коллайдер
Да, но сам меш, внезапно плоский. Вот пиписька слева - справа плоская в инспекторе
Там какой то хитрый вертексный шейдер, вероятно. Который отрисовывает плоские полигоны как объемные. Может картограф местный знает..
Высоты хранятся в текстуре, общая высота = сумма r,g,b,a
Как называется эта технология когда плоский меш отрисовывается объемно? Может я нагуглю, аниматоры карт наверняка такое делают.
> Высоты хранятся в текстуре, общая высота = сумма r,g,b,a
Ну так кидай рейкаст, через hit.point получаешь значения по X и Z, потом суммируй значения всех каналов той точки, куда попал, и получай Y.
А схуяли у тебя луч под углом? Он же от камеры падает перпендикулярно плоскости XZ.
>Он же от камеры падает перпендикулярно плоскости XZ.
Амм.. Нет, он от камеры идет через точку клика мышкой. А камера крутится и переещается по всякому.
В принципи, можно спроецировать луч на плоскость, рассчитать высоту поверхности в каждой точки получившегося луча и где эта высота совпадает (пересечет первый луч) - там норм точка. Или таки только по событию клика развернуть плоский меш в объемный и нормально спроецировать луч.
Алсо читай коменты, словишь лулзов.
Сделой наоборот: рисуй курсор там где насчитал персечение.
Посчитал делта х и у в апдейте, нашел пересечение - там нарисовал курсор.
Либо проецируй текстуру на меш с белым пятном в месте курсора и в шейдерах делай что надо. я хз что там в юнити и вообще сейчас с шейдингом, бросил этот пердолинг во времена ДХ10.0
Да ладно тебе, тут и не такое бывает.
помню я кого-то мотивировал на написание эрозии, да. а мне вот нечего нового показать для привлечения внимания. кстати, информацией о эрозии не поделишься?
>>59805
>>59825
твой план не будет работать если камера близка к горизонту. надо проверять всю длину луча в пределах террейна.
ты шагнул в очень интересную сторону. можешь сделать что-то вроде того что сделал я >>58902 чтобы узнать какие куски грида пересекает твой луч, проверить пересечение с треугольниками грида.
Веб хуйня для макак.
Хуёвая идея с наследованием, если честно. Спецаильный человек запиливает сцену с интерфейсом игры. Он использует обычные компоненты. А тебе потом придётся их заменять на свои (Text на LocalizedText), а это пиздец неудобно. В сто раз проще добавить дополнительный компонент.
Перевод хочу хранить в гугл таблицах (1 лист - 1 язык). После чего скриптом буду сохранять его в json и загружать нужный json уже в юнити при помощи LitJSON. В принципе просто и понятно.
Видел ещё один интересный, но более муторный вариант: перевод хранят в exel файле, через юнити едитор его считывают и трансформируют в скриптабл обжект, а потом уже подгружают нужный скриптабл обжект. Но всё же проще сразу json подгружать.
>Сделой наоборот: рисуй курсор там где насчитал персечение.
Ах ты ж хитрая попа. Но тогда курсор мыши будет двигаться в нелинейном пространства.. надо попробывать..
>>59830
>Либо проецируй текстуру на меш с белым пятном в месте курсора
В смысле курсор мыши вообще не рисовать? Тоже хитро
>>59833
Ты на смайл забыл сагриться
>>59842
>кстати, информацией о эрозии не поделишься?
Попозже, ты ж все равно тут сидишь. Я еще и тектонику симулировать собираюсь, хз как.
>>59849
>Хуёвая идея с наследованием, если честно. Спецаильный человек запиливает сцену с интерфейсом игры. Он использует обычные компоненты. А тебе потом придётся их заменять на свои (Text на LocalizedText), а это пиздец неудобно. В сто раз проще добавить дополнительный компонент.
Таки наверно можно автоматически поменять. Или сразу норм ставить.
>В сто раз проще добавить дополнительный компонент.
Наверняка где то забудешь добавить, если в ручную добавлять будешь
>Наверняка где то забудешь добавить, если в ручную добавлять будешь
Есть ещё вариант. Получаешь все компоненты Text со сцены и используешь имя объекта в качестве id для получения локализованного текста. Но, опять же, придётся пройти по всему тексту на сцене, чтобы задать имена у объектов, иначе никак.
И внезапно я задумался: когда сервер берет данные с БД это норм. Но когда клиент берет, это же не норм?
К примеру, есть SQL функция по id возвращающая свойства шмотки.
Клиент, имея доступ к БД, может перебирать id и вытащить все данные по всем шмоткам и т.д. что, наверное, не очень верно.
А инициализировать запрос на сервер, чтобы он спросил у SQL, и ждать ответа, это не самая быстрая и простая вещь.
Какие best practices в этой сфере? Как нужно делать правильно?
Как зделол: скопировал обычный шейдер рендерящий поверхность и добавил ему в R канал количество осаждения. Все правильно делаю? А как наложить оверлей поверх а не вместо имеющегося рендера? Еще один меш городить? Или лучше добавить второй материал к имеющемуся (ассуминг они не конфликтуют по картинке)
blending юзай и несколько проходов
https://ru.wikipedia.org/wiki/REST
Можно делать GET и POST, общаясь с сервером с помощью структур вида {"param":"value", "param":"value"} и не предоставляя доступа к БД.
Я это понимать, и даже использовать SQL процедуры. т.е. у пользователя нет прав на доступ к бд, нет прав на селекты и прочее. Он может просто исполнить SomeFunc(175) описанную в SQL интерфейсе (скажем так) и ему будет возвращено значение. Что именно внутри этой функции он не знает. Но тут вопрос - что ему мешает попробовать выполнить эту функцию для других id "руками", тем самым получая значения? Ок, если это просто инфа о шмоте, а если это LootItem(id)? Ну, ты меня понял...
однажды из тьмы вырвется дракон пустоты и пожрет тебя.
Как вы учитесь/учились ебашить на юнити?
Вылизывали ли вы проекты или как можно скорее перескакивали на изучение нового функционала?
Просто я делаю первую игрушку, и вместо того, чтобы за пару дней что-то скрафтить, и начать делать другую, начинаю вылизывать первую - менюшки, разрешения, эффекты, шейдеры, все такое. Или лучше ебашить по прототипу в день?
Цель выучиться и пойти куда-нибудь джуном. Игрострой не только как хобби, но и как профессию хочу освоить.
Если игрострой - тогда, наверное, лучше прототайпить. Со временем, можно попытаться сделать более-менее успешный коммерческий продукт как венец портфолио
Начинал с этого чувака по советам гд, и юнити ин экшн книжки. Через 2-3 недели понял, что я тупо копипащу и нихуя вообще не понимаю. После этого задрочил обучалки на офф.сайте. С уверенностью могу сказать - лучше обучения основ чем на офф.сайте - нет. Все схватываешь и понимаешь на лету, все круто и удобно. Хочешь какие-то более сложные фишки, думаешь, что тебе надо, пишешь HOW TO в ютубе, и вуаля, есть практически всё. Правда нормальных туторов для хау ту эдд геймбой рамбл я не нашел, пришлось пердолиться (очень странно, популярная тема должна же быть, не?).
Да, так и буду делать. Но пока что закончу первую, хотя бы чтобы для себя был законченный первый проект. Это все-таки приятный буст морали. Потом буду разный функционал тестировать, в планах, что хочу изучить: сетевые игры (подключение к серверам, префабы игроков, все это), особенности мобило-параши и виар.
У тебя неправильно спроектирован интерфейс.
Клиент не должен мочь запросить строку из БД, он должен уметь делать POST со своими действиями (я покакол) и GET с состоянием (на полу накакано).
>Как вы учитесь/учились ебашить на юнити?
Никак.
Ну ладно, почти никак.
Посмотрел несколько туторов на сайте, сделал джва обучающих проекта про катание шариков и космокораблик, и начал делать свой проект.
Правда у меня опыт работы погромистом 8 лет, наверное это немного сказывается.
> Как определить, в какой стороне от меня находится второй объект?
Геометрию забыл? Направление от объекта1 к объекту2 это позиция объекта2 минуст позиция объекта1.
public GameObject drugoyObject;
Vector3 napravlenie = (gameObject.transform.position - drugoyObject.transform.position).normalized;
float sila_sily
RigidBody rb = gameObject.GetComponent<RigidBody>();
rb.AddForce(napravlenie x sila_sily);
Возвращает вектор с тем же направлением и длиной 1 юнит.
> napravlenie = (gameObject.transform.position - drugoyObject.transform.position)
Ноуп. Это будет направление от другого объекта к исходному, а не наоборот.
Тебя не смутил rb.AddForce?
Естественно этот скрипт должен висеть на объекте, к которому применяется сила.
Но ведь я про это и говорю. Exec Nakakano(128). А ответ летит вес насраного. Проблема в том, что любой сможет сделать, ок, будь по твоему, Post с нужными ему параметрами, и получить Get с такими же параметрами, несмотря на то, что передавать его будет не приложение а он, руками.
Аутентифицировать приложение нормально вроде никто не умеет, а копать в сторону эдакого "SQL Proxy", которая будет проверять валидность параметров (Да, ты действительно стоишь рядом с лутаемым, и действительно тебе никто не намыливает анус и ты можешь поднять шмотку). ну ВООБЩЕ страшно. Можно, но громоздкость решения зашкаливает.
Эээ, зачем у тебя юзер запрашивает параметры шмота? Дал команду SkolkoVesitMoyLut() - в ответ сервер ему цифирку прислал.
На скриншотах нет ни одного объекта с RigidBody, если что, все считается в скриптах "на бумаге" и позиционируется через transform. Планеты гораздо ближе и отмасштабированы.
RigidBody нужен будет чтобы аккуратно подлететь одним спутником к другому с относительной скоростью 1-2 м/с и столкнуться с ним, а не пролететь сквозь.
>Exec Nakakano(128)
Реализация должна быть на стороне сервера в стиле "какою" - "200 OK". Или 400 Bad Request, если персонаж не хочет срать.
Клиент может получать данные от сервера только в виде ответа на GET запрос, "сколько накакано?" - "1 кг".
Но ни в коем случае не в виде команд "накакано 1 кг".
>громоздкость решения зашкаливает
Щито делать. Хочешь безопасно - делай интерфейс между БД и клиентом.
Самое простое решение которое я вижу - синглтон UIManager, у которого в иерархии в детях находится всё связанное с UI все Канвасы и кнопочки. Какие подводные камни? Чем подгруженная сцена будет лучше?
Какой "Мой"? Кто такой "Мой"? Я буду передавать параметром id пользователя, чей вес я хочу получить. Проблема в том что команду можно "симулировать".
>>59978
Я же об этом и говорю. Exec Nasrat(UserID); В ответ я хоть бинарный код картинки с чебурашкой могу получить, это от процедуры зависит, но вот вопрос: как узнать что персонаж не хочет срать то? Проверку на валидность запроса как проводить? На клиенте нереально: запрос на выполнение можно "подправить". На сервере приложения (не бд) нужно будет пилить эдакую проксю, чторбы клиент писал серверу StartCoroutine(Nasrat), сервер проверял все условия и делал или не делал запрос БД.
В Аллодах (и вроде бы в Скайфордж) так и делали, но я как представлю, что мне нужно будет дублировать все процедуры в приложении-сервере (получил, проверил, отослал результат) а потом и в клиенте-сервере (спросил-получил пакет-применил), мне становится плохо. Оче плохо. Я прям вот щас как представил обьем работ - чутка сблеванул.
а)сетевой адрес юзера у тебя есть.
б)юзер айди
в)всякое шифрование
Да тебе бы надо разделить уровни абстракции.
Базовые команды на сервере.
Псевдо команды на юзере.
Или делай на похуй и надейся что кулхакиры не будут ломать твою игру.
Получается ты каждый раз теряешь все данные ЮИ, а потом в новой сцене снова их загружаешь откуда-то? Чем такой подход лучше Синглтона?
Тем что нажав кнопку я не вызову метод из другой сцены, если где-нибудь обосерушки выйдут с привязкой методов.
А улитки то где?
>Клиент, имея доступ к БД, может перебирать id и вытащить все данные по всем шмоткам и т.д.
На сервере храни специальный ключ (строку, которую будет знать только сервер). Когда игрок заходит в игру, авторизуешь его на сервере:
- он присылает запрос 'auth' со своим user_id
- ты на сервере берёшь user_id, прибавляешь к нему секретную строку и преобразуешь результат в md5 хеш
- возвращаешь полученный хеш игроку
Далее, когда игрок хочет получить данные шмоток, он должен прислать строку авторизации (тот самый хеш). Когда приходит запрос с хешем, проверяешь его, совпадает ли он с тем, что должно быть:
if (client_hash == GenerateHash(client_id))
-> access allowed
else
-> access denied
Это простой и рабочий способ. Игрок таким образом сможет получить только свои данные. Если он попытается запросить данные другого игрока, то пойдёт нахуй.
А вот это уже интереснее, спасибо. Фактически, получается усложненная аутентификация, ключ которой не так легко вытащить, если начать шифровать SQL траффик. (Только если деобфрусцировать весь код аутентификации, и написать свой аутентификатор, то уже значительно сложнее). Остается вопрос с проверками расстояния, состояния и доступности (чтобы не насрать за 2 километра или за стену), но там не так много.
Посмотри обязательно это:
https://www.photonengine.com/en-US/PUN
Его можно использовать как для пошаговых игр, так и для риалтайм. Вся логика хранится на клиенте (один из клиентов выступает мастером), но при помощи WebHooks ты можешь контролировать данные на своём сервере:
https://doc.photonengine.com/en-us/realtime/current/reference/webhooks
Благодарю (последние посты на доске меня удивили - есть тут еще хорошие люди), но у меня уже написана своя сетевая надстройка над Low Level API юневской.
Видимо, придется писать некий SQL прокси вдобавок. Не сложно, но есть проблема с передачей массивов.
Глобально я интересовался PUNами, но на стадии проектирования отказался - слишком сложный итоговый контроль.
> Как вы учитесь/учились ебашить на юнити?
После того как уточка удалила канал сюда нет входа.
Locale.cs https://pastebin.com/j1GYVQwD
LocaleStorage.cs https://pastebin.com/tBw4H6mb
LocalizedText.cs https://pastebin.com/vEhu4uBD
Unity Get.Language system?
>синглтоны
И где ты там что унаследовал, чмоня? Твоя хуйня точно так же монобихевиором накидывается тебе за щеку поверх текста. Пошел нахуй из треда короче, стыдно даже ссать на тебя.
Чтобы не смешивать логику локализатора с другой логикой. LocaleStorage работает сам по себе, ему не нужны сторонние обращение. А вот Locale уже связан с классом Game, который хранит настройки игры и прочее, и связан с классов LocalSettings, который хранит настройки игрока (PlayerPrefs).
>>60139
>И где ты там что унаследовал
>>59849
Это неважно!
Ничо так, но я думал ты хочешь захардкорить что-нибудь эдакое, компоненту для UI, типа.
А это просто монобэха, и надо стрингайди ляпать.
Что будет кроме дебуглога если стринг айди не найдено?
Я вот в своем лисапеде накалякал дефолтязык и дефолт текст которыми забивается все что не найдено.
Никогда не имел дело с базами данных со времен 3го курса и вот мне пришла идея запилить крутой инструментарий для создания всего ин-гейм: оружия, доспехов, квестов, диалогов, етц. Я повспоминал молодость и вспомнился мне TES Constrution Set, в котором такая фишка была реализована на пятерочку: открываешь окно, заполняешь все поля (название, дамаг, файл модельки, файл иконки, етц) и вуаля: можно перетаскивать свою пуху прямо в игру. То же самое с квестами, с диалогами уже сложнее, но мне хотя бы с предметами сначала начать и никогда не закончить.
Так вот, у меня общая картина в голове вроде есть: Делаем кастомное меню Editor, в нем все нужные поля, по кнопке СХОРОНИЛ, Editor пишет данные в ???, а сама игра уже их оттуда читает и создает нужные объекты на сцене, если это, например, пуха или меняет поля какого-нибудь Quest-Manager'a, если это квест и т.д.
Вопрос, собственно, в чем: нужна ли мне БД, если нужна, то какая? Надо, разумеется, что бы все это работало без необходимости устанавливать на пеку юзера какой-нибудь ФАЙРБЕРД или ОРАКЫЛ. Или проще все в бинарники грузить? А как тогда каталог открывать? Захочу я, например, изменить дмг своей пушки, надо что бы был ДБГрид или какой-нибудь его аналог из которого я могу открывать окно с подбробностями о пушке и менять все.
В общем, представьте, что вы такой же ебанутый как и я и захотели подобное реализовать. Как бы вы к этому подошли?
Бзв, есть мысли, в случае успеха, выложить такую систему в ассетстор нахаляву, на радость всем. Ассетстор не чекал
Сделал так свой редактор для квестов на эдиторе, все храню в жсоне.
Хочешь через юнити пили, хочешь внешним редактором.
БД без СУБД этоже бинарник/файл.
А СУБД тебе не надо.
У меня были мысли про json или xml.
А с жсоном можно работать через C#, ну я имею ввиду, что бы велосипед не изобретать, в .NET есть реализованные методы для работы с ним?
Выгрузка-загрузка, сериализация.
И с хмл тоже есть возможность, но почему-то я не стал, а почему- не помню.
Я даже в редакторе интерактивный графоний запилил, чтобы рисовать связи между репликами диалогов и перемыкать если надо. uml-стайл.
Хм, да ты просто Тодд после такого. Сейчас обмажусь xml-ем для Юнити. Насколько я слышал, этому даже во всяких Гикбрейно-парашах на курсах по юнити учат. Спасибо
> Чтобы не смешивать логику
Я к тому какой практический смысл делать синглот с публичным конструктором лол, приватным гетером лол и все поля/методы статичные. Я такой хуеты никогда не видел. Не легче уж тогда сделать всё статичным и публичным, раз все равно не понимаешь как работает синглтон.
Откуда начинать думать? Видел примеры на GLSL но они вроде как не совместимые и вообще не понятные
Там нигде нет синглтонов. Есть что-то вроде класса-хелпера Locale, по типу классов Console, Physics, Application и так далее.
Именно меш нельзя. Только пихать его в редактор, поворачивать как надо и экспортировать заново.
Сам моделлеру за это дело по началу по рукам стучал.
Но можно схитрить. Создать пустой объект, который, понятное дело, будет правильно ориентирован по осям, а потом в него вложить меш. И уже все операции делать с объектом, а не с мешем.
Но это только если тебе его двигать/вращать и прочие элементарные вещи.
Щито поделать. Или так, или пихать в редактор.
Делаю туррельки, которые следят за позицией игрока с помощью transform.LookAt. Как сделать, чтобы их ротейшн был ограничен, например, 90 градусами? Т.е. когда объект пропадает из их зоны видимости, туррелька не двигалась дальше или возвращалась на начальную позицию.
> чтобы их ротейшн был ограничен, например, 90 градусами
> Т.е. когда объект пропадает из их зоны видимости, туррелька не двигалась дальше
Ты уж определись что тебе нужно, ограничить вращение по градусам, или по расстоянию до объекта.
> Зона видимости по градусам же.
puska.transform.localRotation.y = Mathf.Clamp (puska.transform.localRotation.y, -90f, 90f);
Ну или как-то так, лень проверять схавает ли он такй прямой доступ к "y".
> Т.е. когда объект пропадает из их зоны видимости, туррелька не двигалась дальше или возвращалась на начальную позицию.
Оно тебе ещё надо? У меня есть пример.
>кстати, информацией о эрозии не поделишься?
Вода, внезапно, течет вниз (в шейдорах). Подсчитывается поток воды, потом скорость. Скорость "диффузируется" чтобы не быть квадратной как текстура. Порода растворяется в потоке если скорость потока высока. Растворенный "ил" течет по течению и потом осаждается где то.
Еще есть гравитационная эрозия - тупо если угол склона выше Х то оно вниз сползает без всякой воды. Тут надо переделать, порода должна действовать как густая жидкость а не как сейчас. Там репо в гите было где то выше.
Да вот и я подумал что для такого симулятора весеннего двора особо камеру вертеть не надо, можно сделать кнопочку, чтоб камера принимала вид чётко сверху и жмакать что есть дури куда попадёшь.
>Не хочу объебаться и делать все последовательно и правильно
Это тот старый исхудалый тролль, да?
Наверное это какой-то лакальный мем, но написал немного туповато. Я хотел узнать в какой последовательности создаются игры.
> Я хотел узнать в какой последовательности создаются игры
Запускаешь юньку, пишешь игру, закрываешь юньку.
Когда ж ты уже успокоишься, а?
Забей хуй. Если это твой первый блин, ты всё равно наделаешь ошибок и потом всё переделаешь. Я сам относительно новичок, и занимаюсь этим всем в свободное время, но я когда начинал тоже искал подобные советы, так что вот те правила которые я сформировал на данный момент:
1) Относись к себе-в-будущем как к дауну, который нихуя не понимает. Используй Assertions, чтобы не дать себе выстрелить очевидными багами в ногу.
2) Не используй огромные скрипты, дели их на компоненты поменьше, так и дебажить проще, и некоторые можно будет потом повесить на другие объекты. Если для последнего нужно будет накинуть абстракции - делай это, время сэкономленное по ходу разработку того стоит. в разумных пределах, конечно же
3) Пройди всё что касается скриптинга на сайте Юнити. Те, которые короткие видяшки. Нужно хотя бы знать что такие возможности существуют. Я сразу ринулся в бой и потом внезапно открывал для себя очевидные и удобные функции.
4) Старайся делать каждый компонент как можно более независимым. Например, скрипт PlayerHealth не должен при снижении хп начинать отправлять методы во все концы игры и тем более менять переменные в других местах, вместо этого лучше использовать Observer Pattern, чтобы PlayerHealth вообще не знал на что он влияет и как, а просто выполнял свою работу.
У меня сейчас в игре, например, ни один объект не знает про существование UI. Это значит что если я внезапно захочу сцену где для большей драматичности нужно его отключить, никаких лишних ошибок не выпадет.
В последнее время копаю в сторону ScriptableObject'ов. У меня начало формироваться мнение что Синглтоны и DontDestroyOnLoad() это зло, но я пока в этом не уверен, не опробовал как надо. Если кому есть что добавить - я готов выслушать.
> Например, скрипт PlayerHealth не должен при снижении хп начинать отправлять методы во все концы игры и тем более менять переменные в других местах
Вот есть у меня моб. У меня есть ХП. Когда оно падает до ноля, моб уничтожается и увеличивает переменную "mobCount" на 1, которая отображается в UI. И как мне эту переменную увеличить, не общаясь с UIcontroller'ом?
Вот спасибо. Алсо ещё хотел узнать какие моменты нужно продумать обязательно перед созданием игры (кроме общего сеттинга и боевочки), за что браться в первую очередь (персонажи/окружение)?
Давай, буду рад.
Я способ придумал, но мне он кажется ультра-тупым:
if (target.transform.position.x > minX && target.transform.position.x < maxX && target.transform.position.z < maxZ)
transform.LookAt(target);
Игра на одном экране, поэтому все работает, но как-то НЕ ИЗЯЩНО.
Cначала научись кодить на простых прототипах. А потом уже делай игру мечты. Я сейчас делаю так: создал из обучалки спэйс-шутан простой. А потом стал к нему прикручивать дохуя разного функционала, просто чтобы было. Ни чтобы игра стала лучше, а просто мне удобно на уже рабочем прототипе учиться делать новый функционал. К тому же, я уже начал видеть кучу ошибок, которые я допустил со связанностью. Например, некоторые скрипты из обучения, тот же дестрой бай контакт настолько оказались неудобними при расширении функционала, что просто пиздец. Прислушайся к >>60361. Он дело говорит, но пока сам не наткнешься на все это - не поймешь.
Вешаешь этот скрипт на турель
Transform target; // это цель твоей турели, как ты её будешь получать - твоё дело
public float angle, speed; // угол "зрения" турели и скорость её перемещения. угол имеется в виду влево и вправо от её начальной позиции. то есть при значении 90 она будет "видеть" на 90 градусов влево и 90 вправо
Quaternion originalRotation;
Quaternion targetRotation;
void Start () {
originalRotation = transform.rotation;
}
void Update () {
Vector3 look = target.position - transform.position;
Quaternion q = Quaternion.LookRotation (look);
if (Quaternion.Angle (q, originalRotation) <= angle)
targetRotation = q;
else
targetRotation = originalRotation;
transform.rotation = Quaternion.Slerp (transform.rotation, targetRotation, Time.deltaTime * speed);
}
Угол и скорость не забудь в инспекторе задать. Если турелька потеряет цель, то вернётся в начальное состояние.
> Я сейчас делаю так: создал из обучалки спэйс-шутан простой. А потом стал к нему прикручивать дохуя разного функционала, просто чтобы было. Ни чтобы игра стала лучше, а просто мне удобно на уже рабочем прототипе учиться делать новый функционал. К тому же, я уже начал видеть кучу ошибок, которые я допустил со связанностью. Например, некоторые скрипты из обучения, тот же дестрой бай контакт настолько оказались неудобними при расширении функционала, что просто пиздец
Лол, та же хуйня была. Тоже сделал space shooter по туториалу, а потом к нему нахуевертил бонусы (ускоренная стрельба, двойная стрельба, рассыпная стрельба), боссов, уровни. И тоже такую башню из говна и костылей построил по итогу, что сам в ней утонул.
Но зато какой опыт, лол.
Ах да, в апдейте на весь участок кода повесь проверку на наличие цели, если ты её ищешь как-то, а не просто в инспекторе ручками пихаешь. Хотя даже если и ручками пихаешь - всё равно повесь
Нужно сделать так, чтобы UI брал значение этой переменной.
Например, у меня у множества объектов есть инвентари. И когда я хочу отобразить содержимое одного из них, скрипт, наполняющий гуй, через интерфейс берёт все нужные данные у выбранного объекта. А сам объект вообще не ебёт, кто и что будет смотреть в его инвентарь, он реализует интерфейс доступа и на этом всё.
И когда мне захочется, например, сделать АИшный сенсор, анализирующий инвентарь, я так же возьму все нужные данные через интерфейс, а объект останется неизменным.
Дополню этого господина выводом из личного опыта: используй monobehaviour, только если он действительно нужен. Часто бывает удобнее использовать один - несколько скриптов, реализующий более классическую архитектуру.
> Например, у меня у множества объектов есть инвентари. И когда я хочу отобразить содержимое одного из них, скрипт, наполняющий гуй, через интерфейс берёт все нужные данные у выбранного объекта. А сам объект вообще не ебёт, кто и что будет смотреть в его инвентарь, он реализует интерфейс доступа и на этом всё.
С инвентарём у меня как раз как ты описал.
А в мобе у меня забито значение ХП и проверка, которая в случае если ХП <= 0 сообщает UI-контроллеру типа "ещё один сдох, отрисуй там плюс один", после чего моб помирает. Как UI-контроллер будет знать что моб сдох, если он об этом не сообщит?
Хотя я тут подумал, можно в классе mob добавить какой-нибудь static int deadMobsCount, на старте сцены получать это значение UI-контроллером, а мобы при помирании будут эту переменную инкрементировать, она ж прям в этом классе на экземпляре висит.
Да, должно сработать только нужно ли оно.
1. Адекватен в общении
2.Имеешь базу с#, синтаксис для тебя не проблема
3.Имеешь свободное время, в неделю по 2 дня полностью и в остальные 5 по 1-2часа будет достаточно
4. Есть комп с инетом, ну это и так понятно
То пиши на мыло
На данный момент мной написано буквально 5 скриптов, есть небольшая карта. Планирую закончить игру до конца лета 2018
> в разработке одной игры в жанре TD на unity, c#
Хех, как раз свой ТД пилю. Правда, у меня пока кубики стреляют кубиками по шарикам, но зато вроде работает. Ещё б UI доделать да побольше разновидностей мобов шариков.
Можем списаться, поделимся опытом, возможно тебе понравится моя идея(она отличается от стандартного наскучившего TD), короче буду тебе рад.
Да нет там особо никакого опыта. У тебя 5 скриптов, у меня 11 (и ещё один сугубо для отладки), и то из них почти них только 4 весят больше килобайта. Так что считай что один хрен.
> моя идея (она отличается от стандартного наскучившего TD)
Да я вот тоже думал прикрутить одно говно. Но это я скорее так, чисто для экспириенса и, возможно, для портфолио. Так-то я в одном командном проекте уже занят.
Ты можешь пользоваться коллбеками для передачи изменения статуса.
Но лично я бы наверное сделал менеджер противников, который получал бы всю информацию о мобах через коллбеки, и к которому можно было бы обратиться для получения информации.
public типа RenderTexture и оно видно в инспекторе, все ок.
Потом я создал свой класс public DataTexture который содержит две RenderTexture и его не видно в инспекторе, несмотря на то что все public. Как сделать чтобы текстуры было видно в инпекторе?
public class DataTexture
{
...
public readonly RenderTexture[] textures = new RenderTexture[2];
...
}
>>60417
Бля, ну я хз. Окно? DragPanel скочай
> Как сделать чтобы текстуры было видно в инпекторе?
[System.Serializable]
public class DataTexture
{
...
}
>[System.Serializable]
Помогло, спасибо. А нельзя сделать чтобы были видны в инспекторе и поля с модификаторами private, readonly, static?
А, нагуглил - [SerializeField] добавить
You are receiving this message because the following product (s) have some .js files included and it will likely start to cause some issues in future Unity versions. We would advise that any .js files you have be converted to c# at your earliest conveniences. In most cases our Automatic UnityScript -> C# converter can assist you in this process. It is also very likely that you are receiving this message as a result of including Standard Assets in your project. Simply removing those files will suffice.
Ололо, джавапокалипсис
Ну тот анон все верно написал.
Никакого секрета тащемто и нет, просто берешь, и без задней мысли делаешь самый простенький прототип, а потом день за днем прикручиваешь к нему фичи, не забывая делать бекапы. Что непонятно - гуглишь.
Ждем реакции анона, который несколько тредов назад вещал о том, что жаваскрипт лучше. Кто им вообще пользовался-то?
> был свой какой-то ее вариант
> UnityScript files, also sometimes referred to as Unity’s Javascript
Жопой читаешь?
Ты совсем тупой?
Если ты хоть как-то знаком с JS и пробовал то, что предлагает Unity - сразу бы сблеванул
Ебантяй, я тебе просто говорю что в том посте, который ты процитировал, отлично написано как называется этот самый "какой-то её вариант".
> вот создам игру, продам 100 тыщ копий и стану богатым!
Сука тупая, зная JS гораздо проще найти работу, при этом ее будет меньше, нежели ебня с "ле геймдевом" и доход годовой выше.
Но ты сиди, играйся с "серьезным игровым движком Unity" лолка нищебродная.
> зная JS гораздо проще найти работу
А если похапэ "выучить", то тогда прям ууух, по тыщи баксов в день можно поднимать.
Друг мой, мне 30 годиков, из которых я 8 работаю погромистом.
Сарказм несколько неуместен, так как похапэ прогеры до сих пор востребованы в огромных количествах по всему миру. У меня вот друг пхп-прогер, сейчас сваливает в гермашку, так ему полсотни предложений было, когда он свалить решил, и он долго выбирал ещё где получше.
Сотка с годовым знанием юньки и хуевым знанием шарпа - вполне себе норм для ДС-2. Так что не так уж и плохо. На самом деле погроммистов на юнити не так уж и много, потому что большинство из них - школьники, которых нихуя никуда не возьмут.
А так да, JS естественно более востребован, но кому не похуй?
>Сотка с годовым знанием юньки и хуевым знанием шарпа - вполне себе норм для ДС-2.
Хуетка. Максимум 40-50к и ты блять реально должен уметь хуету делать на весьма приличном уровне. То есть нехуевый опыт и знания и ВСРОКИ бл
100 и более это на теплых местечках пригретых, либо по знакомству, либо у тебя luck 255
Сотка. Пиздец ты мечтатель. Поди начитался хабраговна, да? Развесил уши.
Поправочка: сотка и более реально, если ты гуру.
В контексте
>годовым знанием юньки и хуевым знанием шарпа
даже решил не упоминать, ибо мечтатель
Если что, я так год работал, делая виар-развлечения для торговых центров, не умея при этом нихуя вообще (пройдя несколько туторов и сделав один проект). Не отрицаю, что возможно мне повезло + я работал до этого в смежной сфере, но не кодером.
Пиздить, я имею ввиду, врать. Алсо, в айти вообще бывают собеседования с эйчарами, кроме первичных?
>насмотрелся ютубов@начитался xkdc
https://www.youtube.com/watch?v=x1TsOHyJPpw
Когда ты последний раз был на собеседовании на кодера/геймдева? В рашке особенно давно тупых цац не сажают на это, тебя реальный бородат с опытом в 30 лет будет хуярить, причем всегда в отвратном настроении, ибо его оторвали от дела и делать ему нехуй, тебя дебила слушать.
А если цацу получишь - значит lck 255
Пиздеть это разговаривать, дружище.
Запомни, пиздЕть - разговаривать, пиздить - бить или врать. (но разное ударение)
Ты только что это придумал?
Я слышал более правдоподобную версию - пиздеть = врать в питере, пиздить = врать - в маааскве.
Возможно, действительно, разница в разных регионах. Я сам в ДС-2, но приехал из другого города. У нас всегда говорили пиздИть в значении врать. И пИздить в значении врать/бить.
Куда уж там лингвисту, доктору филологических наук и академику Российской академии наук товарищу Зализняку до великого дизайнера Тёмы, да.
Скорее тут как вОлки и волкИ. Удивлен, что в вики этого нет. Кстати, если посмотреть обсуждение, там изначально был вариант три, но его удалили.
В любом случае, отошли от темы.
> вОлки и волкИ. Удивлен, что в вики этого нет
Есть
https://ru.wiktionary.org/wiki/волк
> мн. ч.
> волки
Но да, от темы отвлеклись.
Пытаюсь сейчас на лвлдезигнера попастьделаю тестовое.
Видимо два говнопрототипа и 10 доков прокатили.
мимо
Удивлен, что нет варианта пиздИть, я имел ввиду.
Ладно, в любом случае, на счет эйчара я как-раз и имел ввиду, что обычно тебя не эйчас собеседует, а глава отдела. Но ничего не мешает напиздЕть и ему. Есть особо пытливые, но похуй. Больше собеседований и ура, ты работаешь. Я так вкатывался. Но когда на юнити пахал, это был типа стартап, где меня собеседовал директор и он нихуя ничего не знал. Он просто спрашивал - можешь это, можешь это. А так как запросы там были нулевые, то офк я мог и то и всё.
В разных компаниях по разному. Кто-то ищет суперзадрота со стажем 10 лет, а кому-то надо, чтобы ты был адекватный и английский знал нормально. Если ты смог удачно пройти собеседование, хорошенько наебав людей, которые тебя принимают, это тоже говорит о твоих качествах. По-крайней мере, ты умеешь себя продавать, а значит, уже не лох.
А потом, после собеседования, в ходе работы, выяснится что может быть ты и не лох в соцскиллах, но лох в геймдев-скиллах и с треском вылетишь.
А потом кто-то из менеджеров этой говнокомпании поди еще в бложике про тебя напишет. Напрямую м.б. и не спалит (а то и спалит), но намеков будет достаточно дабы найти если что
тупой дебилойд лол
>Совсем в шары долбишься?
Мб ты долбишься? Причем тут твоя аналогия с неправильным числом, когда у нас не "пиздеть/пиздят" а "пиздеть" и "пиздить" - два разных слова?
Ты точно кодер и с логикой у тебя есть что-то? Покинь тред нахуй
Чего ты сразу в обратку-то пошел? Не привык, когда в ошибки носом тыкают? Поди МАЖОР и сам джуниров катаешь, а тут какой-то анон охуел?
Любопытная логика
>хорошенько наебав людей, которые тебя принимают
>ты умеешь себя продавать
Ах да, сленг выдает с носом
> а значит, уже не лох
Плюсуешь себе опыт, увеличиваешь стек технологий, если что-то спрашивают, отвечаешь, да имел опыт работы с этой хуйней, о которой ты впервые слышишь, но давно.
>>60539
Ну если ты тупой, то да. Я вот не вылетел, обучался в ходе работы. Офк я не имею ввиду, что нужно просто придти, нихуя не умея и сидеть на жопе. Нужно въебывать. Но устроиться реально, при чем не сказать, чтобы очень сложно. У меня помимо личного примера есть еще знакомые, которые так вкатывались. Забавно вообще один друг вкатился в какой-то стартап на свифте, нихуя толко не умея кодить, имея только пхп за плечами год опыта. И получает больше, чем чувак, который дрочил матан и кресты десять лет. У последнего нереально горит от этого, на каждой пьянке начинает гореть, всем смешно.
Причем тут тот вариант и твоя аналогия, когда ДВА РАЗНЫХ слова, блджад.
Совсем тугой или обкуренный?
Малыш, иди поспи. Тред не про тебя.
>Забавно вообще один друг вкатился в какой-то стартап на свифте, нихуя толко не умея кодить, имея только пхп за плечами год опыта. И получает больше, чем чувак, который дрочил матан и кресты десять лет. У последнего нереально горит от этого, на каждой пьянке начинает гореть, всем смешно.
ну я же сказал:
>100 и более это на теплых местечках пригретых, либо по знакомству, либо у тебя luck 255
> либо у тебя luck 255
>Плюсуешь себе опыт
Допустим, это можно. Но релевантого рабочего опыта у меня нет, так что плюсовать нечего
>увеличиваешь стек технологий, если что-то спрашивают, отвечаешь, да имел опыт работы с этой хуйней, о которой ты впервые слышишь
И тут же ловишь какой-нибудь очень дефолтный вопрос, на который ответить не можешь. Твой пиздешь очевидешь, а это 100% слив
Я просто не могу представить о каких именно навыках в ГД можно спиздеть, так что бы это тебе потом не вышло боком ("Ты же сказал что работал с хуйняNAME") или на которые нельзя затребовать пруфы. Серьёзно, приведи пример.
>>60544
Какой сленг. Это уже тысячу лет как не сленговое слово.
>>60550
Это я понял, просто лак не 255 нужен, а поменьше. Просто есть еще такая ОЧЕНЬ важная вещь в любой сфере, как общая адекватность. Если бы ты сам принимал собеседования, то видел бы, каких дебилов земля только не носит. Я просто сам раньше собеседовал людей, но не в айти-сфере не думаю, что разница так уж велика. И ты просто не представляешь, сколько же откровенной хуйни несут люди. Многие из них с опытом, с нужными скиллами, но когда ты смотришь на них, и понимаешь, да вот я с ним буду работать, и думаешь, ну нахуй, найму-ка лучше кого-нибудь с кем работать будет поприятней.
>Какой сленг. Это уже тысячу лет как не сленговое слово.
Не сленг а манера разговора. Делят людей на лохов и не лохов известно какие люди. Не очень хорошие
>Если бы ты сам принимал собеседования, то видел бы, каких дебилов земля только не носит.
Дибилы дебилами, а таких как ты, желаюших получать 100к сидя на жопе - море. То, что выберут тебя на теплое место - lck 255 и не менее
Иначе мирись с 30к
Я работал кодером и геймдизайнером одновременно, потому что был стартап на 3.5 человека. Рассказывал, как я охуенно геймдизайнил до этого а это правда, как ебашил в юнити дохуя времени а это неправдау меня тогда был очень маленький опыт. , рассказал, что делал проекты под окулос и вайв, но не могу показать по определенным причинам а тогда у меня был шутан, платформер и кликер. И в общем-то меня взяли.
>И тут же ловишь какой-нибудь очень дефолтный вопрос, на который ответить не можешь. Твой пиздешь очевидешь, а это 100% слив
Такое может случится. Алсо, если ты видишь, что тебя задрот рекрутирует, то лучше, конечно, не врать. Но если это чувак, который горит идеей и ему хочется, чтобы ты ей тоже горел, то можешь из себя хоть супермена строить
Ну, я на жопе не сидел, дрочился очень много. Вообще, работа была довольно уебищная, несмотря на кучу опыта, которую она мне дала и приличные для меня деньги. Делали мы довольно таки хуевый продукт, и меня это расстраивало. Это просто было во времена хайпа ВР, там тогда очень много говноконтор появилось, который хотели срубить фаст-мани. И в общем-то, получилось.
А 30к в айти я хуй знает, даже джуны больше получают. За 30к можно на жопе сидеть и в другой сфере.
По существу только один пример
>>как ебашил в юнити дохуя времени а это неправдау меня тогда был очень маленький опыт. , рассказал, что делал проекты под окулос и вайв, но не могу показать по определенным причинам
Хуйня которую нормальному работодателю я бы никогда не сказал. Просто потому что стыдно так нагло пиздеть людям с которыми хочешь работать.
Мой детектор определяет тебя как Bidlius Artificius. Считаю таких как ты врагом любого общества
> Мой детектор определяет тебя как Bidlius Artificius
Твой детектор закоден правильно, ты принят.
Ты какой-то мутный. Если тебя в говностартап взяли с кондочка (ещё пришлось пиздеть) это не значит что ты шаришь в рынке.
Привет. Кто нибудь может помочь. Как создавать андройд плагины для юнити? Типа что бы использовать android api.
Два раза цац получал. Один раз сразу двух цац и они первичку фигачили, а потом пришел школьник какой-то, который был их главным программистом и он, в сука, речи обычной, использовал «лол» и «рофл».
Заменил бы этот листик на логотип юньки, но лень.
Да я понимаю что в конце найду как сделать. Просто искать надо будет весь день -_-.
Пока читаю
https://docs.unity3d.com/550/Documentation/Manual/PluginsForAndroid.html
https://labs.karmaninteractive.com/creating-android-jar-and-aar-plugins-for-unity-c293bb5258c9
Хочешь небольшой секрет?
Некоторые ищут решение годами, а ты за день решил стать ТУРБО-ПРОФИ-МАГИСТРОМ.
Сиди и набивай шишки, ибо это единственный путь к истине. Другого не изобрели.
ну, конечно, если ты не родился с серебряной ложкой во рту мог бы нанять чотких ребят, они бы всё за тебя сделали
Сколько соли.
Искал ассетсторе там нету.
Да я знаю про это. У самого 100 раз так было (когда на libgdx прогал и на яфоны переносил). Решение проблем искал на форумах
Префаб это "человек". На сцене у тебя два таких префаба, один Вася, второй Петя. Зачем тебе в понятие человека закидывать компоненты Пети?
Префаб - это такой же ассет как материал, текстура и т.д.
Сцена - это набор ссылок на ассеты, либо ассеты, сериализованные внутри сцены.
Чуешь разницу?
Для общего понимания: есть много времени, есть финансы (средней ограниченности, но не копейки) и желание пилить игры, но нет опыта программирования. До сего момента занимался написанием диздока и самостоятельным изучением Юнити, дабы запилить прототип и с ним уже дальше набирать команду на коммерческой основе. Но столкнулся с тем что научиться до состояния способности запилить прототип несложной игрушки с нуля сложно из-за неструктурированности информации в интернете. Видеоуроки, сайты и форумы это конечно круто, но много времени и сил уходит на отсев мусора и компиляцию получаемых знаний в голове. Поэтому думаю параллельно пройти эти курсы.
Стоит того, с учетом вводных? Не совсем там мусор уровня "записывайте: вот мышь, вот клавиатура"?
Не люблю транжирить финансы понапрасну и не понимая принципов. Поэтому считаю что минимальную базу иметь обязан, что хотя бы видеть и понимать что там пилят вечно голодные наймиты. Это первое. Ну и второе - прототип имеет смысл запилить самому, опять же и для понимания, и для того чтобы было проще и удобней набирать людей на существующий костяк или хотя бы образ игры, чемнесколько месяцев платить им за то чтобы они пытались въехать чего ты от них хочешь. Имхо, конечно, но тщательная подготовка - друг проектов, которым хочется дожить до релиза.
>из-за неструктурированности информации в интернете
И действительно, ужасно неструктурированно.
https://docs.unity3d.com/ru/current/Manual/index.html
GameObject gameObjectCopy = UnityEngine.Object.Instantiate(gameObjectOrig, gameObject.transform.position, base.transform.rotation) as GameObject;
https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html
Если чсериалитзатор напишешь - можешь
Ну так пусть он автоматически идет до точки где он может сесть, разворачивается, и только потом садится.
Я вообще по жизни победитель. Вот сижу и побеждаю в гдаче.
https://www.youtube.com/watch?v=UkvHydwP2mw
алсо можно ли к такому физичному телу применить инверсную кинематику, анимацию?
Вариант с не физичной копией физичного человечка, с последующим присваиванием целям пружин положения анимированной копии меня не очень устраивает.
Хочу еще сделать возможность хвататься ручками за объекты.
Witcher 3
Каков самый лучший ресурс для изучения юнити? На английском.
а мог бы игры делать
Эти строчки не работают.
gameObject.GetComponent<Material>().mainTexture = myTexture;
gameObject.GetComponent<LineRenderer>().materials[0].mainTexture = myTexture;
https://docs.unity3d.com/ScriptReference/Material.SetTexture.html
название слота текстуры найдешь в коде твоего кастомного шейдера
Спасибо. Все получилось!
Дополню что игра 2D, но с изометрией.
Да, пишу на шарпах. Нужен метод, который меняет положение слоя при проходе какой-то точки.
Не обязательно даже при проходе точки, просто каким образом кодом можно изменить положение слоя?
Ну берёшь и без задней мысли меняешь в свойствах спрайтрендерера.
Если я правильно понял, что ты делаешь, то довольно распространенный способ в подобных случаях - менять положение по Z при движении по Y. Слои будут просто заходить друг за друга при движении.
Попробую, спасибо.
Сек, но разве не имеет значения, какое Z, если слои все равно будут рендериться по своей иерархии?
Вчера сделал по тутору с их сайта игру, где шариком надо квадратики собирать, уже чувствую себя охуеть каким гейм-девелопером. Но там много всего на их сайте, я что-то хз с чего начать. Планиров сегодня начать смотреть их туторы по C# и получше разобраться с API юнити. Всё правильно делаю?
График не врёт. Умный человек писал.
>представляю что это, но не очень представляю зачем оно надо кому-то кроме ассетописателей
Асетотаскателям надо конечно же. Я для себя понял, что игра на унити должна создаваться процентов на 90 перетаскиванием ассетов, если нужного ассета нет, ты должен его написать.
И? Такого кривого пиксельщит инди-говна полно на Стим сторе за 59р или бесплатно на Itchio
97% твоих рогапликов - пиксельщит. Ты не ОСОБЕННЫЙ
>микрособенностей
Ну,в такмо случае 500к в первый месяц обеспечены! Ни разу еще не видел рогалика без микроособенностей, все 1:1 как на подбор!
>я пришел к работодателю и такой - а у меня игра есть!
И как думаешь, кого он выберет среди десятков тысяч таких же как ты с игрой? У некоторых по целому пакету игр заплечами и нихуя найти нормальной работы не огут
Оружие напиши. РПГ напиши. Тайкун напиши.
>Тут вообще есть какое-то более менее интересное программирование?
А то. Тут можно так глубоко уйти в абстракции и выстраивать сложные системы. Либо можно обмазаться синглтонами. Можно найти золотую середину.
Ну так 3д говна будто особо меньше. Пиксельщит хотя бы не тормозит в локации 2х2 с тремя объектами.
Этот ананас пиздит, не слушайте его ребята, просто конкуренцию снижает, демотивируя вас.
.Activate Windows
Короче я понял, пацаны, надо нихуя не делать, вот тогда-то деньги рекой потекут, и на конференциях все награды твои будут.
От души, браток.
Проблема может быть в том, что половина людей будут продавать свое поделие как революционную индюшатину из 3128-го года. И в том, что тетке в HR будет похуй на инновационность твоего игоря.
У каждого первого "игра охуенная"
И тем не менее, 90% Стим стора - полный инди-трешак на коленке сделанный.
Твой не будет исключением. Или ты там Ori and The Blind Forest 3 делаешь? Осилишь за пару лет то, что команджа профессионалов 3 клепает?
ну давай
>90% Стим стора - полный инди-трешак на коленке сделанный
Последствия низкого порога вхождения в юнити и гамак. В стимсторе полно и просто натасканных ассетов.
>Ori and The Blind Forest 3
Нет, я решил сразу крузис3
Блендинг анимации для кого сделоли?
Констрейны к земле.
Никаких, все просто и прозрачно.
Ну нет, я не настолько тупой.
Эту статью я читал еще в день, когда она появилась, и в ней ни слова, ОТКУДА брать дистрибутив юнити. Ни ссылки, ни направления, ничего. Автор выясняет, как подключить адекватную среду к юнити, а я еще даже до этого шага не дошел.
Хуйня подход. Тебе в мануале написали: DONT DO IT MOTHER FUCKER
Алсо тормозить будет на некоторых платформах (или вообще не работать, лол)
Некоторые платформы имеют кусок гусе вместо файловой систмы
https://unity3d.com/ru/learn/tutorials/temas/best-practices/resources-folder
Best Practices for the Resources System
Don't use it.
А можно в редакторе как-то посмотреть, какие ресурсы подгружаются во время игры? Чтобы оптимизировать эти моменты.
Не, хотелось бы увидеть цепочку ресурсов, которая загружается. Например, грузишь через ресурсы скриптабле обжект, а у него ссылка на префаб, у префаба ещё ссылки.
Есть какие-нибудь еще варианты? Можно ли сделать вот так:
void CreateInstance()
{
base.CreateInstance();
InitObject();
}
Сделал 2D-рэгдолл с помощью HingeJoint2D. Вроде бы все и хорошо, но при перетаскивании (читай - впечатыванием) в стену или просто болтая его из стороны в сторону, он начинает деформироваться (руки и ноги впечатываются в тело даже при наличии коллизии между ними, смещается позиция конечностей и головы). Рэгдолл переношу через rb2d.MovePosition в промежуточную точку. Как фиксить, подскажи.
Сделай класс, который будет инстанцировать твою скриптабл хуитку, наполнять контентом и возвращать ссылку.
> Некоторые платформы имеют кусок гусе вместо файловой систмы
Но получается при Resources.Load геймобжект грузится в озу и больше обращения к файловой системе(никаких подгрузок/кеширований/что еще можно придумать с использованием файловой системы) не будет, так?
Вроде как да.
> The Resources folder is also useful in trivial cases, when all of the following conditions are met:
> The content stored in the Resources folder is not memory-intense
> The content is generally required throughout a project's lifetime
> The content rarely requires patching
> The content does not vary across platforms or devices.
Хуй знает, что ты там оптимизируешь.
А то столкнулся с тем, что при столкновение спрайта с бокс коллайдером, спрайт не наносит урона. Такое вообще возможно или я проебался в коде?
Он там есть. 2д коллайдер с обычным могут взаимодействовать, я этого не могу понять.
Нет.
Так вешай на спрайт обычный коллайдер, а не 2д. Официальный туториал про космические пострелушки открой, всё там есть.
Она кидается byte[] из штатного NetworkTransport.QueueMessageForSending.
Все бы ничего и все заибися, но юневая сеть может принимать не более 64 кб. т.е. буфер у NetworkTransport.Receive не может быть более 65535 байт. Пофиг какой канал ты используешь, хоть по 256 байт свой message порежь, в итоге оно соберется в сообщение, которое придется Recieve, и оно не должно быть больше 65535. Если больше - гром, гроб, кладбище, пидор. А если вкратце - то, куда приходит жЫрный пакет намертво виснет (найс секурити).
Но как же быть с сравнительно большими данными (содержимое инвентаря, диалог с пиздожорчиком и прочее)? "Резать" byte[] на куски? Но как потом пересобирать при получении?
Гдэч помогач?
Cоздаю анимацию, кликаю чтоб она открылась в animation, жму запись, щелкаю на полосу времени, выбираю ногу у перса и двигаю чуть чуть, типо начальное положение, потом снова на полосу времени, двигаю ногу. При нажатии на плей анимации нету, хотя со всей моделькой целиком это работает. Как челика анимировать? Ключи удалять и заного ставить пытался, с кривыми тоже.
лишняя лягушка приклеилась, но плевать
Анимируй в блендере или еще в чем, что как бабуин.
Модельку сам пилил? Есть некоторые готовые модели с готовыми анимациями и запилить новые не получится через редактор в юньке
Вы видите копию треда, сохраненную 19 января 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.