На 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 лицензию.
- Движок Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу 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 - это начать делать игру и по мере разработки гуглить непонятные моменты.
>>442125 Двачую. Уже чувствую, как простейшая двадэ головоломка уровня злых птиц лагает от космического количества слоёв абстракции. Гамак, заточенный чисто под 2д, передаёт привет. С ним годот, констракт и остальные.
У меня в игре допустим 5 экранов. Мне надо каждую реализовывать в виде сцены? А как перекидывать между ними геймобджекты с менеджерами? Ну и отсюда вопрос как делать экран с загрузкой и паузу в игре.
>>442151 Ну твою то за ногу, ну пройди ты официальные туториалы на сайте Юнити, поделай туториальные игры. Тогда не будешь задавать вопросы, которые в силу их безграмотности никто даже не может понять, не то что ответить. Что у тебя за пять экранов, пять мониторов чтоли, игра для биржевых аналитиков?
Если тебе нужно грузить сцену, при этом не уничтожая что-то что-то, есть Dontdestroyonload, есть LoadSceneMode.Additive; можешь что-то сохранять в ScriptableObject. Экран с загрузкой - если я правильно понял, речь о SceneManager.LoadSceneAsync(додуешь или нагуглишь, как сделать индикатор загрузки). Паузу можно ставить с помощью time.timescale = 0f Может это и не самый грамотный способ, но извините.
Есть ли альтернативные физические движки, в которых все действующие на объект силы всегда доступны наружу, или они все как и дефолтный на черной магии работают и дают читать только конечный вектор?
>>442129 >>442125 Тот же римворлд, например. Работает быстро и чисто. Годот - питоноговно, констракт примитивен и не имеет столько возможностей, сколько есть у юнити, гамак - ну это вообще несерьёзно. Можно на вашем гамаке или констракте сделать что-то уровня Heart of Iron 2? На юнити можно.
Как сделать поиск путей в 2d? Мне предлагал анон, чтобы враг просто шел к точке, в которой последний раз видел тебя, но проблема в том, что у меня также есть агр на шум.
>>442166 Гамак - серьёзно. Хотлайн, hyper light drifter, 12 is better than 6, spelunky, nuclear throne и прочие кагбэ намекают. Годот - штука специфичная, в него вкатываться трудно пзц. За констракт не отвечаю.
>>442177 Вообще не вижу проблем. Берёшь алгоритм A-star, ведёшь врага по пути, при появлении шума меняешь конечную точку на источник шума и заново строишь путь. Прафет.
Подскажите, как можно сохранить для каждого скина, куплен он или нет через JSON. Просто создать для каждого кубика отдельную булевую переменную, а затем сериализовать класс? Просто массив или Dictionary<> JSON не сможет реализовать, так как это ссылочные типы.
>>442180 Да никто не спорит, что можно сделать неплохой экшн с видом сверху, рпг ил платформер. Но 2D этим не ограничивается. Ещё есть большие и сложные глобальные стратегии, с кучей графиков и расчетов, с огромной непрерывно обновляющейся картой. И тут юнити будет лучше.
>>442195 Вычисления массивов данных можно проводить хоть в чистом си, всем насрать. Памятью чаще всего заведует ОС/виртуалка, нежели двигло, особенно в языках с мусоросборщиком. Тут как раз Юнити будет лишним.
Нубский вопрос: в модельках из ассет стора кости рига торчат наружу под углом 90 градусов. А в туториалах в основном делают кости так, как они расположены у нас - вдоль конечностей. В чем здесь соль?
>>442195 >Ещё есть большие и сложные глобальные стратегии, с кучей графиков и расчетов, с огромной непрерывно обновляющейся картой. Которые ты никогда не сделаешь. Потому что помимо программиста и художника в команде должны быть несколько математиков и экономистов, которые допилят баланс до играбельного состояния. Без баланса хардкорные игроки скажут "фи" и все.
>>442218 Кости не должны торчать, лол. Если торчат, то кто-то что-то похерил при импорте модели и сетка не привязалась к костям. Делают Т-позу потому что так проще моделлить и рисовать веса на модели при риге. Если по стойке смирно будет стоять, то очевидно, что заебешься из за близости рук к телу.
>>442145 Уже не делаю, подумал что лучше в каждом объекте, что может получать урон, проверять в OnCollisionEnter2D() столкновение и через switch определять тип попавшего снаряда и снимать HP. Хотя EventManager всё равно до конца не ясен
>>442253 Я ивенты как место связи использую. Туда помещаю всё, что происходит в самой игре (а не просто в коде) и от чего зависят много скриптов разом. Скажем, смена хода, удар, движение и всё такое, т.е. не банальности, а как бы комплексные действия.
>>442199 Думаю, он говорит про кнопочки (которые хуёво устроены) и про панельки с текстами (которые тоже хуёво работают). Довольно просто настроить и значения туда-сюда подогнать. А с туториалами вообще можно целую игру запилить не погружаясь в дебри программирования. Мечта любого парадоксоёба-моддера, короче.
В общем, я не нашёл ничего про инпутфилды кастомные, поэтому придётся использовать встроенный. https://docs.unity3d.com/ScriptReference/UI.InputField.html Я правильно понимаю, что могу сделать наследующий класс инпутфилда, взять любую функцию из списка, ебануть оверврайт, поставить base что-то там, чтобы выполнялось то, что выполняется в оригинале, и дописать своё поверх? Что из этого отвечает за включение/выключение режима письма в бокс? Activate и deactivate? Скажем, мне нужно в изменять вводимый текст, чтобы при введении какого-то слова оно окрасилось в какой-то цвет. Понятно, что нужно подменить текст. Что и куда менять надо из этих функций?
>>442288 Прикрутил EventManager описанный в "Искусство создания сценариев в Unity" Алана Торна (стр146). EventManager отсылает уведомление о событии всем подписанным на него объектам. Каким образом можно отослать уведомление конкретному подписавшемуся из нескольких?.
>>442304 Ну, чисто технически, ты можешь конкретному отослать, но менеджер эвентов - это тот еще головняк и лучше используй его, когда у тебя есть события типа: пауза, на локации пошел дождь, тян серит вонюче. То есть, там, где тебя не ебет флоу.
>>442304 Я для своей игры так делаю: Отдельный объект урона, разные типы урона наследуют от основного урона. В основном объекте метод нанесения урона, в который заносятся параметры от участвующих юнитов. Удары случаются только от абилок, так что этот метод (ссылка на объект урона занесена в абилку как тип урона, также удобно на панельке абилки информацию об уроне выводить) вызывается из абилки, когда она используется. Всякие баффы тоже отдельными объектами, в них есть список подписанных на конкретный бафф юнитов, у юнита список наложенных баффов (для удобства, опять же), если есть баффы, их методы используются до абилки или после. Через ивенты в принципе будет то же самое (я думаю), но ты будешь тот же самый метод вызывать из другого места просто. Может быть проще следить, но я что-то сомневаюсь, что в этом дерьме так уж много строк, чтобы не уследить.
Подскажите, как можно сохранить для каждого скина, куплен он или нет через JSON. Просто создать для каждого кубика отдельную булевую переменную, а затем сериализовать класс? Просто массив или Dictionary<> JSON не сможет реализовать, так как это ссылочные типы.
>>442366 ты задал вопрос через жопу. опиши структуру того что ты пытаешься сериализовать. и отдельно опиши более детально что ты вообще пытаешься делать. желательно с картинками.
Блять, гдач, спасай. Это либо юнити совсем охуел, либо я в конец даун отбитый: Проставил галочки как на пикриле, собираю билд на ведро, но ебучая черная полоска с дебагом все равно всплывает сверху. Галка девелопмент билд отключена. Спасай, анон, что это за хуйня?
Анон, вот смотри. У меня создаются два одинаковых объекта. К каждому прикреплено по еще одному. При этом есть скрипт прикрепленный к префабу. В нем указанно, что если нажать на прикрепленный объект, то первый изменит местоположение.
У меня же получается, что когда я нажимаю на один объект, местоположение меняют оба. Почему так и как вообще лучше реализовать это?
>>442299 >Думаю, он говорит про кнопочки (которые хуёво устроены) и про панельки с текстами (которые тоже хуёво работают). Довольно просто настроить и значения туда-сюда подогнать. А с туториалами вообще можно целую игру запилить не погружаясь в дебри программирования. Мечта любого парадоксоёба-моддера, короче. Это про юнити или констракт?
Анон, а можно как-то осуществить проверку нажатия RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); не по тегу или имени объекта на который нажали, а тому объекту, который я объявил в самом скрипте. То есть я объявляю public GameObject Obj; И мне надо совершить действие после клика на него. Но не через if (hit.collider.gameObject.tag == "...") или name.
>>442428 >>442447 Вот собранный из говна и палок рейкастер. Правда, он для 3д. Суть его в том, что он видит одновременно и ГУИ, и сами игровые объекты. https://pastebin.com/n2Q6iCRg По умолчанию видит любые объекты, которые наследуют от IClickable, и берёт первый, в который упирается луч. Объект обязательно должен иметь image. Добавляешь к объекту новый компонент RaycastFilter и используешь метод Initialize, чтобы рейкастер мог перестать замечать части изображения, которые за пределами коллайдера. Добавляешь компонент RaycastHidable и наследуешь от IRaycastHidable, ставишь в нём owner'а объект, к которому добавил RaycastHidable, и затем можешь переключать бул raycastHidden, чтобы рейкастер мог видеть/игнорировать этот объект В переменной hovered лежит объект, в который упирается луч после фильтров. OnMouse*Custom'ы в видимых рейкастеру объектах вызываются в соответствующий момент.
>>442589 > Пуля доходит до точки где был курсор в момент выстрела А схуяли она должна через MoveTowards лететь дальше координаты конца вектора? Вычти от mousePositionGlobal свой tramsform.position и внезапно получишь направление (геометрию в школе прогуливал что ли?), а по этому направлению уже пускай свою пулю по прямой.
Подскажите, аноны, как правильнее: игровой объект сам вызывает в менеджерах аудио, подсчета очков, считалке врагов на карте и прочих и прочих сециальные методы для воспроизведения реакции на событие (например, смерть); все менеджеры являются потребителями одного открытого делегата-события в классе игрового объекта?
>>442590 Ты про OnMouseEnter/Exit? Если панелька в GUI будет висеть над объектом, то случится хрень полная. Мышка зашла на панель, мышка заходит на объект, но не вызывает OnMouseExit для панельки. С таким рейкастером не нужно придумывать охуительные системы вычисления, над чем же, бля, мышка висит.
>>442592 >>Геометрию в школе прогуливал что ли? Ага. Вместо уроков шел играть в вов в клуб. Даже не знаю что было лучше -полюбить игори или знать геометрию? Спасибо, всё работает как нужно
>>442594 Никак. Тебе решать, что лучше. И тот и другой подход имеют право на жизнь. В идеале заранее спланируй какие у тебя там менеджерв должнв быть и что они будут делать, а также подумай не избыточны ли они.
>>442616 Игровая импотенция у геймдевелопера или у игрока? В первом случае это профессиональная деформация, второй случай у каждого по своему развивается.
Считаю что лично мне игровая импотенция не светит - за всю жизнь я прошел около 5-7% существующих игр. К тому же я каждый день повторяю мантру про охуеность геймдева Видео-игры - апогей современного творчества....
>>442120 (OP) Привет, как сделать кнопку интерфейса видимой только во время нажатия кнопки (E) клавиатуры? То есть, какая команда отвечает в скрипте за это?
>>442622 Имхо, как раз именно сессионки становятся причиной игровой импотенции. Дрочить одно и тоже рано или поздно надоест, а осадок в виде рвотной реакции на все игры вообще, остается.
>>442620 > В первом случае это профессиональная деформация Профессия еще не началась, а уже деформировался. 5% игр точно не прошел, но много овощил в РПГ (500 часов в Скайриме благодаря модам), преимущественно из-за красоты и загадочности миров, интересного лора. Теперь вот пытаюсь сделать подобный рай для аутиста.
>>442120 (OP) Аноны, хелп! Писал на юнити игру с февраля 2017, значит все собрал, все работает и решил я накинуть плагинов с рекламой и достижениями. Выбрал плагин от аподила и плагин от гугла с достижениями. И они вместе никак не хотят работать. Вылетает ошибка unable to convert java dex format. Проблема в том что в папке plugins слишком много плагинов и андроид не может собрать апк. Подскажите, может кто-то с таким сталкивался. Пытался собрать через градл, но там полетело еще больше ошибок. Хочется чтоб и ачивки были, и копеечка с релкамы.
Я использую переменную в которую подгружаю ссылку на текущее оружие: currentWeapon = new Rocketshoot(); . Для стрельбы вызываю соответственно currentWeapon.Shoot() >>442617. В совете выше предлагается использовать AddComponent вместо new и я не понимаю как именно, ведь мне нужен весь объект а не какой-то его компонент.
вопрос. делаю сетевое сессионное дрочево через unet. хочу инвентарь. есть где почитать про то как правильно сделать синглтон на сервере который бы контролировал все это дело?
>>442707 Ни фига себе, у тебя headless server будет? На hlapi ваяешь что-то вроде авторитарной архитектуры? Unet так то фигня сырая, мало кому нравится.
>>442722 я сорт оф сделал прототип с hlapi. на сервере болтается синглтон который сообщает клиентам всякие мелочи вроде какая карта выбрана, где текущий респавн и прочее. общий статус игры в общем. но внутри какая-то нелепая мешанина с делегатами. пару дней назад полез в llapi и меня устраивает, но туда проникать буду долго. теперь вот у двача решил спросить советов
>>442730 Hlapi в основном для прототипов и советуют использовать. llapi смотрел, вроде можно работать, но это какой-то гемор. Есть же готовые решения. Мне например Photon понравился из п2п релейки. Вот про его отличия от юнета https://www.youtube.com/watch?v=Y1my5bKhKJY Правда, родные скрипты вероятно придется переделывать/допиливать, PhotonTransformView и т.п.
Что касается клиент-серверной архитектуры(если ты ее делаешь), поспрашивай у других анонов. Для нее тоже есть готовые решения, Forge networking например, но я их не тестил.
>>442732 спасибо за ответ, да. да, я уже смотрел это видео и знаю. делаю клиент-серверную архитектуру, но чтобы сервер мог к себе присоединиться как клиент ещё. ещё несколько дней посмотрю llapi, хочу попробовать сделать его вместе с hlapi. сделать чтобы общая информация передавалась через llapi и чтобы оно служило как метод синхронизации состояния, но с перемещением и прочими мелочами вроде и hlapi неплохо справляется. хотя все это выглядит сомнительным. потом наверно фотон посмотрю и Raknet планировал глянуть.
>>442702 > подгружаю ссылку на текущее оружие: currentWeapon = new Rocketshoot(); Нихуя не понял твоей логики. Ты из нихуя создаешь новое оружие в переменной, в которой оружие свапается постоянно. На пике то, как твой шутан должен примерно работать, на видео примерно тоже самое описывается. https://www.youtube.com/watch?v=bvRKfLPqQ0Q
>>442766 ShootingMechanic — это MonoBehaviour. В моем примере от этого класса наследуют типа механика стрельбы снарядами по прямой и механика стрельбы рейкастом. Можешь еще прикрутить гранаты и спавн взрывчатки на точке. В ScriptableObject'е (который оружие) потом навешиваешь ту или иную механику. Только в оружие тебе нужно еще вписать префаб снаряда, иначе их хуй передашь.
> Выдает NullReferenceExeption в 16 строчке (твой пик). Так допиши проверку на null, одной строчкой решается.
>>442778 Лол, блядь, потому что конструктор арсенала просто создает пустые ячейки, все внутри него равно null. Тебе надо в префабе игрока в арсенал закинуть хотя бы пистолет. Шаблон под оружие у тебя есть, надо просто сделать вариант, который можно назвать пистолетом по урону и скорости стрельбы.
>>442785 Можно последний даунский вопрос? >>надо просто сделать вариант, который можно назвать пистолетом Это должен быть скрипт наследующий Weaponq? Или префаб? Ни одна хуйня не подходит.
>>442793 27-ая строка позволяет пилить ассеты из этого класса. Т.е. отдельную инстанцию объекта. В браузере файлов Унити (ну или как он называется, ты меня понял) на ПКМ создаешь ассет, настраиваешь урон, кд, патроны, спрайт/модель. Все, у тебя есть пистолет. Только сериализуй struct Weapons, чтобы он появлялся в компоненте игрока и кинь пистолет туда.
Продолжаю неторопливо разбираться в инпут филдах. Есть у меня, значит, девконсолька. Всё работает, гайд в интернете есть, открывается-закрывается, кнопки жмутся, проблем нет. А есть сам инпут филд с дитём-текстом. Инпут филд тоже работает, я к нему прикрутил почти всё, что мне нужно, но при тесте встала проблемка: похоже, инпут филд имеет свой набор быстрых клавиш, и при нажатии эскейпа он принудительно удаляет вписанное в инпутфилд. Как и где это лечить? Всё, что я с этим инпутфилдом делаю, это вызываю Activate/DeactivateInputField(). Эскейп тоже вызывает в одном случае Deactivate, но аналогичный вызов через клик на пустую область экрана не стирает набранный текст
Здарова, кабаны, почитал тут вашу шапку, воодушевился, да, решил тут свой инсайд запилить. Как я понимаю у вас здесь сотни таких появляются постоянно и затем так же закономерно исчезают?
>>442734 >>442732 в итоге полез ещё дальше в llapi. вообще, теперь когда я узнал как оно примерно работает то код hlapi который в открытом доступе лежит стал заметно понятней. наверно можно и его будет напильником допилить. но там такое чтиво что прямо зачитаешься.
>>442812 за пару лет зоонаблюдений в этом разделе и конкретно в юнити-треде я видел некоторое дерьмо. если достаточно упёртый и не тупой то и ты увидишь.
Суп дроч, помогите мимокроку, решил с камрадами поиграть в survivors viy, у меня какой-то косяк с освещением, у камрадов все неплохо видно метров на 20-30 вперед, а я как слепой крот вижу только на 5 метров вперед и то с фонарем, без него просто черный экран, так вот, проблема в отсутствии каких-то библиотек на моей пекарне, или просто видюха говно? (В игре нет настроек гаммы или дальности прорисовки) заранее спасибо за ответ
>>442819 Хотел пошутить про чтение 2к строк кода, но потом F3 и нашёл protected EditState KeyPressed(Event evt) и дальше case KeyCode.Escape: { m_WasCanceled = true; return EditState.Finish; }
>>442821 зато чтение 2к строк кода всегда сработает! а ты и не можешь, не виртуальная функция же. можешь просто скопировать весь код и переписать как тебе там надо. хотя вон единственная функция которая эту вызывает виртуальная. public virtual void OnUpdateSelected(BaseEventData eventData). оверрайдни её, скопируй её код и сделай проверку с кейкодом, например.
>>442823 Спасибо за помощь. Вон, выше в треде про велосипеды писали, мол, зачем, в юнити же всё есть. Конечно есть, но вот как какая-нибудь подобная хуетень вылезет, так всё равно всё копировать и переписывать
>>442821 Парни, подскажите в двух-трёх словах, а там уже я подхвачу. Есть NavMesh, на нём есть статичные преграды,в виде, например кубов с коллайдерами. Есть NavMeshAgent'ы, висящие на, допустим, капсулах. Скажите куда копать чтоб одна капсула, видя другую враждебную капсулу, скрывалась за ближайшим укрытием. Каждая капсула рейкастит по враждебным капсулам, если есть контакт, то она так же рейкастит пути укрытия, так? Вот эти самые пути укрытия я не сильно понимаю.
>>442824 на здоровье. да ладно, подумаешь какой-то ебучий UI, он в открытом доступе лежит. его же не просто так положили открытым. решать такие проблемы это не велосипеды делать. другое дело когда тебе действительно надо писать велосипеды. когда понадобится хитровыебаная навигация, ИИ, процедурная генерация, собственные инструменты заточеные под проект и прочие интересные вещи. вот тогда начинается интересное.
>>442825 лол. честно? хороших методов мало. можешь сделать несколько самплов на навмеше рядом и проверять видимость до них, а потом просто выбрать самый ближайший. но ничего тебе не гарантирует что эти точки будут достижимыми. как раз такие проблемы и требуют кастомных решений.
>>442825 Первый костыль, который приходит в голову, это проверка наличия укрытий через коллайдер, затем смотреть на каждом укрытии, будет ли агент защищен.
>>442830 на здоровье. учитывай что я не написал никаких крутых алгоритмов навигации, агенты даже не знают что рядом есть другие агенты и будут просто толкать друг друга. там ещё писать и писать, а ведь надо копать в другие стороны ещё. с другой стороны можешь пользоваться двумя навмешами сразу. навмеш юнити тоже очень хороший. https://www.youtube.com/watch?v=Cjf7QEJ4HCM вообще навмеш а самом деле может делать гораздо больше чем от него обычно ждут. когда у тебя на руках пиздилиард вокселей которые описывают всю геометрию вокруг и можно управлять ими как хочется то сразу столько возможностей.
вообще навигация в играх это большая и интересная тема. у тебя может быть и простое решение, зависит от того как у тебя устроен уровень.
>>442120 (OP) Анонусы, возникли вопрос. 1. Во-первых, существуют ли сайты с которых можно скачать платные ассеты? Это ведь везде так — если есть что-то платное, то где-то на торрентах по-любому можно найти крякнутое. Но я перерыл всё что мог и нихуя не нашёл. Вообще пусто, даже каких-то устаревших ассетов платных не нашлось. Такого в природе вообще не существует и все прилежно покупают? Даже на торрентах можно найти крякнутый Unity Pro максимум 5.2 версии, что примерно двухлетней давности. 2. Как привязываются покупки ассетов? То есть понятно, что к аккаунты. Но вот я зашёл на их сайт, залогинился, купил ассет. А потом иду и логинюсь под этим аккаунтом в про версии. Мне пиздец или они это не чекают? Можно ли на разных компьютерах пользоваться юнити под одной учёткой (и качать купленные ассеты)? 3. Третий вопрос более локальный к моей проблеме. Возникла задача заимпортить анимацию Point Cache. В инете либо устаревший скрипт, либо покупай за 35 бачей ассет для 5.6+ версии. Неужели все, кто сталкивался с такой задачей шли покупать ассет? А что если версия у меня старее? Мне уже никак не решить эту задачу тогда?
>>442842 двигать его по направлению тела? ну тоесь лол если же вычесть из позиции Б позицию А то ты получишь направление от А к Б.
>>442843 да. существуют. плохо искал, плохой пират. ищи лучше.
>>442844 можно сказать это и делает мой навмеш. вообще вокселей слишком много. чтобы это хорошо работало надо писать свой рэйкастинг чтобы он происходил на гпу быстро-быстро.
>>442848 >можно сказать это и делает мой навмеш. вообще вокселей слишком много. чтобы это хорошо работало надо писать свой рэйкастинг чтобы он происходил на гпу быстро-быстро. Погоди, у тебя рейкастинг постоянно идет? Я имел в виду, что можно отрейкастить один раз все статические укрытия.
>>442859 нет конечно. укрытия являются побочным продуктом создания навмеша. у меня там нет рэйкастинга по моему нигде вообще. там магия линейной алгебры. но чтобы проверять валидность укрытия надо же делать рэйкасты. притом на нескольких высотах если есть перепады в них. если брать самплы точек вокруг то даже если точки каждые пол метра то выходит под добрую сотню точек если надо проверить хоть какое-то значимое пространство вокруг на предмет укрытия, притом количество проверок множится на каждого кто может это наблюдать. под этак и выходит по 2-3к рэйкастов в итоге, что пиздарики. у меня вот есть понятие о укрытиях, пространстве которое находится только рядом с препятствиями. можно проверять не сотню точек, а десять и на гораздо большей дистанции. но опять же точка рядом которая находится в небольшой ямке может быть гораздо лучше.
плюс опять же проблемы с навигацией. даже если ты знаешь что рядом есть укрытие то проверить цену перебежки к нему можно только на навмеше. потому что укрытие может быть на другой стороне стены.
вообще методы поиска укрытий сильно зависят от геометрии уровня. если они представляют собой коридоры из пары стен которые все на одном уровне то разумеется все заметно проще. а если у тебя лес с камнями то охуеть можно.
>>442848 Не, я хуево сформулировал Например есть спрайт стрелочки , как сделать так чтобы объект(этот спрайт) всегда двигался в направлении стрелочки , а не по Х например
>>442895 Тут тебе нужна геометрия. Как вариант - берёшь точку и берёшь точку с другой стороны объекта, меряешь расстояние между ними, затем берёшь другую точку рядом и противоположную ей, снова меряешь, и так повторяешь, пока не найдёшь самое большое расстояние между точками. Это расстояние будет означать самую большую ширину объекта, и по точкам от этого расстояния можно найти прямую. Затем можно найти "вес", то есть с которой стороны спрайта больше точек закрашено, и по нему определить, в какую сторону смотрит стрелка.
>>442895 Братан, ты походу шаришь. Расскажи как сделать вот у меня есть спрайт хуя, как сделать чтобы он все время двигался тебе за щеку, а не по Y например
>>442741 >>442800 Мудила снова на связи. >>В браузере файлов Унити (ну или как он называется, ты меня понял) на ПКМ создаешь ассет NullReferenceExeption выдает если в 28 строчке изменить класс с abstract на обычный, то хотя бы создается пустой объект Где я мог проебать ссылку?
>>442952 Скорее всего автор пикчи обосрался и тебе нужно создавать не экземпляр абстрактного класса, а экземпляр наследующегося от него класса. Но вообще я нихуя не понял что там за решение.
>>442952 Я наебался и класс не должен быть абстрактным, конечно же. > хотя бы создается пустой объект Если он без полей в редакторе, прописывай [SerializeField] над private переменными.
Написал реализацию через интерфейсы IdragHandler и пр. таскаются.
Есть два массива, для карт в верхних ячейках и в нижних. Тип массивов лучше сделать ГОбджекты или Классом скрипта? Не могу решить как удобнее.
И главное, как проще реализовать изменение значений массивов этими перетасканными картами?
Или сначала менять значения, а от них уже таскать?
Сейчас пробую сделать свойство у карты, допустим CurrentCell, где сеттером присваивать значение нужному элементу статического массива из ячеек. То есть допустим есть GameObject[] TopCells, я туда перетащил, ОнЕндДраг получил значение номера клетки, взятое из OnMouseOver клетки, присвоил его CurrentCell карты, дальше сеттер пихает gameObject в массив.
СЛОЖНО ВЫХОДИТ, совсем голова не варит, как проще сделат?
>>442963 Бля, впизду. Твой уровень интеллекта не достижим для меня. Я разобрался на половину, но всё равно тут ещё слишком много копать. А мне нужна была всего лишь строчка if (toCd < Time.realtimeSinceStartup) toCd = Time.realtimeSinceStartup + cd;
>>442970 простой тебе совет: если ты валенок то повторяй за другими. когда станет понятно что происходит то делай по своему. вон видяшечки на ютубе посмотри кто как чё делает.
>>442966 Я месяц назад нихуя не шарил. Сейчас тоже, но в меньшей степени. Смотри Live сессии, там один хуй половину основ объясняют, остальную половину догугливаешь если надо, к этому всему сверху еще и примеры работающей игры (ну или хотя бы механики).
>>442971 Стараюсь так и делать. Просто не всегда очевидно что именно гуглить, а если что-то нагуглил, соответствует ли это твоему уровню знаний и не говно ли вообще. >>442972 >Смотри Live сессии Посоветуешь что-нибудь?
>>442977 > Посоветуешь что-нибудь? Появляется проблема — гуглишь — скорее всего находишь сессию — получаешь развернутое решение с плюшками. Я тебе с самого начала кидал по ScriptableObject'ам сессию. Там очень хорошо описан вариант использования как раз для решения твоей проблемы.
>>442977 ищи на ютубе длинные серии из видео, где кто-то делает что-то с нуля достаточно продолжительный срок. мне например понравились старые видео этого бородоча. https://www.youtube.com/watch?v=YYqzz1dy3Ak&list=PLE5C2870574BF4B06 он там неебическое количество времени делал хуйню. играбельного он ничего не сделал, но как учебный материал более чем сойдет.
Докладываю о ёбле с инпутфилдами. Охуительная, блядь, система. С одной стороны, есть такая жуткая ненастраиваемая вещь, как private методы и булы внутри класса инпутфилда, благодаря которым хрен ты что поменяешь, не скопировав все 2к строк или не применив охуительные познания в порядке апдейтов. Не хочешь, чтобы при включении инпутфилда текст выделялся? Изволь сообразить десяток костылей! Не, оно понятно, что всю теорию и практику кто-то где-то уже сообразил, но честь-то знать надо. Мало этого, так ещё с инпутфилдами крепко переплетается инпутменеджер (тот экран с настраиваемыми клавишами) и анально внедряется во все области жизни всего игрового интерфейса. Отключить оси инпутменеджера нельзя, - посыпятся nullexception'ы, - чтобы private методы изменить нужно весь код копировать и надеяться, что у юнити какой-нибудь скрытой хуйни в каком-нибудь другом классе нет, из-за которой весь код на плаву держится. Ладно, хорошо, можно навигацию отключить, но так дело-то в том, что это говно запривачено по самое небалуй в коде. Люди на эту херь с 2004 года жалуются. Как это блядь вообще?! Я давненько так не охуевал, если честно. Как вы с этим живёте?
а делать синглтон для unet то и не надо было в итоге. у меня случилось просветление как же все сделать так как надо. надо было просто лучше прочитать документацию как всегда.
>>442987 вся твоя проблема выглядит как что-то что не является проблемой изначально. для меня загадочно нахуй ты вообще делаешь то что делаешь. копирование класса в случае с инпут филдами разумеется сработает, он же там никуда не лезет глубоко в сам движок. вообще ты всегда можешь воспользоваться старым гуи, если тебе новый не нравится, или даже скачать альтернативные решения вроде NGUI. тебе вот всяких вещей дали, сделали за тебя много, а ты жалуешься. можешь вот UE попробовать, он опенсорсный же, лол. но пойдя туда будь готов что если ты что-то дёрнешь то потащишь код со всего движка. а если глубоко залез то хуй тебе а не обновления. что по твоему проще?
вообще если надо то не копируй весь инпут филд, всегда можно написать свои инпут филд с игрищами и блудницами взяв за основу код уже существующего. вот как я например с классом графа аниматора поступил. сделав все как надо тебе всегда получаешь ожидаемый результат. а тут за тебя и так уже почти все сделали.
>>442996 >для меня загадочно нахуй ты вообще делаешь то что делаешь. Вот представь обычную консоль на тильду. Вроде просто, из самых простых палок и говна нормально работать будет даже без дрочки, но если хочешь хотя бы минимального удобства, то приходится искать способ отрубить принудительное выделение всего текста при включении поля, искать способ менять взаимодействия клавиш в самом классе, чтобы в случайных местах не отрубалось и не прыгало, искать способы убрать инпутменеджер, чтобы нажатие на стрелку не переключало фокус, и всё такое подобное. Да, это не глубоко лезть, да, погуглишь, и всё будет, но блин, вы на поделки на юнити посмотрите, там везде одни и те же проблемы, и эти проблемы с самого начала юнити висят. Пишут функционал, который нужен в узких случаях, но для его работы нужно анально ограничить тот функционал, который нужен широко. >всегда можно написать свои инпут филд с игрищами и блудницами взяв за основу код уже существующего Ну, это выше моего поверхностного понимания юнити. >тебе вот всяких вещей дали, сделали за тебя много, а ты жалуешься. Звучит как "жри, что дают". Не пойми неправильно, я благодарен, но это жесть какая-то. На кой чёрт писать фичи, которые нужно самому пользователю вырезать, чтобы они ничего не портили?
>>443002 >The IMGUI system is not generally intended to be used for normal in-game user interfaces that players might use and interact with. For that you should use Unity’s main GameObject-based UI system, which offers a GameObject-based approach for editing and positioning UI elements, and has far better tools to work with the visual design and layout of the UI. >вот они делают только то что делают. ничего лишнего. Вижу. И как взаимодействие игрока с прямоугольниками делается? Смотрим, как широко раздвинули в коде прямоугольник, смотрим, влезает ли в эти координаты мышка, и от этого отталкиваемся? Ну, я уже присобачился использовать панельки во всех ролях, но гуи действительно выглядит получше.
>>443004 там своих интересных трюков полно. для того чтобы узнать расположение курсора в прямоугольнике там есть такая клевая хуйня как система эвентов, например. можно написать что-то в духе if(rect.Contains(Event.current.mousePosition)){} и узнать находится ли мышь в прямогульнике. он хорош тем что он рисуется каждый раз с нуля, в нем не надо никакими эвентами менять значения, чтобы они обновились. для взаимодействия с твоим говном напрямую просто заебись. все происходит в одном месте.
ну а новый гуи хорош производительнотью, своими фичами с скейлом, системой делегатов, тем что он геймобжект, интерфейсами и прочими полезными вещами. для чего-то хорош старый, для чего-то новый. советую знать оба.
>>443048 С документацией там вообще забавная штука, бывает что в старой версии функция подробно задокументирована, а в новой - описание сокращается до ироничного void ComplicatedShit() - "do complicated shit".
>>443057 MVVM типа получается? Вообще насколько часто подобное юзается в геймдеве?
>>443061 Чаще всего в геймдеве юзается индусский код и пластилин. В теории надо ебашить ECS - но на практике все решения находятся в зачаточном состоянии уже 5 лет. Поэтому все ниасиливают и ебашат как получится, но хоть какой-то принцип разделения аспектов желателен.
>>443230 Господи, еще один оптимизатор. Взгляни на какой-нибудь Evil Genius, где под половину объектов отдельные анимации для рабов, и на одном экране у тебя 30 NPC занимаются чем-то своим. Ничего не лагает.
>>443246 > Господи, еще один оптимизатор И не говори. Про стадии разработки бы хоть прочитали. А то поставят на сцену двух болванчиков с тремя анимациями и уже ОПТИМИЗИРУЮТ.
Приветствую. Дайте совет, пожалуйста, как лучше реализовать остров? Точнее, не совсем нет. В общем, суть такова: создаю террейн, делаю остров, ставлю воду... И вижу где она заканчивается. Как сделать так, чтобы вода уходила бесконечно в горизонт? Делать огромную поверхность? Разве это не будет сильно загружать компьютер? Может есть какие-нибудь хитрые способы? (В своё время я считал карты нормалей очень хитрым изобретением, может тут есть похожий способ?)
Ещё один тупой вопрос. Какой инструмент посоветуете чтобы делать скриптовые события без самих скриптов. Слышал есть какие-то системы, где только перетаскивать дорожки
>>443274 единственное для чего они реально нужны это чтобы сказать другим "моя хуйня работает вот так", или "делай хуйню вот так" более ёмко. на этом их польза заканчивается. но на этой доске они не адекватны реальности. потому что встретить тут проект над которым работает больше одного человека уже редкость, а чтобы эти оба человека ещё и код писали и им требовались такие термины так это вообще что-то невероятное. ну так нахуй паттерны? особенно тут? за пределами чего-то примитивного вроде "синглтон"?
>>443277 > потому что встретить тут проект над которым работает больше одного человека уже редкость Над мои проектом вот работает 4 человека. Я кодер, художник, моделлер и композитор. Так что не такая уж и редкость.
>>443278 удивительно. но вернемся к теме паттернов. вот ты используешь эти термины при общении с этими артистами? отличают ли они один от другого? часто ли они лезут в код?
>>443281 Пардон, дружище, я с удовольствием завтра с тобой пообщаюсь, без шуток (а может и сегодня, если раньше вернусь), но надо по работе внезапно отъехать.
>>443284 >Я кодер, художник, моделлер и композитор. >Речь же была про четыре человека Я тебе и посоветовал ещё редактора. Чтобы русский язык твой правил.
Может глупый вопрос, а есть какие-нибудь лекции, статьи, туториалы по "общему графону"? Вот есть шейдеры, всякие эффекты, свет, пост-процессинг, и т.д. А как это все это комбинировать вместе, чтобы походило на скриншоты из реальных современных игр, а не на васянские поделья - бывают такие туториалы? Если не по всему вообще, хотя бы как сочетать [штука 1] + [штука 2] = круто. Извиняюсь за великолепный литературный язык и безупречную ясность мысли.
>>443295 Суть в том, что я вроде начал понимать разные вещи по отдельности, но как все объединяется вместе, для достижения желаемого визуального эффекта - тут не очень понятно. Хотелось бы какие-то примеры в этом духе. "Как сделоть красивую ААА игору", лол.
Меня вот удивляет, что даже платные туториалы в основном заняты всякой залупкой типа как поднять предмет, как лупить мобов. Но ведь все это тривиальные вещи, можно сделать как угодно - не принципиально, если не пилишь убийцу WOW. А вот такие вещи как а) красивый производительный графон б) подводные камни, засады, как не надо делать никогда на удивление редко/мало затрагиваются.
>>443296 да как бы не так и много вещей делают графон. ебани, посмотри, ебани того что не хватает / убери того что слишком много. графон же не код, в один прекрасный момент тебе не придется снести все к хуям, потому что где-то в начале говна наделал. >а)б)на удивление редко/мало затрагиваются. профайлер в помощь, хули. это и не должно затрагиваться.
>>443296 Наверное, не продается. Все-таки геймплей можно сделать на говне и палках вместо фаерболов и мечей, что и привлекает людей, а графон надо еще кому-то рисовать. Алсо, не понимаю, почему с многими туторами идет ассет пак, причем подается он как для тупых. Видимо, красивой финальной сценой завлекают.
>>443296 Наверняка на таких лекциях и туториалах воду льют, в стиле обзора самых последних модных графических технологий, PBR-шэйдеров и процедурных карт. На деле, для того чтобы сделать красивый ААА-графон нужно просто увеличить в 10 раз время на налаживание пайплайнов и само производство. Притом не только на модельки, но на сэтап и анимацию тоже, ведь не может быть дерганной анимации в ААА. В основном нужно не средства движка задрачивать, а средства 3д-моделирования. Учишь там Zbrush скульпт, запекание текстур, текстурирование в Substance Painter, ретопологию 3D Coat, риг и анимацию в Maya. Современные пайплайны, короче. Это на деле не так-то сложно, просто в 10 раз больше учить чем для васянского графона.
>>443277 Ебать ты долбоёб братишка. Паттерны используются для достижения гибкости в разработке. Если ты хардкодер ёбаный и у тебя один класс отвечает за несколько задач, то у меня для тебя плохие новости. Покажи парочку своих классов что ли, а то сложно судить, что у тебя там. Бывают случаи, когда люди и так пишут гибкий код, используя паттерны, только не знают, что они их используют.
>>443312 можешь вон навмеш мой скачать, почитать, хули. >>442827 написан конечно местами так себе, но так что я не испытываю проблем с его доработкой и даже если грохнуть кусок кода у основания то остальной не рассыпется, что я недавно и делал. я его правда никуда на гитхаб не заливал чтобы просто так почитать. вообще я бы много чего мог показать, конечно. в моем проекте много интересных велосипедов. просто местами там дохуя понаписано и вряд-ли кто-то в своем уме будет это читать.
придумали там паттерны, слова какие-то. я вот самоучка, меня паттернам никто не учил и сам я их не учил. пока пишешь код думая о том как он будет работать в будущем тон будет работать в будущем.
>>443283 Ну да, с пунктуацией чуток проебался, пардон. >>443281 >>443282 Паттерны я использую сугубо потому что могу. То есть я ещё с универского курса их помню и как только становится какая-то цель — я сразу понимаю как её лучше реализовать. Сейчас вот, например, юзаю медиатор, с ним всё намного проще. Но опять же — в именно моём проекте.
>>443304 Запощу сегодня новую демку. Переделал геймплей со швыряния предметов на швыряние + расстановку мин по путям перемещения девочек. Моя продуктивность упала в разы по сравнению с TWG. Хз, почему так, нравное пропадает вера в гейминдустрию в возможность поднять в ней бабла по крайней мере.
>>443313 Onsen Rumble на нем практически полностью собран. Не рекомендую. Вкатиться легко, а вот вносить правки в кучу параллельных FSM - сложно. Хуи отследишь, какая из них ответственна за баг. До сих пор разобраться не могу, почему у меня девочки по полу скользят после смерти. Еще не хватает полиморфизма, что заставляет иногда заниматься обезьяньей работой.
Копал кто-нибудь постмортемы или аналитику по платным ассетам в сторе? А то я смотрю, даже у ебовых на тыщи человекочасов кода и смешной ценой в пределах сотки количество отзывов вообще ниочем - их вообще кто-нибудь покупает?
Как мне с лейаутами совладать? Есть панель неопределённого размера с вертикальной лейаут группой и контент фиттером. В панель я динамически добавляю префаб из обжектпула, префабов может быть дохуя и больше. Мне нужно растянуть префабы по ширине на всю панель, но сохранить свою высоту, и при этом чтобы первый префаб оставался закреплённым в углу, а новые вырастали снизу. У меня же выходит так, что префабы уезжают куда-то за пределы панели, не растягиваются и вообще.
>>443350 Я только панель пустую запостить могу. Строки (которые хуёво видны) находятся в контейнере-панельке. Высоту и ширину я сам могу исправить, это не проблема. Проблема в том, что они спавнятся в центре панели, а каждый последующий объект смещает первый объект вверх. Да, использовать один большой текст будет проще.
>>443353 > Да, использовать один большой текст будет проще. да, используй один большой текст. этажи логи. делай как все. у меня давеча возникала твоя задача, но там был не текст, а кнопки. перепробовал перегуглил всё, пришлось скриптами назначать координаты.
>>443356 >пришлось скриптами назначать координаты Ну, я так и понял. Удивительно сделано. "Пивот" выражает собой центр главной панели, и когда прибавляется какой-то объект, ширина и высота объекта становятся шириной и высотой главной панели. А когда добавляется второй объект, то главная панель расширяется на оба объекта, и после этого смещается в пивот, забирая с собой оба объекта.
>>443361 А, я сообразил. Нужно добавить Layout Element скрипт и анально задать минимальные размеры главной панели. Тогда волшебным образом всё центрируется в нужное место.
>>443333 Я васян-графон как раз и демонстрировал. Только диффузные карты и unlit-шэйдеры, нет реальных теней. Но при желании мог бы делать ААА потратив в 10 раз больше времени, только вопрос в том, а нахуя? Надо чтобы в игру увлекательно играть было и смотрелось достаточно убедительно для ЦА.
>>443401 >используя фототекстуры Так разве ААА не главные пользователи фототекстур? Ну ОК, они еще фотограмметрию юзают и сильно их обрабатывают и процедурные эффекты сверху кидают. В основе реалистичного графона всегда фото.
>качая модельки Тут уж надо выбирать, или ты геймдевелопер или 3д-моделлер. Вот мне хочется в итоге увлекательную игру получить, а не реалистичную модель резиновой утки.
сделал простенький прототип где можно бегать, подбирать предметы, экипировать их. вроде попёрло, вроде понятно как делать дальше.
вообще unet на самом то деле не плох. когда я в него полез то обнаружил что там дают возможность пользоваться сразу несколькими слоями того клея что скрепляет базовый функционал и они плохо между собой совмещаются. и документация местами пиздец. а так вроде норм.
>>443318 дааа вопрос то не в том что ты чем-то пользуешься. вопрос в ценности самих терминов. отдельно конечно можно поднять ценность следования паттернам, но тут мне нечего сказать.
>>443320 стало лучше, да. вообще ты на процесс разработки неправильно смотришь. надо делать то что в первую очередь желаешь увидеть сам, тогда это желание и начинает двигать процесс в первую очередь. я вот когда устаю делать свое говно, то я несколько дней дрочу в игры. и в один прекрасный день я смотрю на них и понимаю что пока я в них дрочу, проект лучше не становится. а так как в нем будет все что я ценю в играх то я понимаю что надо делать, там будет просто заебись! и делаю. недели на 2-3 хватает такой мотивации.
хотя учитывая что ты с PlayMaker страдаешь то у тебя наверно в процессе разработки большая битва с самим собой. может лучше шарпом расскажешь глупой машине что ты от неё хочешь?
>>443337 йеп. покупают. только их почти никто не коментирует и не ставит оценки, даже несмотря на то что юнити предлагает это делать спустя несколько дней после того как скачал. хотя там конечно несколько иной рынок. это все-же рынок инструментов, а не кинца.
>>443386 кстати а чего не ебанешь немного графона? сделал бы хоть водичку получше. в этой игре много водички.
>>443412 > ААА главные пользователи фототекстур > сильно их обрабатывают и процедурные эффекты сверху кидают толще, выше, сильнее!
> Тут уж надо выбирать, или ты геймдевелопер или 3д-моделлер тут уж надо выбирать, или ты геймдевелопер который может делать игры, или кирюха, таскающий ассеты и мнящий себя игроделом
>>443452 либо ты неосилятор который не может уделить время и научиться делать всё хорошо. всё это говно про "делать все сразу = делать все хуево" только в твоей голове, но ты продолжай оправдываться.
>>443466 поучился скриптить на двикжках года три, потом ещё пять повазюкал модельки, а левелдизайнить может вообще любой васян который в жизни играл в игры и представляет всё интуитивно. но на дваче сказали что после того как выберешь себе класс, в другой класс даблспеком нельзя.
>>443467 три года на погромизм и пять на модельки, да? куда лучший результат будет если потратишь 8 лет либо на погромизм, либо на модельки. сможешь хоть что-то делать хорошо. если конечно не планируешь в одиночку тащить проект много лет. как будто в игры не играл, субклассы нужны только ради стартовых скиллов.
>>443421 >надо делать то что в первую очередь желаешь увидеть сам Какой идеалистический взгляд на геймдев. У тебя есть законченный и изданный проект своей игры мечты? Не, я больше вижу геймдев как борьбу с временем, которого всегда не хватает, жизненными обстоятельствами, ленью и контрпродуктивными пайплайнами (вроде моих неудач с Playmaker). Основной движитель в том, что если не выпустить свою игру даже весьма убогую за пару месяцев то все, кончатся деньги и придется завязывать с геймдевом. > может лучше шарпом расскажешь Простые проблемы намного быстрее отладить в Playmaker, а не пердолиться с консолью. Нужно умело совмещать, как мне кажется. Вот этот https://www.youtube.com/user/mdotstrange ютубер неплохо умеет разделять код с визуалом.
>>443435 Я не траллю, а правда так думаю. Полностью процедурные текстуру очень трудоемки. Проще в Substance Painter фототекстуру спроецировать и обмазать всякими ржавчинами/царапинами. >кирюха, таскающий ассеты и мнящий себя игроделом Голословная предъява. Кто-то там говорил, что я из MMD модельки ворую, однако они даже по пропорциям тела другие, не говоря уже про морфы и текстуры. То, что мне лень резиновую утку моделлить не считаю чем-то плохим.
>>443467 >>443474 8 лет учебы чтобы опубликовать первую инди-игрушку в стим и получить $1000-$5000 c продаж? Найс.
>>443504 >8 лет учебы чтобы опубликовать первую инди-игрушку в стим и получить $1000-$5000 c продаж? Найс. ну не все же ассетоворы. некоторые, например, делают свой контент для игры. дураки какие-то. особо глупые даже пытаются делать его качественно. зачем оно нужно, не понимаю. ведь можно хуяк-хуяк из готовенького.
>>443504 > В основе реалистичного графона всегда фото. > Проще в Substance Painter фототекстуру спроецировать и обмазать всякими ржавчинами/царапинами безусловно, проще. теперь найди на пиках фототекстуры.
>>443506 Творцы качественного контента имеют чуть больше шанса получить $5000 с игры, чем $1000. Если доведут разработку до конца, разумеется. А вообще, покажи мне демку своей игры, которая на голову графонистее и оригинальнее моей.
>>443504 >Какой идеалистический взгляд на геймдев. У тебя есть законченный и изданный проект своей игры мечты? ноуп. но я долгое время делал велосипеды на благо моей идеи и проникал в интересующие меня темы (навигация, ИИ, процедурная генерация). недавно наконец настало время устроить autobots assemble моим велосипедам. из-за того что моя идея слабо изменилась за это время и я думал над ней пару лет и у меня есть прототипы/решения основных фич которые я желаю реализовать. сейчас я вижу свой путь весьма прямым.
>Основной движитель в том, что если не выпустить свою игру даже весьма убогую за пару месяцев то все, кончатся деньги и придется завязывать с геймдевом. хуёво тебе. у меня нет таких рамок с ограничениями и у меня куча свободного времени.
>а не пердолиться с консолью. Нужно умело совмещать, как мне кажется. я в этом сильно сомневаюсь. нодовые редакторы слишком поверхностные, в нормальном коде больше средств отладки, в том числе визуальной, нет этой мешанины из лапши, половину времени в которой тратишь чтобы её распутать. я немного попользовался в UE, при небольших масштабах они работают просто отлично, но перестают быть адекватным решением при увеличении сложности проекта. очень плохо скейлятся.
Поясните за изменение цвета изображения родителя. Правильно ли я понимаю, что если детей с изображениями два или больше, то нужно цвета их изображений мануально менять? Или я что-то упустил?
>>443596 Вот и я не пойму. У меня есть панель с дитём-кнопкой. Меняю только панели цвет на прозрачный - кнопка тоже становится прозрачной. Как добавил ещё одну кнопку, так теперь она цвет с панелью не меняет.
Анон, помоги, есть переменная, которую нужно сохранить. Я сделал так playerprefs.setint("huy", penis); playerprefs.save();
Но эту переменную мне нужно использовать в реальном времени. После ее изменения сразу же передать в другой скрипт. Если использовать playerprefs.getint, то смена переменной видна только перезапуска.
Тоесть. Есть два типа пениса, по умолчанию выбран первый тип. Я меняю тип пениса на второй. Выбор сохраняется, но переменная пенистайп изменяется только после перезапуска, что логично. Что делать?
Ох, блядь. Стоило оторваться от классов для NPC и повернуться к Unity передом, к остальному задом, как начались сомнения, что все написано более-менее по уму.
Алсо, в Юнити реально делать open-world и подгружать чанки по мере необходимости? К единому NavMesh'у, смотрю, нельзя пришивать куски. Нормально ли держать довольно крупный запеченый NavMesh в памяти или зашквар?
Посоны, нужна помощь. 2д. У меня есть две точки, А и Б, (два вектора2), мне нужно найти штук 15-20 точек между ними расскиданных равномерно. По какой формуле это делать?
>>443669 Пиздец, когда же вы научитесь вопросы формулировать? > штук 15-20 Так 15 или 20? > мне нужно найти Что значит найти? С лупой будешь их искать что ли? Может быть не найти, а определить координаты?
Как предложите вывести в инспекторе List<List<int>>? Работать с кастомным EditorWindow также как с игровым окном? Мне просто надо кучу прямоугольников вывести как содержимое массива.
>>443861 //Serializeable public struct Rectangle { Vector3 ... } public class Yoba { //SerializeField List<Rectangle> rects = new List<Rectangle>(); } квадратные скобки вроде как здесь проебываются, заменил на "/"
Здравствуйте. Юнити2Д. Есть 40 точек выстроенных в линию. Из каждой точки мне нужно кастовать рей. Как мне сделать так, чтобы реи кастовались перпендикулярно линии вне зависимости от того в какой позиции и под каким углом находится линия? Никак не могу разобраться.
>>443970 Линия прямая. Точки в аррее. Я не очень понимаю что значит в какую сторону, ну типа это же относительно. Ну допустим влево, если линия А Б перпендикулярна "земле", точкой А вверх.
>>443971 > Я не очень понимаю что значит в какую сторону Ну у точки, лежащей на линии есть два варианта луча, который будет перпендикулярен этой самой линии.
>>443974 В этом то и суть. Линия привязана к объекту и крутится вокруг него. Как будто объект держит селфи палку и передвигается и крутится с ней. И линия в данном случае айфон на селфи палке, который должен кастовать из себя лучи перпендикулярные себе же в сторону объекта.
>>443982 Упорядочиваешь все точки на линии, чтобы их rotation был одинаковый. Заранее ручками или в коде (я сделал в коде). И отбрасываешь луч на 90 градусов, но локально, а не глобально. Потом все эти точки прячешь под пустой геймобджект "палка" (хотя скорее всего так оно у тебя и есть) и всё, как ты эту палку не крути, в локальных координатах у точек ничего не изменится и они всегда будут светить куда надо.
>>443985 > я надеялся без пустых геймобджектов обойтись 40 одинаковых точек в корневом уровне иерархии держишь что ли? Зачем, если можно их свернуть под пустой объект? Что ж вы за любители засирать иерархию? Потом же глаза сломаете.
>>443988 А что конкретно ты имеешь ввиду? Типа создать 40 пустых гейомбджектов, приделать к ним рейкаст, и всех эти 40 геймобджектов сделать чайлдами еще одного геймобджекта? Ну я очень неопытный в этом всем, но мне казалось что всякое такое делать это типа НЕХОРОШО и неаккуратно. Я делаю все такие вещи через уровнения. И все не так сложно, все эти 40 точек и рейкастов определяются лупов из пары строчек.
>>444008 > Типа создать 40 пустых гейомбджектов, приделать к ним рейкаст, и всех эти 40 геймобджектов сделать чайлдами еще одного геймобджекта? Нет. Твои 40 геймобджектов, которые составляют прямую, спрятать под один обджект "прямая". Большего тут не требуется.
>>444047 Сертификаты по курсам в интернете — это бумажка для вытирания жопы. Она стоит ровно нихуя. Хочешь бумажку, которую можно приложить к резюме — иди на курсы ИРЛ.
>>444066 > Time.fixedDeltaTime Время итерации для физики. deltaTime — это время, за которое прошел один кадр. Первое статично, второе зависит от железа, выполняемых процессов, хуе-мое. > Time.fixedTime Это вообще сколько времени прошло с начала запуска приложения.
> что использовать в корутинах? WaitForSeconds(); ? Что тебе еще нужно?
>>444066 Пиздец, ну у вас и вопросы. > в чём будет различия Time.fixedDeltaTime от Time.fixedTime? Если ты в гугле забанен, то открой справку хотя бы. > что использовать в корутинах? Как разбанят в гугле — почитай для чего они вообще нужны. Вопрос сразу отпадёт.
>>444065 Time.fixedDeltaTime Other Versions public static float fixedDeltaTime; Description
The interval in seconds at which physics and other fixed frame rate updates (like MonoBehaviour's FixedUpdate) are performed.
For reading the delta time it is recommended to use Time.deltaTime instead because it automatically returns the right delta time if you are inside a FixedUpdate function or Update function.
Note that the fixedDeltaTime interval is with respect to the in-game time affected by timeScale.
Можно ли как-то вручную задавать navmesh? Например, кисточкой рисовать, как текстурками по террейну. А то нужно чтоб навигация была только в определённом месте на плоскости, а запекается вся плоскость. Можно, конечно, все ненужные места обложить статичными объектами, потом запечь карту и убрать объекты, но это ж шестиколёсный велосипед.
>>444098 Нифига не понял как этим говном пользоваться. Может надо просто поспать. Вот я поставил этот куб на walkable поверхность, ставлю самому кубу что он not walkable, перезапекаю, и нихуя не меняется.
Это я, долбоёб с консолью Неожиданно выросла ещё одна проблема. У меня есть вертикальный лейаут, в который я динамически добавляю объекты определённой высоты. Родитель лейаута содержит скроллрект и дитя скроллбар (чтобы прокрутка работала). Всё это работает так-то, но есть одна проблема - в тот самый момент, когда добавляется 9ый элемент, он "съедается" и не показывается вовсе, хотя он существует и является элементом этого вертикального лейаута. Потом я догадался отключить маску и нашёл этот элемент за пределами поля, т.е. лейаут сам по себе съехал на какую-то величину вниз, когда ему пришлось расшириться. С хуя бы он это сделал и как это исправить?
Анон, почему не получается привязывать дополнительные 3д-объекты со skinned mesh renderer к старому персонажу? Я сохраняю новую модель вместе с костями, кости абсолютно идентичны старой модели. Встраиваю новую модель в старую иерархию, выставляю RootBone ссылку на старую кость.
>>444119 У меня такое чувство сложилось, что либо я дурак неправильно вопросы задаю, либо здесь в треде никто панельки не ковыряет и с моими проблемами не сталкивается. Инпутфилдами, значит, все довольны, кнопками все довольно, панелями довольны - что вы там вообще кодите, что вас это говно не смущает совершенно?
>>444251 у меня искреннее непонимание твоей проблемы. ты сказал "хочу хуйню в которую можно сунуть больше чем оно само", а потом жалуешься на то что элементы интерфейса сьезжают? разве это не то что должно было произойти? ты может схему нарисуешь че ты вообще получить то хочешь?
я лично пишу код базовых механик. чтобы дамаг между персонажами синхронизировался, чтобы был менеджер патрон который бы за ними следил, чтобы ИИ пользоваться инвентарем мог, чтобы командовать можно было. чего с UI то возится когда игры нет?
>>444256 >"хочу хуйню в которую можно сунуть больше чем оно само" Вертикальный лейаут динамически увеличивается в размере, если в него вставляется новый элемент. Можешь попробовать в редакторе добавить новый элемент несколько раз. Самое забавное же то, что после одного единственного съезжания лейаут затем нормально расширяется, без прыжков. То бишь так, как надо. Вот мне и непонятно, откуда взялся этот прыжок, если дальше всё норм идёт. >чего с UI то возится когда игры нет? Потому что УИ отражает на себе все базовые механики, и если поочерёдно делать УИ то всё равно над механиками работаешь. Вот сейчас, например, я закончил консоль (почти), а теперь делаю разные скрипты для генерации сцены, призыва юнитов и т.п. К тому же без УИ жизни нет, УИ имеет тот же вес для геймплея, что и вся совокупность механик.
Ребята, я уже не человек нахуй. Уже два часа сижу на ровном месте и просто охуеваю. Суть проста: есть "пушка", которая с помощью Physics.OverlapSphere получает массив коллайдеров, которые находятся от неё на определённом расстоянии. Из всех этих коллайдеров она должна найти ближайший. Вот, собственно, сам код и как это работает на примере 1-го видеорилейтеда:
public Collider[] targets; // все коллайдеры вблизи пушки public Transform curTarget; // трансформ объекта, который будет ближайшим public float distance = 2f; // радиус обнаружения коллайдеров
void Update () { targets = Physics.OverlapSphere (transform.position, distance, 1 << LayerMask.NameToLayer ("Enemies")); // загоняем в массив все коллайдеры поблизости из нужного слоя float minDist = distance; // ближайшее расстояние
foreach (Collider target in targets) { // начинаем перебирать элементы массива RaycastHit hit; // готовим хит Ray ray = new Ray (transform.position, target.transform.position - transform.position); // готовим луч if (Physics.Raycast (ray, out hit) && hit.distance < minDist) { // кидаем рейкаст, смотрим ближе ли объект нашего радиуса обнаружения curTarget = target.transform; // если да, то этот объект назначаем ближним minDist = hit.distance; // дистанцию до объекта назначаем минимальной, чтоб если следующий объект окажется ближе - это отловить } } Debug.DrawLine (transform.position, curTarget.position); рисуем в дебаге лучи до ближайшего объекта }
Как видите на 1-ом видео, всё нормально. Светит куда надо.
А вот теперь начинается магия, в рот её ебать. После последней строчки я добавляю всего одну. Теперь это выглядит так: Debug.DrawLine (transform.position, curTarget.position); // эта строчка уже была transform.LookAt (curTarget.position); // смотрим на ближайшую цель
То есть добавилось всего то, что "морда" пушки будет смотреть на ближайший объект. И, нахуй блять, смотрите какая анальная клоунада начинается на втором видео. Почему так? Я уже все волосы на голове вырвал, я нихуя не понимаю почему это происходит. Если что, в инспекторе в обоих случаях видно что обе капсулы в массиве, то есть во втором случае он тоже ловит обе.
>>444250 Не могу добавить новый skinned mesh объект к костям своего персонажа. Не, аватар не трогал, я ведь никак не вмешиваюсь в структуру костей. Кости не добавляю, только сетку.
Не понимаю логики Меканима, ведь в любом 3д-редакторе можно легко сделать привязку к существующему персонажу новых объектов, можно даже перенести веса со старых. А тут уперся в такую элементарную фигню. Можно, конечно, сохранить fbx с новым персонажем и импортировать его с нуля, а потом копировать на него все коллайдеры, системы частиц и прочее, но это путь какого-то мазахиста.
>>444260 Заменил > transform.LookAt (curTarget.position); на > transform.LookAt (new Vector3 (Random.Range (0, 360), Random.Range (0, 360), Random.Range (0, 360))); чтобы его пидарасило по полной и исключить возможность того, что проблема именно из-за движения "башни". Результат на видео. Короче, юнька меня затралила, у меня уже пена изо рта идёт.
>>444268 > А с этим никаких проблем не будет? Нет, здесь всё нормально. Сначала задаю минимальным расстоянием максимально возможное, чтобы с ним сравнивать. На первом и третьем видео с этим всё нормально, как видишь. Проблема начинается только когда прописываешь > transform.LookAt (curTarget.position);
>>444271 >>444270 > А ещё у тебя lookat в теории может ссылаться на нуль Лол, как раз таки если его заставить смотреть на v3.zero, то всё нормально. Как и на любой другой v3, отличный от координаты капсулы. Там полторы переменные, на что там смотреть? В любом случае держите. Как видите, расстояние до правой меньше, но светит всё равно в левую
>>444275 >>444277 Тааак. Перебил ручками позицию curTarget по y из -0,2 в просто 0,2 и оно работает. Кажется он не жрёт отрицательные координаты. Теперь ищем почему.
>>444279 transform.LookAt (new Vector3(23.1f, -0.2f,30.9f)); Это координаты капсулы, как ты видишь в дебаге. И так он светит через жопу. Ставлю transform.LookAt (new Vector3(23.1f, 0.2f,30.9f)); То есть по y минуса уже нет. И светит оно как надо.
>>444281 Так, новый факт. Если по Y поставить -0.1, а не -0.2 (как в координатах капсулы и есть), то светит как надо. Возвращаю 0.2 - глючит. Буду шагами перебирать переломное значение.
>>444282 Итого. Сама позиция капсулы по Y -0.2 Распознавание перестаёт глючить в диапазоне от -0.3265 до -0.1236. То есть между этими числами — мёртвая зона.
Как и почему это работает — понять не могу. Как это чинить — тоже. Разве что костылями.
Короче, в пизду. Будет у меня не пушка, а какая-нибудь вышка, которой не нужно будет вертеть "головой". Я до сих пор нихуя не понимаю почему это происходит, но одно знаю точно — без LookAt всё работает как надо.
>>444288 У меня тоже такая непонятная херь есть - рейкастер упорно видит одну особенную кнопку на другом конце экрана, хотя она находится на этом, и её можно нажимать там. Причём эта баженная область начинается ближе к центру и становится шире к краю экрана, т.е. как будто сектор на радаре. Я не знаю, как работают апдейты и рейкасты, но если область такая ровная, то, наверное, во время выполнения рейкаста в апдейте что-то отсекается случайно. Что-то вроде этого? http://answers.unity3d.com/questions/1141633/why-does-fixedupdate-work-when-update-doesnt.html
>>444259 нет, я по прежнему не вижу что ты имеешь в виду. у лэйаут групп есть разве что эта нелепая проблема с тем что в редакторе к первому добавившемуся элементу не применяется лэйаут, но эта проблема только в редакторе.
>>444264 помоему рут бон в редакторе это рид онли, его изменение ничего не делает. вроде если имена костей и иерархия те-же то должно работать, но может настройки импорта какие особенные должны быть. я бы с радостью помог но я никогда особо не пердолился с тем чем ты. разве что один раз все перестало работать после того как переименовал кость. но кстати да, посмотри ка на всякий случай в старте веса костей. void Start () { SkinnedMeshRenderer meshRenderer = GetComponent<SkinnedMeshRenderer>(); Mesh mesh = meshRenderer.sharedMesh; Transform[] bones = meshRenderer.bones; BoneWeight[] weights = mesh.boneWeights; Vector3[] verts = mesh.vertices; Vector3 tPos = transform.position;
for (int i = 0; i < weights.Length; i++) { BoneWeight w = weights; Vector3 pos = verts + tPos; Debug.DrawLine(pos, bones[w.boneIndex0].position, new Color(1, 0, 0, w.weight0), 100f); Debug.DrawLine(pos, bones[w.boneIndex1].position, new Color(0, 1, 0, w.weight1), 100f); Debug.DrawLine(pos, bones[w.boneIndex2].position, new Color(0, 0, 1, w.weight2), 100f); Debug.DrawLine(pos, bones[w.boneIndex3].position, new Color(1, 1, 1, w.weight3), 100f); } }
>Потому что УИ отражает на себе все базовые механики, и если поочерёдно делать УИ то всё равно над механиками работаешь. ноуп. не работаешь. у тебя есть свой собственный интерфейс разработчика уже, игровой интерфейс тебе нахуй не нужен чтобы продолжать работать над проектом.
>>444260 для начала обнуляй curTarget в начале цыкла. вообще нахуй ты рэйкаст делаешь для нахождения ближайшего то?
>>444303 > для начала обнуляй curTarget в начале цыкла Обнулял, нихуя. > нахуй ты рэйкаст делаешь для нахождения ближайшего то? Потому что мне нужна ближайшая цель, которую видно, а не которая за камнем стоит.
В любом случае, при обновлении до бэтки всё заработало.
>>444305 у меня не бета, у меня 17.1.0f3. дай посмотреть на сломанное. мне интересно что у тебя там не так было.
>Потому что мне нужна ближайшая цель, которую видно, а не которая за камнем стоит. а нахуй ты всех то рэйкастишь тогда? отсортируй по квадратной дистанции и потом уже рэйкасть начиная с ближайшего.
>>444306 > дай посмотреть на сломанное Код есть, видео тоже. Смотри дальше по треду. > а нахуй ты всех то рэйкастишь тогда? Чтобы определить ближайшего видимого же. > отсортируй по квадратной дистанции и потом уже рэйкасть начиная с ближайшего Зачем, если и так работает теперь?
>>444307 >Код есть, видео тоже. и что, предлагаешь сидеть и делать все примерно как там у тебя? чтобы в итоге увидеть что у меня все работает, а у тебя нет потому что у тебя там коллайдер где-то в который луч утыкался. код прочитал, видео посмотрел, хуй знает что там у тебя.
>Чтобы определить ближайшего видимого же. смари, я тебя сейчас трюку научу. то что ты делаешь делать будешь часто. можно написать так: static IOrderedEnumerable<T> OrderByDistance<T>(T[] array, Vector3 point) where T : Component { return array.OrderBy(x => (x.transform.position - point).sqrMagnitude); } и получать уже сразу отсортированные по дистанции элементы. и писать уже не эту ебурду с дистанцией, а сразу foreach (var item in OrderByDistance(Physics.OverlapSphere(transform.position, 2f), transform.position)) { //проверка видимости }
можно ценой генерации мусора немножко сделать твое говно читабельней.
>Зачем, если и так работает теперь? чтобы знать чё как и почему и узнать что-то новое как всегда.
>>444308 > коллайдер где-то в который луч утыкался Без lookat почему-то не утыкался, а с lookat утыкался. Причём при lookat только в районе объекта, при рандомнои направлении всё нормально было. > я тебя сейчас трюку научу Благодарю, буду дома — потестю.
>>444309 дык, может, у тебя там коллайдер ориентированный по направлению обьекта. луч натыкался на небольшое слепое пятно, или ещё чего в этом духе. надо же проверять куда там все это тычется и все значения которые имеешь. хуй же знает что у тебя там в сцене, то что ты там в сцену сунул это как контекст в беседе.
>>444303 >помоему рут бон в редакторе это рид онли, его изменение ничего не делает. Печально, если так. Не понимаю, как тогда редактор определяет привязку к костям. Берет skinned mesh, извлекает из него имена костей и ищет те же кости в иерархии? Не, у меня так не работает и никакие кости не находятся. Вообще нет деформации меша при анимации костей. За код спасибо, попробую.
>>444338 > по моему это говорит о том что там что-то не работает, или произошло то что ты не заметил Возможно. Хотя у меня один раз была одна херня, которая была точно глюком самой юньки. Как раз таки на бэтке, только на старой. Элемент UI не отображался ни в сцене ни в игре. Контур есть, в инспекторе всё норм, а его не видно. Перезапускаешь юньку - всё нормально. До второго запуска. Плюнул, окатился до стабильной версии - всё нормально. Вечером, наверное, опять до стабильной версии откачусь, посмотрю остался ли тот глюк со сферами. Если да - скину, поиграешься, если хочешь.
Анон, начал читать Unity in action и там говорят добавить фаерболу Rigidbody путем добавления компонента в инспекторе, но там его нет. Как быть? Начал гуглить, а там ответы вроде "Он тебе и не нужен", но он нужен мне, без него не робит.
>>444520 Блядь, вот всегда так, тыкался час, гуглил и как только написал куда-то вопрос - сразу нашел блядь. Через поиск в add component не находило physics, а так он в списке есть, ахуенно.
Двач, я видимо даун-аутист, но я не могу сделать такую элементарную вещь, как анимированный прогресс бар. То есть, я слайдером тяну маску, все заебись, но как мне зациклить блядский спрайт? С текстурами обычно просто ебашил тайлинг и плюсовал оффсет, но со спрайтами такую хуйню не получается провернуть. И что самое стремное - гугол практически молчит. Спасай анон, чувствую себя умственно неполноценным.
Сап. Есть два объекта с circle collider 2d. Большой и маленький, один над другим(пирог). На большом висит OnMouseExit() вырубающий всю ветку элементов. На маленьком висит OnMouseEnter() включающий дополнительную ветку элементов.
Каким способом можно сделать оба одновременно активными? Ебля с осью Z (2д же) приводит к двум результатам: маленький коллайдер над большим и на нём срабатывает OnMouseExit() большого, или маленький коллайдер под большим и соответственно вообще не работает. В идеале нужен первый вариант только без срабатывания OnMouseExit() большого коллайдера.
По сути это меню с выпадающими окнами. Из-за нестандартной планировки (не списком) приходится велосипедить
>>444551 Пока что изъебнулся с quad-ом, натянув на него текстуру, но это реально говно какое-то, пришлось все дергать по z, разъебывая весь ui. Надеюсь на знающих анонов.
>>444558 у текстуры выстави full rect и укажи края в редакторе спрайта. потом в элементе интерфейса с прогресс баром добавь компонент sprite и выбери там tiled, всё
>>444566 >>444565 Все, разобрался, draw mode завезли только в 5.6, вот я его и не видел. Жаль, что не получается сделать через ui, но спасибо анон, всяко лучше, чем натягивать текстуру на quad.
Такой вот вопрос, может быть не по теме немного, но все же. Делаю я модель для юнити. И хочу сделать одну текстуру для него. Например, дом. Какой оптимальный размер текстур для юнити?Делаю обычно 4096х4096Какой формат лучше подходит? Юзаю png
>>444554 Попробуй использовать различные слои и проверять рейкаст по слоям. Либо, если тебе достоверно известна форма меню (круг), то ты можешь посчитать отдельно для каждого элемента входит в него курсор мыши или нет.
>>444569 > Какой оптимальный размер текстур для юнити? чет ты da. у каждой модельки свой размер текстур, и зависит он от пространства и времени, занимаемым моделькой на екране в процессе игры. > Какой формат лучше подходит? максимум da. любой формат. юнети всё переконвертит за тебя, исходники из папочки ассетс в релиз не попадают
>>444569 > Какой оптимальный размер текстур для юнити? Какой нужен. Хочешь чтоб было оптимально - ебошь размеры в степени двойки. Остальное похуй. Хотя и это по большому счёту похуй
>>444689 Ну у меня комплексов много, чтобы так сделать. Мне бы знаешь, вот всё продумать, везде почитать, посмотреть там видосы, а так просто я не могу, ну стесняюсь шоле хз.
>>444696 Да то что я ленивый это правда. А то что уебок, ну так это же двач, ты ещё относительно ничего обидного не сказал. Да и вообще по жизни стараюсь не обижаться на субъективное мнение других. Вот видишь, я тебя в ответ не обосрал, а поблагодарил за ответ, тебе и стыдно стало) ты меня лично не знаешь так что уебок я или нет, знать не можешь
>>444700 Хорошо. Я наверное не правильно выразился, так что лучше узнаю путем тыка. Спасибо) Про кратность двойки знаю, я имел в виду очень большой вес такой текстуры...
>>442120 (OP) Как в юнити повернуть отдельный компонент? Мне конкретно надо повернуть NavMeshAgent по оси X на 90 градусов и по оси Z на 90, не поворачивая при этом 2D спрайт, вот.
>>444741 Назначь их в редакторе и не будут теряться. Они у тебя инициализируются при запуске, все что произошло после запуска в редакторе не сохраняется.
>>444745 Естественно я заскринил после того как нажал play. >>444744 >Назначь их в редакторе и не будут теряться Угу, так и сделал. >Они у тебя инициализируются при запуске, все что произошло после запуска в редакторе не сохраняется Это не объясняет почему они терялись. Хотя уже и не важно.
>>444747 >Это не объясняет почему они терялись Ты искал по тегу. Тег меняется там где на MainButton в выпадающем меню выбрано untagged. Если такого тега нет то функция возвращает null, то бишь обнуляет твою переменную. Искать по названию объекта надо через GameObject.Find("...")
>>444748 Естественно все теги я развесил. Искал по тегу потому, что GameObject.Find("...") тяжелее. Скорее всего дело было в том, что нельзя получить ссылку на объект если он .SetActive(false).
>>444758 >> windows 8.1 >> Substance painter >> Substance designer >> Notepad ++ >> Unity 3d >> aimp >> Tor (vidalia bridge) >> Photoshop CC 2014 (так как 15cc ну устанавливается) >> 3ds max 2012 >> google browser
>>444779 Окна - отдельно. Кирпичи - отдельно. Двери - отдельно. Если у тебя к примеру 4 двери - делай их атлосам. Окна около 4 штук - тоже атлас. Пример:
>>444869 Скажи честно, вы все из одной пробирки? Или вы все ходили на один и тот же курс по хуёвой постановке вопроса? Где, блять, в твоём коде хоть намёк на направление мыши? Знаешь ли, хрустальный шар давно уже сломался от таких вопросов, так что давай конкретизируй.
>>444870 В общем есть скрипт - моуселук, в котором берется трансформ капсулы и присваивается ротейшон. Есть второй скрипт - мувмент, привязанный к капсуле. В котором:
Так все работает, как надо. Но если вмесно transform.Translate использовать rigidbody.MovePosition, то направление уже не задается. И вопрос в том, как задать направление для rigidbody.
>>444807 И да, если ты собираешься делать здания более детализированным, то делай отдельными частями. Ну там... Рама от окон - отдельно. Забор - отдельно. Старайся что бы в одном mesh -е было не больше 15.000 Tris (Треугольников) И названия материалов тоже давай правильное. Кстати, если ты собираешься делать для UE (Unerial Egine) то коллизию тоже сделай. Всё вместе экспортни. Пример:
>>444912 Вау, это реально красиво. Про текстуры понял, буду пробовать. Пока что я только осваиваю юнити, она коллайдер ставит. На анреал позже может перейду, посмотрим
>>444927 Ах да. Пробуй ещё текстурировать/рисовать текстуры в substance painter/designer Сейчас все перешли на pbr material. Но ты должен не плохую развертку тогда мастерить. Без mix вообщем.
Сап, аноны. Я тут пытаюсь сам сделать передвижение персонажа на си шарпе, вот что язапихнул в Update: float x = Input.GetAxis ("Horizontal"); float xPos = x moveSpeed; float z = Input.GetAxis ("Vertical"); float zPos = z moveSpeed; float y = Input.GetAxis ("Jump"); float yPos = y; obj.transform.position = new Vector3 (xPos, yPos, zPos); И столкнулся с проблемой, заключаювшейся в том, что зона передвижения ограничена(квадрат от 10 до - 10). Хелп ми.
>>445107 Тогда зачем transform.position можно задавать напрямую? >>445012 Разве ты не определяешь положение по текущему значению осей? Ось же ограничена 10 и -10, нет?
Вопрос про простую генерацию уровней.Аноним25/09/17 Пнд 17:30:15#451№445189
Сап, двощ, помоги.
Надо поставить перед игроком выбор уровня. Допустим, ему показывают три варианта 1 - простой сложности, 2- средней, 3- сложной. У каждого уровня будет определенное количество врагов, свой террэйн, допустим еще каке-то свойства.
Как я вижу: делаем класс УРОВЕНЬ в нём в конструкторе задаем метод Генерируй( сложность ){генерирует количество/вид монстров, в зависимости от _коэффициентов}. От класса УРОВЕНЬ наследуем классы террэйнов (прим. пустыня, тайга, казематы Путина), в наследниках переназначаем коэффициенты.
Игрок видит варианты, делает выбор, играет.
Все правильно делаю, или можно как-то проще и я зря тут фигню с классами и наследованием развёл?
>>445189 ой, нет , фигню написал. Мне же надо зарандомить террэйн, и его нельзя рандомить в конструкторе базового класса.
Значит метод Генерируй() будет в менеджере, и он будет возвращать объект класса УРОВЕНЬ, который внутри медота будет рандомить террэйн, вызывать конструктор(), который в свою очередь будет определять количество мобов и прочие свойства.
Короче, двощ, я сдулал уже крутой инвентарь, отчасти благодаря тебе, помоги и с этим.
>>445195 > Реализация дроп рейта предметов В класс Item добавь поле dropRate и рандомь число от 0 до 100. Чем ниже этот самый рейт, тем меньше шансов что он выпадет. Во всяком случае я так делал, проблем не было.
Вопрос как лучше сделать: -- В базе айтемов на каждый айтем указать вероятность выпадания на определенном террейне. --- или в каждом террейне создать свою базу выпадающих айтемов со своими рейтами. Ну как словарь, например.
Короче, не хочу изобретать велосипеды, и так реализуя механику боя уже наковырялся в своих гениальных костылях, пришлось все переписывать в ноль.
Хочется пример, где есть реализация дропа в зависимости от чего-то.
Вот еще идея: я для террэйна создаю массив айтемов[100], который заполняю :
Аноны, читаю unity in action и там есть такая функция - private IEnumerator CheckMatch() { if (_firstRevealed.id == _secondRevealed.id) { _score++; Debug.Log ("Score: " + _score); } else { yield return new WaitForSeconds (.5f);
>>445214 >Ты ведь понимаешь, что это совершенно не принципиально? не понимаю. Просто уверен придется что-то менять и добавлять, поэтому охота посмотреть на эталонный велосипед и реализовать "как положено". Во-первых: не придется переписывать. Во-вторых: минимум ошибок. В-третьих: приучу себя к грамотным реализациям дефолтных задач. >В варкрафт 3 ковырялся а он опенсорс теперь чтоли?
>>445241 Ты от него не можешь "отвязаться", это блять определение твоей ситуации. Если ты имеешь в виду, что ты боишься промежуточной таблицы - любая нормальная орм будет следить за связями в бд за тебя, так что не ссы (но только не поленись сразу разделить методы, которым нужно о конкретной орм знать, и собственно логику).
>>445245 Антош, потрать на меня еще немного времени. Я правильно понимаю, что м2м это когда айтем знает на каком террэйне у него какой дропрейт и каждый террэйн знает, какой дроп рейт у него для каждого предмета?
Мне всегда это знать не надо, связь в обе стороны тоже не нужна. Достаточно один раз узнать это при генерации. Напимер при генерации террэйна, посмотреть в поле этого террэйна с масиивом айтемов и дропнуть что-то оттуда, или пробежаться один раз по внешней базе всех айтемов и дропнуть оттуда все с ненулевым дропрейтом.
Выше я уже декларировал свой инсайт, что скажешь, покатит? >(я для террэйна создаю массив айтемов[100], который заполняю :
потом беру случайный индекс массива и таким образом монтекарлю себе рандомный айтем из текущего террэйна. Взлетит?)
как вариант, если мне надо будет добавить дополнительный предмет в список дропа, я добавлю его в этот массив с его вероятностью, но чтобы не оверспавнить крутые предметы, перед этим увеличу количество элементов в массиве.
>>445189 как бы всё это целиком зависит от того как ты структурируешь свой генератор. если хочешь захардкодить всю генерациию, то ебись с наследованием. я так делал, но после пятнадцатой закрывающей скобки я решил что нахуй и в пизду.
Парни, я хочу сделать возможность редактировать статы и т.п. извне юнити. Я нашёл, как использовать File I/O и всё такое, вопрос не в этом. Там просто делаешь текстассет, при загрузке игры смотришь, есть ли нужный файл в нужном месте, если есть, грузишь его, если нет, грузишь внутренний текстассет и создаёшь его копию в нужном месте Мне нужно сообразить, как лучше всего сделать парсинг данных из внешнего текстовика. Пока что у меня сделано это через сплит с разделителем по \n и затем с разделителем по ;, но это получается синтаксис текстовика очень требовательный. Да и метод для работы с этими текстовиками очень не-общий. Как нормальные люди такое делают? Пока что склоняюсь к созданию общего метода, который смотрит на заданный разделитель и ищет заданное количество элементов (которые выдаст наружу), если не находит их столько, то дополняет нулями. Но допустим, что есть 4 элемента, как определить, что пропущен 3ий, а не последний? Нужен специальный синтаксис опять.
>>445302 Я даже хз, что тебе сказать. Есть куча бд любых видов, которые специально для этого предназначены, и имеют хуилион человекочасов вложенных в них - нет блять хочу изобретать велосипед. Ты бы еще предложил хранить в джипегах фотки узелковой вязи и тренировать нейросеть распознавать их.
>>445312 >качай ассет качай ещё один ассет и ещё раз Вот так всегда. Либо говорят что-то очень охуенное, либо говорят качать ассеты. Что с вами не так? Совсем опрофессионалились? Чернь кругом видите?
>>445189 >>445191 вот этот ньюфаг с рандомными террэйнами и уровнями сложности на связи.
Сделал. Нормально? Главный вопрос, я же смогу в будущем безе проблем работать методом родителя класса (который не переопределяется) с полями наследников класса?
>>445275 это года три назад было, я так навскидку и не помню. вроде пытался в одну итерацию по главной маске сгенерировать шумы. в итоге на каждой развилке приходилось открывать новые скобки. получилась ебанистическая функция на 700 строчек. но зато лол, генерировала карту только через код. но было абсолютно нечитабельно.
>>445302 может просто воспользуешся XML сериализацией? оно читабельно и уже делает все за тебя.
>>445323 сначала генерацию ебани, потом эти вопросы сами найдут ответ.
>>445325 >генерировала карту только через код. но было абсолютно нечитабельно Играл в Зевса-Посейдона? Там была охуенная система генерации зданий-монументов. Банально был текстовик, в котором указывался начальный "камень", а затем параметрами материалы и т.п. и ещё направление, в котором поставится следующий камень. Если направления нет, то считается, что камень последний. Такая охуительная задумка - просто делаешь два метода, один читает, другой создаёт новый камень в нужном месте с нужными параметрами. Нужен рандом? Делаешь третий метод с генерацией параметров по какому-то алгоритму. Это я так, к слову. Поделиться увиденным хотелось. >может просто воспользуешся XML сериализацией? Спасибо, почитаю, как это работает. Ещё вспомнился метод парадоксодрочилен - берётся таблица csv, и из неё всё нужное выдирается.
Парни, а как можно воспользоваться навмешем без навмешагента? Ну т.е., вот я создал эту карту путей и хочу просто добавить в скрипт передвижение по ней, че там писать то надо?
>>445343 Бля, а хуле у них так всё неудобно? Этому агенту даже сторону, в которую он будет идти нельзя назначить, да и вообще он пиздец какой-то неудобный.
>>445329 ноуп. не играл. в актуальное время не слышал про неё. методов генерации то можно придумать много, но как правило более интересная задача как структурировать это месиво. можно на коленке сделать красивую мешанину, но когда задумаешься "как сделать из этого уровень? где тут должны быть места интереса?" вот тут то и начинается генерация.
>>445340 на самом деле раньше был метод чтобы получить меш навмеша. но ты хочешь хуй знает что. что получить то хочешь?
>>445352 Ну я хочу, чтобы мой енеми искал путь до игрока по навмешу. У меня проблемы с поворотом, просто. Игра 2D и с навмешагентом, мои боты колбасятся, пытаются идти по неиспользуемой оси и т.д.
>>445352 >"как сделать из этого уровень? где тут должны быть места интереса?" В случае с Зевсом всё просто: сложно предоставить в 2д-текстовике возможность моделировать 3д, поэтому вместо того, чтобы каждому камню просто задавать 3 координаты, сделали задачу координат относительно предыдущего камня. К тому же в самой игре здание не сразу ставилось, а его нужно было строить, и строители по заданной последовательности его возводили. >"как сделать из этого уровень? где тут должны быть места интереса?" Имхо, лучше всего заранее сделать определённое число кусков ландшафта, которые друг к другу прилепляешь. Какой бы рандом охуенный не был, он всё равно надоест, а так можно совместить рандом с ручной работой.
>>445353 > Ну я хочу, чтобы мой енеми искал путь до игрока по навмешу agent.destination = player.transform.position Не пойму с каким там поворотом у тебя проблема. Angular speed повысь, если агент поворачивает как полено.
>>445354 Да, а как это сделать? >>445356 Ну он поворачивается так, чтобы двигаться по оси Z в сторону игрока. Из-за этого спрайт поворачивается на 180 градусов и его просто не видно в игре.
>>445355 >Имхо, лучше всего заранее сделать определённое число кусков ландшафта, которые друг к другу прилепляешь. А чалленджи, паззлы или что там для уровня задавать именно через куски ландшафта. Вот, например, есть игра на ПС2 Makai Kingdom, или ещё забавнее, на ПСП Valkyria Chronicles 3: там есть ограниченное количество кусков ландшафта, они присоединяются друг к другу от балды, но в каждом из кусков свой чаллендж есть, не зависящий от всего уровня, а входы и выходы в кусках расположены таким образом, чтобы общий чаллендж уровня воплотить.
>>445354 Кстати, если есть, готовое решение по этому вопросу, то может еще можно нормально сам навмеш делать? А то я, для того, чтобы сделать навмеш добавляю кучу кубов, т.к. из 2д коллайдеров он не делает непроходимый путь.
>>445355 куча вариантов, большая тема. можно просто делить карту на связанные зоны, можно соединять карту из заготовок в гриде, можно написать нейросеть чтобы она тебе из мешанины уровни генерировала "вот тут на камне отличное место для вышки потому что рядом ещё камень" и прочее-прочее. очень уж сильно сами варианты зависят от контекста. >>445360 я не настолько консолота чтобы знать такие примеры. но про Valkyria Chronicles ты что-то страшное рассказал, первая часть была замечательной, а теперь похоже ничего не осталось от положительных качеств.
>>445358 ссылку тебе только что дали. несколько раз, лол. скачай, посмотри, там есть экзампл где ось навмеша крутят. покрути ось. и в следующий раз ставь вопрос правильно "я хочу так. как получить?".
>>442120 (OP) Господа, я ничего не понимаю в серверном программировании и поэтому спрашиваю тут. Подойдет ли Photon PUN для несложной ммо с онлайном максимум 1000?
>>445416 Единственные, кто обещают сделать заебись из коробки - спатиалос, но какие там подводные - не знаю, и сам давно жду хоть каких-нибудь постмортемов. Есть еще всякие подозрительные серваки в сторе и на гитхабе, но это совсем кот в мешке. Свой сервер, если тебе не нужна авторитарная физика, можешь хуярить на чем угодно, хоть на плюсах хоть на пхп. Почитать как сделать заебись нигде нет, только копать известные эмуляторы и те же подозрительные поделки.
>>445468>>445373 ты совсем тупой чтоли? там экзампл в папке лежит как наклонять, тебе >>445365 даже более детальную ссылку дали, а ты все равно хуйнёй страдаешь.
Ребятки, нубо-кун опять на связи. Короче я почти все реализовал. Есть генерация трех уровней разной сложности на выбор, каждый с рандомным террейном и своим рандомным набором мобов. Лист мобов для каждой локации публичный, я натаскивал туда префабы через инспектор, в ходе генерации их оттуда случайно вытаскивают.
Но с выпадающим за прохождение локации шмотом так не сделать. Запарюсь перетаскивать.
Как сделать проще? В идеале мне надо к каждому классу локации прифигачить словарь с (шмот, вероятность выпадания). Сама база шмота у меня в json. Как лучше сделать? Запилить для каждой локации еще json файлик? Или быстрее все-таки в инспекторе натаскать? Словари сериализуются вообще, если будут (ГО, инт) или (стринг, инт)??
>>445302 Снова я Запилил жонглирование текстассетами и текстовиками, с этим, как и думал, проблем нет. Но вот начал читать про xml и csv и прихуел чутка. Мне нужна таблица, которую может редактировать сам игрок, то есть она должна быть достаточно простой, чтобы в ней можно было просто менять значения в полях, и при этом позволять вводить новые строчки со стандартными полями. CSV как работать будет мне понятно, есть пример парадоксодрочилен, а вот XML тёмный лес какой-то. Как оно будет выглядеть вообще? Есть какой-нибудь пример подобной таблицы? Методы для работы с ней тоже бы желательны Или вот захочу папку с картами, где каждый xml будет отдельной картой с последовательностью шагов постройки, как в монументах-зданиях в Зевсе-Посейдоне. Как это будет на xml выглядеть?
>>445689 И ещё кое-что. При загрузке я заношу в один большой словарь все-все-все тексты из текстассетов и внешних текстовиков. Собственно, а не охуел ли я, и не трачу память впустую? Может, можно как-то заблокировать изменение внешних текстовиков во время выполнения программы? Чтобы никто не мог в них что-либо изменить.
XML это не таблица, то есть не двухмерная матрица, в нем доступна большая вложенность и редактировать неподготовленному человеку может быть сложновато.
В примере, что я привел значения заключены между тегами параметров, которые в свою очередь вложены в объекты у каждого из которых есть уникальный атрибут-идентификатор.
Это как бы тебе ликбез краткий.
Так что думаю лучше смотреть в сторону текстовых конфигов.
>>445732 Спасибо примерно так я это и понял >>445733 >Если ты скажешь зачем тебе это нужно и чего ты хочешь добиться, то проще будет подсказать решение. Моддабельность для игры хочу. Ну, и чтобы можно было ручками без вхождения в юнити фиксить разную ерунду вроде баланса. Тут вопрос в том, сколько памяти будет жрать загрузка всех текстовиков в условленной папке внутри папки с игрой. Вон, парадоксоигры грузятся довольно долго, потому что они все текстовики (в форматах txt для скриптов и csv для локализаций) грузят до запуска игры и, похоже, постоянно их держат в памяти. Объём всего текста там несколько мегов, но больше 20, хотя я не считал. Вроде бы звучит не страшно, но я не профи же Из-за того, что всё заранее загружается в игру, можно во время самой игры текстовики менять, как только вздумается. Есть альтернативный вариант - подгружать данные из текстовиков только по запросу, но тогда эти текстовики нужно либо как-то безопасно обустроить, либо заблокировать их изменение во время работы программы. Блокировка звучит гораздо лучше.
>>445734 Я не совсем понимаю все-таки в чем твоя проблема. Почему так важно, чтобы текст нельзя было изменить во время игры? Кто вообще станет таким заниматься в теории?
По поводу загрузки в память ты обсчитался имхо. Средний роман на 300 страниц весит 1,2мб в fb2 и это с обложкой в base64. Значит на деле будет 600кб. У тебя будет в игре текста на целый роман?
>>445745 >Кто вообще станет таким заниматься в теории? Кто-нибудь да будет. А от такого воздействия будут серьёзные ошибки. >По поводу загрузки в память ты обсчитался имхо Может быть. Я ж не специалист. Везде пишут экономить на foreach, меняя их на for везде, где можно, а проку от этого крупицы. Что же тогда делать с 600 килобайтами мёртвого груза, которые нужны очень-очень редко? >>445746 >>445747 По сути, это та же таблица, только визуальное представление другое. Как и xml. Надо обмозговать это всё
>>445748 Не нужно пытаться все заранее оптимизировать. Когда у тебя будет билд уже готовый и ты поймешь, что памяти действительно не хватает, тогда и будешь заморачиваться. На мой взгляд ты выдумал проблему себе.
Как уже заметили, проще для дата-классов использовать ScriptableObject. Урок от Unity как им пользоваться как раз для таких задач. Вообще, в больших проектах дизайнерам проще работать с Excel'ем. Забивать туда сотни и тысячи item'ов, высчитывать по странным формулам цену, графики рисовать и прочее. Потом всё это экспортится в xml или json. Хотя можно прямо из xls читать. Некоторые вообще по сети из google spreadsheet конфиги тянут.
>>445777 Дрочую этого, сам впендюривал в проект на аутсорсе поддержку гуглтаблиц со кучей стат айтемов, которые через жусон в скриптабл обджекты запихивал. Ну и собственно статы подгружались каждый запуск, пока ребалансили.
>>442120 (OP) Парни, можно ли проверить есть ли объект с тэгом на пути луча? У меня идёт луч от эмени к игроку и проверяет, касается ли луч тэга "wall". Я решил сделать стекло в игре, через которое враг может игрока увидеть, но не может пройти соответственно. Так вот прикол в том, что если стоит враг, потом стекло, потом стена, за которой игрок, то враг сагрится и побежит искать игрока.
>>445799 Я не знаю как ты там делал, но ты явно велосипедишь. Вынеси стекло в отдельный слой, который будет игнорироваться рейкастом, и свети себе в сторону игрока. Упрётся луч в стену и никуда твой моб не побежит.
>>445760 >Когда у тебя будет билд уже готовый и ты поймешь, что памяти действительно не хватает, Тогда будет слишком поздно. Вон, соседний тред глянь: >>411195 Эта игра выдаёт 30 фпс максимум. ЭТА ИГРА ВЫДАЁТ 30 ФПС МАКСИМУМ У меня от этого Яндере-дев только он ещё 8 часов на разбор почты тратит Он ещё жаловался, что на проверку каждого нового изменения в игре ему надо по 10 минут новый билд компилировать.
Нужно сразу по уму делать (насколько ум тебе позволяет), а не то будешь сидеть баготестить каждую переменную по полчаса
>>445755 >>445760 В общем, послушаюсь вас. С одной стороны буду хранить не словари с книжного объёма стрингами, а пути к текстовикам внешним и/или название текстассета, с другой стороны буду иметь словарь с преобразованными стрингами, чтобы много раз одну и ту же стрингу не преобразовывать, который к тому же буду периодически подчищать. Благо, после моей ёбли с поисковиком путей у меня охуенный PriorityQueue скодился, можно по тому же принципу сделать подчищалку
>>445809 > Тогда будет слишком поздно Не совсем понял что именно будет "поздно". Оптимизация — это последний этап игропроизводства. Шлифовка, так сказать. Очень многие так нихера и не выпустили, потому что не игру делали, а рисовали три сосны и потом ебали себе мозг как бы их оптимизировать.
>>445813 А потому что и показывать нечего. Ошибка выжившего, знаешь ли. Те игры, что выходят, это результат очень маленького процента тех, кто садился за разработку.
>>445809 >Тогда будет слишком поздно. что за чуш. этап разработки надо делать как можно быстрей, а не оптимизировать. за время разработки свое говно по пять раз перепишешь, прежде чем продвинешься. одно дело поменять имплементацию какого-то метода, другое дело когда придется сносить весьма приличный кусок кода, просто потому что он устарел.
>>445803 >в отдельный слой, который будет игнорироваться рейкастом Вот. Про слои я знаю, а как сделать, чтобы слой игнорировался рейкастом? И можно ли проверять только один слой?
Хочу в юнитях запилить небольшой двухэтажный дом внутрь которого можно зайти. И тут два вопроса. 1)Пилить здание стоит одним мешем или каждую комнату отдельно + отдельно внешние стены? 2)Как пилить коллизию? Меш колайдера достаточно или нужно самому растягивать боксы? Есть ли возможность запилить коллизию в максе/блендере?
>>445785 Я просто покупал плагин бачей за 15 или 20, спредшит 2 что-то там. Можешь просто его спиздить, там скрипт под гугловский апи, который заливается на драйв, и который под себя несложно адаптировать, и несколько скриптов с примерами для самой юнити.
>>445869 > Тестил через Remote Unity У него вообще очень странное поведение. Например, мой персонаж бегает по клику ПКМ, но через Remote ПКМ вполне себе заменяется тапом двумя пальцами. Хотя я коде я ввод под ведро вообще не писал.
>>445898 >Адепты оптимизации говорят >> 445896 > 2)Как пилить коллизию? > Можешь в самом 3d пакете делать коллизию. Но сетка должна быть упрощена (У вазы или люстры, к примеру)
Почему рекомендуют С# и JS, если можно и python, но >But I Would Not propose to use Python...ответ на буржуйском юнити форуме Хочу попробовать в гейдев, но впадлу учить новые языки, знаю Python/C++
Анон, я вот тут начал ковырять юнити, до этого работал искал работу на asp .net mvc/core. И планирую работать дальше, просто по вечерам ковыряясь. Очень доставил геймдев, причем сразу. Буквально за пару глав "Unity in action" втянулся, такая-то душа. Так-вот, вопрос о чем, вы тут выше думаете над оптимизацией одного блядского дома, а на юнити можно понятно что можно, играбельно будет? запилить около опенворлд или просто большие локации полноценные, город там фентезийный с лесом вокруг него, парочкой пещер ну и в таком духе? При этом будет ещё какая-никакая боевочка ну все как всегда.
>>445927 >а на юнити можно запилить около опенворлд или просто большие локации полноценные Даже если нельзя, можно из темноты спавнить новые места, деспавня из мест, откуда вышел, старые
>>445928 А есть мануалы на эту тему, типа как в клевых играх - дальний фон грубо-говоря в скайбокс улетает и прогружается по мере приближения, а тот что прошел - упиздошивается в скайбокс (если я правильно понимаю как работает скайбокс, надеюсь ты поймешь).
>>445927 > вы тут выше думаете над оптимизацией одного блядского дома Это свежий оптимизатор подошел, сейчас хотя бы вопросы более-менее адекватные.
> запилить около опенворлд Смотри выше NavMesh Surface. Десять из десяти, самое то для опенворлда, потому что подгружать нормальный мир вместо LOD не звучит как что-то проблематичное, а вот болванчиков бегать между чанками хуй знает как еще заставить. Для примера пиздатых больших локаций можешь посмотреть какой-нибудь Tyranny (хотя там по-моему приемущественно 2D). Также на канале Unity на YouTube можешь глянуть на йобу из Unity 2017.
> При этом будет ещё какая-никакая боевочка ну все как всегда. Пока пытался сделать хоть какое-то подобие РПГ системы, к Юнити не притрагивался вообще. Прицепить это к движку вообще не сложно, но там начинается период дерганья ползунков и дрочинга чисел, чтобы была DOOSHA.
>>445934 Спасибо, ещё вопрос: планы у меня как у всех просто неебательские, дженерик/некст ген вотэтовсе. У самого с финансами не все прям хорошо, поэтому по началу до альфы точно планирую выезжать на фри ассетах. Стилистика гигантика очень доставила - есть шансы найти хотя-бы в 2 раза хуже халявные ассеты в таком стиле пикрил ? Алсо хочу ММО хотя-бы человек на 20, может посоветуешь что после "Unity in action" можно почитать/посмотреть?
>>445927 >>445942 Сделать можно что угодно, об оптимизации думать будешь когда будет что профилировать. Халявные ассеты кроме каких-нибудь общих текстурок - говно, платные - часто тоже, советую на этапе разработки бессовестно пиздить левые ассеты, а перед релизом взять кредит на нормального дезигнера. Любой левый код, кстати, включая сами дефолтные юнити компоненты, тоже советую оборачивать в свои прокси - потому что вполне может быть придется их менять к релизу.
>>445956 >об оптимизации думать будешь когда будет что профилировать. Не совсем так. Об оптимизации будешь думать, когда увидишь 5 фпс на конфигурации, которая без проблем тянет гта 5 или ведьмака, и осознаешь, что нихуя с этим не поделать, кроме как резать графон/кол-во объектов в кадре, ибо движок оказался говном, а доступа с сорцам для оптимизации нет.
>>445963 Ну если сцена состоит из двух стульев, сам знаешь каких, и задача танцора балансировать на них, чтобы сберечь анальную девственность, тот тут уж как хорошо не танцуй, ничего хорошего не выйдет.
>>445965 >моя сцена - это два стула Господа, вы сначала всякое говно кодите, а потом через пару месяцев достаёте напильники. Как бы хорошо говно не обтесать, всё равно говно будет, и движок тут не при чём, его сразу укрощать надо было.
>>445956 Нахуя дефолтные-то менять? Пример приведи, если не трудно. Алсо на ютубах смотрел чувака, он там по чуть-чуть что-то рассказывал и как-то показывал пару платных сцен - вполне ничего вроде были.
>>445962 Не суть важно. Оптимизировать шкуру неубитого медведа по чужим словам - это всегда выходит въебать кучу времени на какую-нибудь дающую 0.02% хуйню, и упустить дающую 40%.
>>445973 Что угодно - энтити системы, альтернативный физ движок или уи, надстройки над любыми дефолтными компонентами.
Господа, неспешно пилю игорь своей мечты и у меня возникла проблема с анимацией. Например я хочу чтобы гг мог подойти к любому нпс и выебать его в жёпу. Собственно как реализовать сей процесс. Нагуглил я только инверсную кинематику и если я правильно понял она только для статичных объектов. Типо стен, рычагов и др. Прошу хотя-бы пните меня в нужном направлении. В юнити вкатился недавно.
>>445976 Нет, IK можно пилить к любому объекту, как именно это устроено я не знаю, но на этом строится большое количество анимаций. Судя по всему она выебет в жопу тебя и не раз, пока будешь разбираться. https://m.youtube.com/watch?v=o3bYZbbRVq4
Сап. Как реализовывается многослойный фон в 2Д платформерах? Например, статичное небо, медленный лес сверху и кусты, которые будут двигаться вместе с землёй
Вот в этом коллбэке https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnAnimatorIK.html ставишь таргеты и веса для своих рук/ног и головы, при помощи вышеуказанных функций. Позиция - любой Vector3, то есть хоть жопа персонажа, хоть статика, что хочешь. Там даже пример есть, посмотри. В общем-то все значительно проще, чем могло показаться.
Аноны, скажите плз. Допустим я хочу создать убийцу маинкрафта (просто для себя). Будит ли юнити оптимизировать рендер мира? Допустим не выделять ресурсов на рендер блоков, которых не видно и всё в таком духе. Или может там какие-то удобные инструменты есть для оптимизации. Или же всё ручками придётся делать?
Анон, пытаюсь по тутору реализовать подтягивание данных из инета о погоде и в зависимости от погоды - менять скайбокс. Так вот, создал пустой объект, добавил в него 2 скрипта и при старте юнити виснет наглухо. WeatherManager https://pastebin.com/Szsw0U8A NetworkService https://pastebin.com/1Rq4X2Yj Подскажите где трабл? По идее вызываю в WeatherManager Startup>GetWeatherXML>CallAPI>IsResponseValid>OnXmlDataLoaded и даже если оно что-то плохо возвращает - там проверки есть. Алсо если ссылку копирнуть и в браузер вставить - он отдает валидный xml.
>>446073 Добавлю что сцена стала странно себя вести, иногда бывает что я в сцене не могу камеру (свою, не сценовскую) двигать или двигается рывками, если двигаюсь в сторону середины сцены. Хз как описать.
Смотрите, к примеру у меня есть игрок и у него есть здоровье. И мне надо в интерфейсе отобразить это хп. По идее можно каждый кадр обновлять, но можно же и только непосредственно в момент изменения хп обновлять. Это через евент систем юнити надо как-то делать? Или в самом си шарпе для этого что-то есть?
>>446078 >но можно же и только непосредственно в момент изменения хп обновлять Делай так. Скажем, в классе интерфейса есть метод сбора хп, мп и прочей херни, который вызывается через ивенты или прямой вызов, случающиеся во время изменения информации. Сами ивенты вроде получения урона или чего там делаешь ручками, но ивенты вроде встречи коллайдеров и дёргания мышкой в юнити изначально есть.
>>446073 Короче, есть пустой объект, на который я навешиваю Managers и WeatherManager, в первом скрипте должны инициализироваться все менеджеры и мы в цикле ждем пока все менеджеры примут статус Started, я закоментил этот цикл и юнити не виснет, причем в логах выводится xml. Т.е. колбек срабатывает, статус присваивает, но из цикла не выходит. Managers https://pastebin.com/gmV89AiS
пока тестировал одну важную фичу случайно поставил не то значение не там. получил забавную страну тупиков.
>>445976 ИК то чтобы ручки и ножки вставали куда надо, чтобы ручки вот за жопу хватали, а не за воздух рядом. сделай две анимации, где кто-то трахает кого-то, сделай чтобы две модельки подъезжали на нужное расстояние когда это должно случится и запускай анимации синхронно.
>>446078 ну напиши чтонибудь типа public void ChangeHealth(float healthDelta){ health += healthDelta; if(health <= 0)Die(); UpdateUI(); } внутренние поля же все равно не должны меняться ничем кроме подобной хуйни.
>>446092 >>446086 Я так делал уже. Просто хуйня ебаная получается, потому что надо получается вообще в компоненте контролящем хп почти напрямую к интерфейсу обращаться. Было бы веселее, если бы.можно было какое-то универсальное событие запустить, которое уже все нужные системы перехватят.
В общем, сделал я импорт данных из csv и инициализацию юнита из этого csv. И, кажется, я совсем ебанулся. Чтобы юнит мог принять в себя вообще абсолютно любые данные, я соорудил отдельный класс СТАТЛАЙН, в котором лежит словарь с стрингой в ключе, T в вэлью и методами для работы с этим. И этих статлайнов для каждого юнита несколько штук для интежеров и стринг и всего подряд. Когда юнит инициализируется из csv, он берёт в себя любое написанное там говно, сортирует по интежерам-флоатам-стрингам, а затем, когда нужен какой-то стат (который выбирается по ключу-стринге), открывает его из статлайна, но если стата нет, то он находит базовый csv файл для юнитов в текстассетах и присваивает в словарь внутри статлайна нужный стат из базового файла. Так вот. Я обезумел? Где-то тут говорили, что нужно по возможности не плодить лишние ходы для кода и использовать одни и те же методы, и такие статлайны (я думаю) сработают лучше и, чсх, выглядят лучше, чем вручную переписывать для каждого отдельного стата-переменной имя (это заменено string[] {все нужные стринги-ключи}; for i от 0 до string[].length, ну вы поняли).
>>446094 Блядь сделай ты эвент менеджер, сделай в нем эвент OnPlayerDamage или еще какую хуйню, подпишись туда нужной хуйней и вызывай из другой хуйни, какого хуя тебя всему учить надо?
Еще вопросы про инвентарь. Видели где нибудь гайды, где делают инвентари для разных персонажей в одном экране? Ну как у олдовых рпг. Как там лучше реализовать все?
Суть такова, есть экран общего инвентаря, есть панельки с квик-слотами(ну типа пояс), есть инвентарь перса. По клику на перса меняется панелька с его инвентарем, остальное не меняется.
Как лучше сделать? я сейчас совсем опух и попробовал просто геймобжекты предметов выключать, когда окно персонажа закрывается и вместо него открывается другое. Но что-то не очень выходит.
Вообще как такие вещи делаются проще? все на уровен бэкэнда, типа несколько массивов, потом операции с циферками и на выходе уже отрисовка, или можно всю"физику", перемещения предметов и прочее делать геймобжектами и их компонентами, а-ля фронтенд?
>>446263 Ты как-то всё усложняешь. Окно инвентаря просто отображает массив айтемов. Лично у меня они в List загнаны. Разные персонажи - разные List'ы. Как и у лутабельных объектов.
>>446263 В предметах есть метод ShowMe, в инвентаре есть лист предметов. Когда открывается инвентарь, он вызывает ShowMe во всех предметах листа, и каждый предмет показывает через этот метод только свою иконку. Тебе же не нужно сам предмет выключать, только отображать его, верно?
>>446293 а зачем делать всем предметам ShowMe() ри открытии, если они дочерние к инвентарю и мы когда закрываем инвентарь, они и сами появляться/убираться буудут.
>>446314 У тебя предметы только в инвентаре существуют? Никакого влияния на статы и т.п. не оказывают? Я думал, они объекты в большом мире, которые могут существовать в разных обличьях и имеют влияние на мир.
>>446278 >Окно инвентаря просто отображает массив айтемов.
ну их же еще и перетаскивать надо из окошка в окошко, условия проверять. Таскаем мы за геймобжекты, а не за циферки.
айтем у тебя это Геймобжект, или просто класс, описывающий поведение, с циферками, который ты вешаешь на ГО?
Просто у меня есть получается такая картинка, есть Item, который объект, часть базы из json, эти объекты хранятся в массивах инвентаря и пр. Это циферки, грубо. Есть физическое представление этих циферок, класс, который реализует дропы, драги и проч. Наследуется от монобих. И есть геймобжекты, на которые вешается последний класс.
>>446320 влияние на персонажей оказывают. На мир не оказывают. Обычный лут, короче. Немного не понял твою мысль.
повторю реквест, не видели гайдов, где не один инвентарь реализован, а несколько окон, для разных персонажей. Или, например магазин, думаю тоже подойдет.
>>446323 > ну их же еще и перетаскивать надо из окошка в окошко Реализуется элементарно. > айтем у тебя это Геймобжект, или просто класс, описывающий поведение, с циферками, который ты вешаешь на ГО?
Айтем у меня это префаб, который по сути пустой геймобжект, с навешенным классом. В классе прописано имя, вес и тип предмета. А уже по имени подсасывается спрайт, который отображается в инвентаре. > img.GetComponent<Image> ().sprite = Resources.Load<Sprite> ("Sprites/" + it.iName); Инвентарь открыл - из листа всё заполнил. Закрыл - удалил.
>>446324 Гайдов не видел, но можешь посмотреть на реализацию в Divinity: Original Sin 2. Торгует один играбельный персонаж, но можно быстро переключаться, чтобы получать плюшки с навыков/репутации. Все инвентари сделаны обычной сеткой в одном окне, только разделены по именам.
Я тут уже спрашивал вопрос по поводу лучей, но у меня дополнение возникло: В общем-то, рейкаст врага теперь игнорирует стекло и видит сквозь него. Но у меня лучи еще служат для того, чтобы определять стену, в состоянии патруля. Ну и теперь вражина упирается в стекло. Как сделать так, чтобы стекло игнорировало одни лучи, но другие нет?
>>442120 (OP) Сейчас, компилируя новый билд игры, после обновления югити, уже около 15 минут идёт этап "Packaging assets - 8ce0a54f...", почему? (и как можно исправить,конечно)
>>446425 Ух, всё анон. Разобрался. Не в этом трабл был. Сори за беспокойство, просто я ебан сразу в нескольких расширениях одну и ту же модель закинул и такая хуита получилась
Тредик, у меня всрато. Есть сфера, на которую натянута текстура и карта нормалей (обе две dds) из интернета. При этом освещается это почему-то в обратную сторону, и впуклости выглядят как выпуклости. Как пофиксить? Инвертировать нормали пробовал, выглядит еще всратее.
>>446455 >При этом освещается это почему-то в обратную сторону, и впуклости выглядят как выпуклости. Лол, а если реальную впуклость осветить лампой с другой стороны она станет выглядеть как выпуклость? Ну ты и тупой.
Быстрый вопрос. Я генерирую карту из csv и задаю каждому созданному гексу высоту в -34F, потому что это та высота, на которой у меня расположен начальный гекс. Однако, когда гексы таки генерируются, они падают ещё на 34F. Почему? Это нормально?
>>446471 И ещё. Я собираюсь при генерации гекса в месте другого гекса заменять старый гекс новым. Destroy() будет для этого подходить? Я ещё собираюсь все упоминания старого гекса из всех словарей и листов удалять мануально
>>446478 Ну, на мой вопрос ты ответил, так что спасибо >>446473 Там написано буквально по строчке на Space, Self и World. Что я должен был из этого понять?
>>446480 >строчке на Space, Self и W ну смотри, в трансформе указываешь в конце перегрузку Space.World и у тебя обжект генерится в мировых координатах, а если Space.Local то относительно координат создающего объекта. да, доки у юнити та еще дыра, приношу извинения.
>>446474 подходить то, конечно, будет. но зачем такие подозрительные манипуляции, если гекс уже есть?
>>446480 тебе надо понять что все в этом мире относительно. вообще хули с тобой в шарады играть. напиши как спавнишь и мы скажем как надо и в чем ты обьебался.
>>446484 >зачем такие подозрительные манипуляции, если гекс уже есть? у него же там СВОИ_ЛИСТЫ. вероятно ему проще удалить старый и создать новый чем пердолиться с заменами
>>446483 Ясно, спасибо. >>446484 >подходить то, конечно, будет. но зачем такие подозрительные манипуляции, если гекс уже есть? Я сделал генерацию через csv, где каждый следующий генерируемый гекс строится относительно предыдущего Зевс-посейдон и всё такое. Можно, конечно, старый гекс оставлять, но имхо логичнее, что если новый гекс хотят поставить поверх старого, то нужна замена. А если так, то нужно все ссылки на старый гекс подтереть.
>>446492 >где каждый следующий генерируемый гекс строится относительно предыдущего И это очень дезориентирует, как оказалось, лол. Тут без хоть какого-то взаимодействия со старыми гексами, если конфликтует позиция нового шага и старого, не обойтись.
>>446485 а вдруг нет? вдруг он делает что-то удивительное? например удаляет гекс под курсором чтобы вместо него заспавнить подсвеченный гекс! мы не знаем. надо узнать. а заодно узнать на какую платформу ориентируется, что делает, украсть код, идею, душу, ключи от квартиры.
>>446491 порядок орисовки UI элементов же зависит от их положения в иерархии в канвасе, не? хотя я фейд не трогал, может он особенный.
>>446492 ну тогда дестрой, да. кстати почитай про то как юнити интересно дестроит. обьект не исчезнет из твоих листов, но если ты будешь спрашивать у него нулл ли он то он будет говорить что он нулл.
>>446495 >например удаляет гекс под курсором чтобы вместо него заспавнить подсвеченный гекс! Я меняю цвет одного из материалов - пока что. Когда начну корутины грызть, хочу испробовать их на подсветке сначала. >обьект не исчезнет из твоих листов, но если ты будешь спрашивать у него нулл ли он то он будет говорить что он нулл. занятно
>>446495 Пробовал, порядок в Иерархии неважен. >>446494 Куб в игр имеет Fade material, и есть кнопки(UI элементы, картинки UI). Так вот этот куб перекрывает их.
>>446498 Я тоже с рейкастером ебался по этому поводу. Тебе нужно собрать своё говно из палок, в котором сначала будешь смотреть на УИ элементы через один рейкастер, потом смотреть 3д объекты через другой рейкастер. Вот моя версия: >>442550
>>446498 что, прямо из сцены поверх UI чтоли рисуется? какая охуительная проблема. а хуй знает че там тогда, я не пробовал. ну, если у тебя UI только в камере будет, а не в мире, то можешь решить эту проблему основательно. сделай отдельно камеру которая рендерит только UI и поставь у неё Depth побольше.
Посоны, есть одна игра на юнити и мне очень хочется попробовать её перевести. Собственно вопрос в том, где в этих ваших юнити играх лежат ресурсы, т.е картинки, текст, шрифты? Папка resourses весит как-то подозрительно мало. Алсо вопрос номер два: чтобы их достать, нужно ли что-то кроме движка? Знаю, что по крайней мере в ue3 разработчик мог как угодно упаковать ресурсы, чтобы ни одна собака ничего не достала. С юнити аналогично или всем похуй и можно ковырять?
>>446626 круто. Если реально готов заняться, то веди трансляцию на ютубе, там и чатик, и потомкам будет что оставить со списком вопросов. Ну и в шапку можно добавить, если годнотой окажется.
Ребят, кто знает как можно сделать подобное? https://www.youtube.com/watch?v=f2OdrPBgOyY Верх легко можно сделать через Cloth, я его уже сделал, но вот как сделать низ жидкости?
Суп двощ Такая проблема: мне нужно создать аи для игры, взял книгу Unity 5.x Game AI Programming Cookbook но когда запускаю пример из книги мне выбивает ошибка NullReferenceException: Object reference not set to an instance of an object Как фиксить хз, что делать http://dl.dmkpress.com/978-5-97060-436-6.zip
Сап. Есть скрипт, который включается и отключается другим скриптом. Пользовался функцией enabled, но мне надо, чтобы при включении скрипт откатывался к ванильным настройкам, т.е. заново запускал все функции и считал все значения. Как сделать это?
Пришел в Unity из .NET и теперь не могу сообразить. Вот есть у скриптовый файл, в котором описан класс wheel с интересными мне полями. Я хочу их изменить в другом скриптовом файле, где описываю совсем другой класс. При чем изменить я хочу все объекты, к которым приписан этот скрипт (обозначил их все одним тегом). Как это можно сделать?
Привет, геймдевач! Я в юнити буквально пару месяцев как, еще не до конца освоился. Реализовываю двадэшный платформер. Возникла необхоимость выводить имена объектов непосредственно над ними, когда ходишь по локации(да, как в Life Is Strange), то есть например вижу будильник - над ним надпись соответствующая и дергаящаяся, которая слегка увеличивается в размере, если на нее навести курсор, а по клику мыши уже возникает диалоговое окно с определенным текстом, имя объекта пропадает. Думаю, принцип понятен. Реализовал что-то подобное через tooltips, но беда в том, что сами эти подсказки по какой-то причине юнити анимировать не дает. Вторая мысль была сделать это с помощью кнопок, но через gui как это сделать, чтобы кнопки были прикреплены к какому-то определенному месту? (у меня камера следует за персом). Если некорректно/неясно сформулировал, могу как-то попытаться изобразить, что имею в виду и кинуть скрины с наработанным, чтобы было понятнее. я лишь прошу натолкнуть в реализации своей идеи
>>446818 Значит так. Берешь и в VehicleAssist прописываешь поля public Wheel leftWheel и т.д. Потом просто перетягиваешь геймобджекты со своими колёсами в свой ассист и работаешь через эти поля без каких-либо поисков компонентов. А ещё лучше не паблики везде хуячить, а использовать аттрибут SerializeField на приватных полях
>>446836 > А ещё лучше не паблики везде хуячить, а использовать аттрибут SerializeField на приватных полях Кстати, почему? В книге из шапки вон тоже советуют делать так.
>>446852 Потому что пабликами делаются поля, которые безопасно можно модифицировать и не сломать ничего. В этом же вся соль ООП, что по сути ты меняешь состояние объекта не зная, внутренней реализации.
>>446855 Не, это понятно. Но если программирую только я, и я точно знаю, что ничего ломать я не буду и лишний раз паблики дрочить не собираюсь? Понятное дело, что если делать по канону, то паблики отдельно, приваты отдельно. Но в большинстве случаев это вроде не критично.
Там, кстати, в книге автор ещё так советует писать. Например:
private int _id; public int id { get {return _id;} }
То есть айдишник вроде как и публичный, но можно его только получить, а не менять. Что логично, да, с точки зрения безопасности.
Наверное, надо будет привыкать писать так, чтоб потом не краснеть если занесёт к приличным людям.
Я делаю rendererComponent.material.color = color; Цвет - зелёный, т.е. 0 1 0 1 Однако юнити на экране упорно рисует предварительно заданный ранее белый цвет, хотя в дебаге пишет, что цвет зелёный. Так бывает вообще?
>>446857 Знаешь, полезно писать код так, чтобы не замусоривать его комментариями типа "ЭТА ТОЛЬКА ДЛЯ РИДАКТОРА, НИТРОЖЬ". Вообще, в идеальном мире, код пишется так, что если ты смотришь на него спустя полгода а то и больше, то тебе не надо вспоминать, что он делал. В общем, правильно мыслишь. Ещё можешь почитать статьи на рефакторинг-гуру и совсем упороться "правильным" подходом к разработке, но мой тебе совет всё, что там описанр, не стоит воспринимать как 100% истину во всех инстанциях
>>446863 >>446865 Всё, сам решил. Белый цвет задавался в Start(), и по какой-то причине из-за этого он задавался ПОСЛЕ задачи зелёного цвета. Как так-то?
>>446868 > Белый цвет задавался в Start() А зачем ты задавал в коде один цвет, а потом в другом участке кода его менял? У меня вот стартовый цвет задаётся тупо материалом в инспекторе, а потом уже я его меняю в коде и всё норм.
>>446870 Я уже разобрался, в чём дело. У меня был старт для главного контроллёра, где зелёный цвет и делается, и были старты для разных раскрашиваемых хуёвин. До этого момента я, видимо, всегда трогал только те хуёвины, которые стартились до главного контроллёра, и поэтому их цвета нормально работали.
>>446867 Вот, кстати, на комментарии я тоже часто забиваю, надо отучиваться от этой лени. Но даже без комментариев если открываю код трёхмесячной давности (не пол года, но всё же), чтобы посмотреть как я там делал вот ту вот залупу, то всё предельно понятно. Опять же, сказывается тот фактор, что никто кроме меня мой код не читает, поэтому и комментарии писать лень. Хорошо хоть приучил себя к правильному форматированию и не называю переменные lampochka, а методы — VertimHuevinu, за такое ещё в универе монтировкой по ебалу били.
>>446873 > к правильному форматированию Точнее не "к правильному" (стандарты MSDN я хуй помню), а скорее "к единому". Это как свой почерк, даже если писал в темноте и бухой в слюни, то всё равно потом прочитаешь.
Котаны, поясните за popup-кнопки. Суть такова: есть статичная камера, которая смотрит на карту. Камера охватывает всю карту и не движется вообще. На карте есть, например, кубики. Я хочу чтобы при клике по кубику над ним (кубиком) всплывала кнопка (а может и не одна). Короче, хочу чтоб было вот так https://www.youtube.com/watch?v=zd5CvQm1TZI но на видео у него позиция всплывающих кнопок статична, так как камера бегает вместе с персонажем. Мне же нужно чтоб кнопка привязывалась к позиции кубика, над которым всплывает. Не спал 22 часа, так что если объяснил как еблан — не серчайте.
Что-то я конкретно охуел. У меня есть словарь с двумя ключами Team0 и Team1 в виде стринг. Я ввожу текст Team0, проверяю через дебаг.лог - это действительно Team0 - но сучий словарь отказывается этот текст принимать, говорит, что нет такого ключа. Как это возможно вообще? Русского текста там нет, только английский. Никаких невидимых символов.
>>446949 Дело скорее всего в csv файлах, из которых я текст беру. Такое чувство, что одинаковый текст из монобихевиора и из csv по-разному воспринимается. В 99 случаях нормально работает, а вот в этом ну никак, блядь. Может, кодировка как-то влияет? Я уже охуел тут.
>>446993 Я распечатал посимвольно (через char[]) входной текст, и хуле я вижу? Один из символов ЁБАНОЕ НИЧТО Это как вообще? s[0] - это строка из текстовика
>>447002 >>447003 /0 или /r? Что так трудно вывести код этого символа? Да выше по коду можно отследить откуда он взялся, хотябы добавив кавычки в debug.log("\"" + xyz + "\"")
Внимание! А теперь вопрос: Как заставить ScrollView скроллить по тачу только когда элемент не помещается во viewport (тогда же и скролбары появляются).
>>447008 Environment.NewLine - конец строки на активной системе (но файлы то могут и на другой быть созданы) Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries) - разделителей можно несколько указать System.IO.StringReader.ReadLine() - Split медленный и не подойдёт для больших файлов, StringReader быстрее и не жрёт много памяти
>>447078 >стать Юнити экспертом Аххахаха. Экспертами по руководствам не становятся. >(очень нужно, для приёма на работу)? Для первой работы, чтобы взяли в норм проект, достаточно изучить документацию с офф сайта и прочитать пару базывых книг по архитектуре юнити-приложений или чем ты там заниматься хочешь. А дальше после каждого проекта вписываешь его название в резюме и увеличиваешь цифру в графе "желаемая зарплата".
Кодеры, помогите разобраться. Есть 3Д игра, и UI в ней. Ловлю событие onClick в UI элементе, всё обрабатываю, всё отлично, но onClick также срабатывает на игровом поле, сцуко. Есть ли правильный способ отключить событие в игре, если оно произошло на UI элементе?
импорчу модельку из блендера, почему-то при импорте скейл остается как в блендере, а не становится равен единицам. Соответственно при нажатии на ресет, все сбрасывается.
Как в юнити сделать, чтобы при импорте он считал модельку уже в нулях, а не трогал блендера цифры? Ну или как в блендере сохранить текущие параметры скейл-ротейт-трансформ, чтобы при импорте они в юнити не шли.
Блендер только установил, не кидайте тряпками, лучше помогите.
>>447157 Ссу на ебло тупому, бездарному, зачуханному чмырю-дегенерату, который даже не способен своими дряхлыми, немощными ручонками, измазанными по локоть в говне и сперме собак, открыть гугл и вбить пару слов. Псссссссс
>>447168 Предлагаешь каждый кадр анимации синхронизировать? Нормальные пацаны делают рендер отдельно от просчета, а потом анимации подстраивают под движение на клиенте уже.
>>447169 да пока ничего особо не предлагаю, просто интересно. например как сделать перемещения когда персонаж побегал-побегал, а потом ему например надо после удара по ебалу красиво как-то покорячится в анимации и выйти из неё в другом месте отшатнувшись. синхронизировать позицию/ротацию, включить рутмоушен на время этой анимации? как сделать хитро экстраполяцию анимаций, если например геймплей предполагает что удар регистрируется через коллизии мужыка который медленно размахивает бревном накручиваясь в рутмоушене? вроде довольно предсказуемо. или например посадка в транспорт с анимацией, как это было в первом PlanetSide.
по клику на кубик надо превратить его в шарик. Подозреваю что в OnPointerClick на кубике убивать кубик дестроем и на его месте инстанциировать префаб шарика не очень хорошая идея. Есть ли варианты лучше?
Можно ли просто меш менять с коллайдером или это лишние заморочки и проще поменять префаб?
>>447176 а что не так в этой идее то? как бы, зависит от того как часто ты это собираешься делать. всегда можешь лезть в MeshFilter и менять меш там. но вообще нахуй ты задумываешься о таких проблемах то? ты главное делай. просто сделай этот процесс так чтобы его потом поменять можно было безболезненно, если оптимизировать захочется.
>>447179 да, нужно пояснить: кубики, это клетки на сетке поля в игре. При клике будет меняться не только цвет, а и моделька. Условных кубиков много.
Вот если бы не надо было меняь модельку, а только спрайт, или цвет, я бы сделал для всех клеток стейт от енум и менял бы просто его по клику, а дальше подменял текстурку или что там. Но если надо менять модельку без изменения положения Г-обжекта и прочего, стоит ли его убивать и спавнить новый? или это дурной тон?
У меня есть лист префабов. При их инстанцировании, хочу навесить на них компонент скрипта, который потом навесит на префаб другие компоненты через RequiredComp. Как можно навесить скрипт на префаб?
Я знаю варианты: перетащить на каждый префаб в инспекторе. навесить при спавне через AddComponent
Делал генерацию карты, заодно юнитов, заодно локализацию их имён и прочего текста. Очевидно, нужен свитч для языка, и похоже, удобнее всего использовать статический класс. До этого я как-то лепил только в одной сцене, и задумываться над межсценным не особо нужно было. Это не принципиально, но всё же вопрос: как лучше всего делать всякие менеджеры ГУИ и переключатели языков? Какой-нибудь статический класс или же подгружать и удалять отдельные версии для отдельных сцен?
Подскажите туториал, в котором для тупых разжевываются принципы ортографической камеры. Все эти pixels per unit и тд. А то я нихуя не понимаю. В том же гамаке у камеры есть ширина, высота. У спрайтов размеры в пикселях. И все понятно. А тут какие-то PPU у камеры, спрайтов, неба и аллаха.
>>447230 Я имел ввиду, не пиши код, который дохуячивает объекты с настройками в рантайме, а то уже невозможно видеть как всякие костылепидоры суют свои обоссаные жсон и хмл, лишь бы не пользоваться редактором, а всё сделать по-старинке и каждый раз переписывать код своего обоссаного захардкоженого сериализатора.
>>447249 Насколько помню, то если ОТКРЫТЬ ДОКУМЕНТАЦИЮ ЮНИТИ, то там все расписано за единицы измерения. Я бы за тебя погуглил, но я на мобиле сижу. Если нихуя, тогда на пальцах поясню. В юнити 1 единица пространства равна 1 метру. Когда ты импортируешь спрайт в юнити, то по умолчанию размеры спрайта становятся 100 пикселей спрайта=1 метру. Например, если у тебя спрайт 100х100 пикселей, то когда ты его кинешь на сцену, то увидишь, что спрайт у тебя займет пространство ровно 1х1 метр (1х1 единицу пространства сцены)
Алсо, аноны, я пока в больнице кисну, думаю есть ли заинтересованные в том, чтобы я в прямом эфире поотвечал на вопросы про юнити? Если есть, пожалуйста, напишите сюда в какое время (по мск) вам удобно бы было, чтобы я стрим запускал? Я с работы прихожу в 19:00 по мск
>>447257 > В юнити 1 единица пространства равна 1 метру. Когда ты импортируешь спрайт в юнити, то по умолчанию размеры спрайта становятся 100 пикселей спрайта=1 метру. Например, если у тебя спрайт 100х100 пикселей, то когда ты его кинешь на сцену, то увидишь, что спрайт у тебя займет пространство ровно 1х1 метр (1х1 единицу пространства сцены)
Cложна. Окей, тогда так. Допустим, я делаю игру под разрешение 1920x1080. Размер ортографической камеры я выставляю в 10,8 получается (она ж там по высоте выставляется)? 100 пикселей в 1 единице = 1080 пикселей. Потом выставляю аспект в 16:9 и все в шоколаде? То есть потом после компиляции игра будет выдавать картинку в 16:9 с черными полосами если юзер выбрал другой аспект?
>>447271 А если не все спрайты PPU 100? Или надо всю графику делать под единый PPU? Просто ща смотрю курс по юнити для нубов, там чел пихает объекты в игру и играется с PPU по ходу дела.
>>447273 PPU можешь ставить какой угодно, хоть 1, чтобы все единицы юнити у тебя были в пикселях спрайтов. Только потом не сосни, когда у тебя float начнёт пидорасить.
>>447274 Про физику я прочитал уже, что не стоит 1 к 1 делать, если используешь физику. Я больше про архитектуру сейчас. Нужно ли все спрайты пилить под единый PPU, чтобы потом делать нормальные отображения разных аспектов без черных полос?
>>447259 Ты показываешь соотношение сторон в редакторе, соотношение сторон в билде в другом месте ставится, но так и должно быть, да. Никто тебе не запрещает сбилдить и посмотреть.
>>447284 > научитесь шапку читать? > Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты. Нассал тебе на ебло
>>447292 Я пришел с другого движка. И по опыту знаю, что темы с разрешениями идут во всех книгах/туториалах не сразу. Поэтому я хочу заранее прояснить некоторые моменты по архитектуре. Алсо, я обложился курсами с юдеми.
>>447293 > И по опыту знаю, что темы с разрешениями идут во всех книгах/туториалах не сразу Ёлы палы, а оглавление для кого придумали? Что ж это у тебя за опыт такой, который не позволяет его открыть? Да, не сразу, потому как "сразу" там написано куда вообще надо нажимать чтоб движок завёлся. А уже со второй части оно внезапно "сразу", буквально первая же глава.
>>447297 Извиняй, как замутить кнопку "сделать пиздато" не расскажут, но если IQ не двузначное, то книга даст неплохой буст. Тем более что осваивается максимум за три вечера. Это если одной рукой листать книгу, а второй чесать яйца.
>>447299 Я ж тебе и говорю — советы-то тебе дадут, но надо понимать что советы это не панацея и не заклинание, а ими нужно уметь пользоваться. Если умеешь, то бог навстречу.
>>447258 > То есть не статические классы? Ясно, забавно. Да это вообще поебать. Можешь дефолтный синглтон сделать - тоже самое будет. А можешь даже не синглтон, а на сцену свою хуйню в единичном повесить и везде где тебе надо делать файндобжектофтайп. Решать тебе что лучше.
>>447332 Я и написал, что это не критично. У меня в коде и так везде "раскрываются" модули с initialize и задачей параметров, которые затем свои модули задают, но у меня начальный модуль для всего по логике вещей не начальный, а просто генератор карты. Если переделывать нормально, то нужно будет ГУИ на две части делить (общая и конкретно для этой сцены), ивенты делить, генераторы делить, всё делить, короче. Либо же сделать статические классы для всего и хитро переключать состояния, либо же иметь загружаемые отдельно для каждой сцены "полные" версии ГУИ, ивентов и т.п., которые будут заменять собой версии из предыдущей сцены. Деление, имхо, лучше будет, ведь по логике вещей меню, консолька и т.п. в любой части программы должны быть доступны.
>>447275 Ну, все можно и не пилить. Это же просто масштаб твоего спрайта по отношению к пространству. Представь себе картину, что какой-нибудь васян рисовал арт в сантиметрах, а другой в метрах. И чтобы другой васян не переконверчивал арт в нужные масштабы есть ppu.
>>447335 Я хз, мож IoC зря посоветовал, но я вот что еще вспомнил, юньку можно заставить запустить код тупо раньше всех через [RuntimeInitializeOnLoad(BeforeSceneLoad)] static void MyInit() {}
>>447335 Я вообще не пойму о чем ты, шизофазия какая-то. Сцена - это просто рут для геймобжектов, никакого отношения к консоли или к локализации или к чему угодно кроме иерархии геймобджектов она иметь не должна. Статику нормально юзать когда ты код один раз написал и забыл. А чтобы 100 раз не переписывать код каждый раз, когда ты что-то решил переделать, и придумали иок/ди.
>>447368 >>447369 Косяк монодевелоп какой то. Пути с пробелами не может осилить, когда по клику пытаешься открыть. Через меню если самому открывать все нормально. Погуглю может есть что.
Анонсы, у кого-нибудь есть электронные книги по мобильной разработке на Юнити? Что-нибудь из более-менее свежого, типа "Android Game Development with Unity3D".
хочу создать игру с палочным человечком. Так же хочу чтоб анимации не были заскриптованными, хз как правильно назвать, процедурными, рагдолл? Возможно ли это сделать на юнити? Нормально ли это все будет работать если таких человечков будет 10-20 на уровне? Программировать писать быдлокод умею.
>>447380 Поясню. Например человечку надо взять предмет, который может быть разных размеров, как анимировать его руки так чтобы они прицепились за края предмета? еще пример, за ручку двери, кнопку?
Существует вменяемый туториал для тупых по работе со Spine анимацией в юнити? В гейммейкере все просто, там человеческий экспорт без лишних приблуд и удобные методы. А тут что-то какой-то пиздец судя по спайновским докам.
>>447381 Для этого не быдлокод писать надо, а обучать нейросеть. В открытом доступе нихуя юзабельного естественно нет, можешь только ролики посмотреть как они учатся ходить с произвольным строением тела, траверсить любые препятствия, итд. Обычный рэгдолл просто включает физику для конечностей блендом к записанной анимации.
>>447359 >Сцена - это просто рут для геймобжектов, никакого отношения к консоли или к локализации или к чему угодно кроме иерархии геймобджектов она иметь не должна. Поэтому я собираюсь отрезать от нынешнего ГУИ, который имеет в себе методы для работы и с текстом, и с меню, и с прочей чушью, и методы для работы конкретно со сценой, половину и перенести в новый ГУИ, который будет подгружаться только со сценой.
>>447380 Погугли игру StickFightTheGame(возможно слова должны быть раздельно, но так называется архив с ней, который я скачал). Вот она сделана на юнити, и я так понимаю это то что тебе нужно. Можешь там подглядеть строение человечков и вообще на нее ориентироваться.
>>447392 Кстати насколько это вообще сложно? Стоит вкатываться, если мне ничего супер навороченного не нужно, а так, просто поиграться? Если да, то с чего начать? А то мне очень интересны нейросети, но я пока первокурсник и математику знаю соответственно на хорошем уровне для первого семестра техвуза, а для нейросетей я слышал что-то совсем жесткое нужно. Поэтому у меня очень смутные представления о том как они работают.
>>447407 Сама по себе нейросеть простая как бревно, чтобы ее написать математики начальной школы достаточно (или ты легко можешь скачать самую пиздатую готовую). А вот как ее обучать - тут тебе никто оптимального рецепта не даст. Человеческий моск тупо брутфорсит все что есть, ибо может себе позволить. А компьютерную ты так или иначе ограничиваешь, и тут тебе кроме личного опыта нихуя не поможет.
>>447392 на нейросеть я не расчитываю, не для одного человека работа. Думаю несколько функций написать, а для предметов поставить точки за которые и нужно браться.
>>447423 И как ты себе представляешь то же открытие двери в "несколько функций"? Твин культяпки к ручке? А если не дотягивается? Ну посчитать заранее сектор и переместить в него тушу, хуле? А как тушу перемещать? Ну астар типа в анимации движения, потом твин культяпки к ручке, и бленд в айдл для всего остального? Поздравляю, ты сделал обычную записанную анимацию +- 5 пикселей, только непонятно зачем проебался с ней в 10 раз больше.
>>447432 Попрошу сильно не придираться, мне важен сам подход, такие анимации я буду использовать не для каждого движения.
Тушку будет двигаться игроком, а вот ручки нет. 5 пикселей записанной анимации это когда дверь стоит четко в одном месте всегда. А если нет? А если она сверху или снизу? Под углом как нибудь? Наверное будет как ты и написал, спасибо.
Сап, Мэйлач-Геймс. Есть одна клиент-серверная дрисня. Данные (положение в пространстве и прочее) отсылаются всем клиентам по имеющемуся списку.Все ок, все красиво. Задача - сделать так, чтобы данные отсылались только об объектах вокруг персонажа. И тут я меня рвет на части моя собственная необучаемость: что быстрее: OnTriggerEnter(создали стороннего персонажа)\Exit(удалили стороннего персонажа), или OverleapSphere, и его поэлементный !List<БылиВПрошлыйOverleap>.contain(List<ЕстьВЭтотOverleap>) (получили ушедшие слишком далеко персонажи, ручками удалили) и потом еще раз сравнивать !List<ЕстьВЭтотOverleap>.contain(List<БылиВПрошлыйOverleap>) (получили всех новых, ручками добавили)? Как делают большие мальчики? Как принято?
>>447563 Формулировка вопроса у тебя пиздец. В ммо делают тупо зону интереса - квадрат, близко к ребру - 2 квадрата, близко к углу - 4 квадрата. В танчиках на серве включена физика, и на изменение любого позишна пересчитывают двухсторонний m2m кто кого видит. Чистится все и там и там на клиенте без участия сервера.
>>447672 Благодарствую, добрый человек: твоя мать достойная женщина а отец - настоящий мужчина. Я, примерно, понимаю то, о чем ты говоришь, и даже могу несколько дополнить список примерами реализации из Battlefield (которыми все уже хз сколько обмазываются). Вопрос именно в реализации расчета кто именно вошел в "зону внимания", а кто вышел. Поясню: предполагая, что OverleapSphere (который вроде бы даже легче чем CastSphere) вызываемый нифига не каждый фикседСтеп, должен меньше нагружать, я сделал через него. Но сравнение массивов, чтобы понять кто "новенький" в зоне внимания, убивают все что только можно. Тогда как очевидно более медленный OnTriggerEnter\Exit (более сложный в плане как рассчетов, так и обработки), тормозит на порядок меньше. Подобное несоответствие моего мировосприятия и результата и вызвало вопрос: как детектить вошедшего и вышедшего из зоны внимания.
вопрос из любопытства на который я не знаю ответа. юнити же дает вызывать StartCoroutine имея ссылку на объект наследуемый от monobehaviour. я, конечно, могу сам сделать метод который бы сохранял активные корутины в лист, смотрел там все. но я же могу запускать корутины без всяких вопросов и они за три пизды могут крутится без моего ведома. как узнать список активных корутин? как узнать в какую ногу я себе выстрелил?
>>447775 А обязательно сферы оверлипить или кастовать? Нельзя, скажем, задать габариты объектам, посылать эти габариты + координаты объекта всем другим объектам, и если расстояние между объектами + габариты меньше радиуса обнаружения, то считать, что объекты друг друга видят.
>>447739 Я пользуюсь. И как я уже неоднократно объснял, тут суть в том, чтобы ты сука своими кривыми руками не писал код, который в тысяче мест знает какая у тебя реализация конкретного класса. Например, batya.kokushekList.Add(goveha); В этом примере у тебя любой класс будет знать, что у бати 100% есть список с говёхами. Потом, по мере разработки, тебе не понравится List и ты решишь перейти на HashSet и если кто-то будет в отдельной ветке писать всё под тот же самый List соснёт хуев при мердже, т.к. ты сменил реализацию и новый код уже не сможет встать на текущие рельсы. Также при смене реализации, тебе придётся выебать себя в очко и руками обновить тонну классов, которые перестали быть совместимы с изменениями. А вот если бы ты, изначально сделал список приватным, а на любой чих-пых завел бы отдельные методы, то ты бы мог менять внутренюю реализацию класса как угодно, не боясь, что у тебя сотни классов тупо сломаются. Думаю, что объяснил понятно.
>>447783 Гугл предлагает к каждой корутине ручками реализовывать обозначение активной корутины. Можешь добавлять в глобальный словарь (типа, <GameObject, string>) элемент, потом перед окончанием корутины его вытаскивать.
>>447775 Либо я все еще тебя не понимаю, либо ты меня. Еще раз:
Для ммо: у игрока изменился позишн: переслать всем кто в квадратах интереса игрока ивент что он переместился, посчитать текущие квадраты если появились новые квадраты: передать игроку все определения из этих квадратов, которых у него еще нет в кэше, на клиенте почистить все кроме кеша в уже неакутальных квадратах
вся хуйня проиcходящая в квадрате рассылается всем игрокам, у которых этот квадрат в текущих Все. Никаких оверлапов, никаких диффов массивов.
Для танчиков: определения для всех загружаются в начале матча, многие ивенты транслируются вне зависимости от зоны видимости.
у игрока изменился позишн: посчитали кого он видит (тут можешь оверлап юзать если устраивает), заменили м2м на сервере, на клиенте почистили тех, кто выполз из поля зрения. вся хуйня, совершаемая игроком, транслируется всем игрокам, которые его видят, через обратный конец м2м. Все. Снова никаких диффов.
>>447820 это, конечно, вариант. но вдруг корутина безобидная? например прикинь как было бы здорово выводить рядом с объектом список активных корутин. чтобы дебажить какие-то короткие события сделанные с помощью корутин. или чтобы видеть вообще что я, или кто-то, какую-то хуйню натворил а она чето там делает.
>>447829 дааа, это конечно вариант и я предположил его своем вопросе и я сам так делаю в критичных местах. но другие так не делают и мне самому лень эту хуйню творить каждый раз, но иногда она бывает полезна и когда она полезна то экономит кучу времени. можно конечно написать что-то вроде MonoBehaviourExtended и делать все свое говно наследуясь от него. но чёт не понравился мне этот подход, решил на дваче спросить.
>>447831 >ивент что он переместился, посчитать текущие квадраты Как? Главный вопрос - "как именно". >посчитали кого он видит Как? Как видит? Главный вопрос обоих моих сообщений (сорян, я кривоумный) - каким образом реализовывать это "видит", "находится в текущем квардате" и прочее. Как сделать "видит"? Как сделать "вошел в зону"? Точнее, ок, по квадратам я могу попробовать тупо описать сетку Х и Y координат, и потом каждые 0.1f секунд сравнивать. Криво, некрасиво, откровенно геморойно в плане дизайна, но имеет право на существование. Что делать в боле продвинутом, описанном тобою случае?
вопрос от пользователя гамака по 2д во всех туториалах предлагают перемещать объекты используя физический движок, то есть задавать вектор силы и прикладывать его к объекту в гамаке я привык к тому, что перемещаю объект просто прописывая ему кол-во пикселей по x и y
что-то типа player.x += horizontal_speed; player.y += vertical_speed;
в юнити так же можно или не стоит выебываться и просто юзать физический движок для перемещений?
>>447918 В системе статов для персонажей использую свойства где только могу. Очень удобно, особенно потому, что в get можно выводить хуевины типа return _thisPrivateVar + (var1+var2)*0.05; Хочешь выводить приватные поля в редактор — используй [SerializeField]. А так думай, что делает переменная, нужно ли ей быть публичной, и не будет ли удобнее написать две-три функции на три строчки, которые с ней работают. Мимокрок.
>>447903 Можно сделать тело кинематическим и таскать за трансформу, если тебе не нужно физически реалистичное поведение. Силы на него действовать не будут.
Производительность на мобилках В прошлом году один мой друг пробовал устроиться мобильным разработчиком на Юнити. Так вот, на собеседовании он выполнил тестовое задание и они его отругали за то, что он использовал foreach вместо for. Типа это сказывается на производительности, и вообще НИЗЯ ТАК ДЕЛАТЬ, плохой погромист!
На мобилках действительно всё так плохо с производительностью? И нужно использовать только for, забыть про свойства и стараться запихнуть побольше логики в один метод? Мне почему-то казалось, что по-настоящему на производительность может повлиять только графика, а всё остальное - микро-оптимизации, которые нахуй не нужны.
>>447930 Это уже неактуально. Старые версии mono в foreach всегда создавали объекты, даже если GetEnumerator() возвращало struct. Шизики боялись что из-за этого будет срабатывать сборщик мусора и их матч-3 будет тормозить.
>>447930 В любом программировании доебы до любой конкретики при рекрутинге - признак днище-конторы и синдром вахтера. Тебе блять в любом случае придется его переводить считай с нуля под свои практики, никто придя с улицы не будет писать ровно так, как ты хочешь.
Создал префаб, хочу инстанциировать его без драг энд дропа. Как это сделать?
С драг энд дропом я так понимаю просто. public Obj obj; Перетаскиваем префаб в паблик поле и создаем в скрипте. Instantiate(obj, new Vector3(0f, 0f, 0f), Quaternion.identity);
Как сделать без драг энд дропа? Просто указав нужный префаб в коде. Погуглил, там какие-то костыльные решения из 2010 года var instance : GameObject = Instantiate(Resources.Load("enemy"));
>>442120 (OP) Сап господа геймдевы, возник вопрос, в каком виде хранить диалоги и описания объектов, какие БД лучше использовать? Или лучше парсить самому из txt файликов, или собирать json'ы?мб плагины какие есть для разрабов диалогов?
Пытаюсь сделать скроллящийся бэкграунд. Запилил объект, который себя двигает и ресетит позицию когда уехал за край. Потом создаю оба объекта рядом друг с другом (зазора нет). И получается просвет пикрелейтед. Как чинить?
Создаю рядом Instantiate(background, new Vector3(0f, 0f, 0f), Quaternion.identity); Instantiate(background, new Vector3(8f, 0f, 0f), Quaternion.identity);
Двигаю и ресечу void Update () { transform.position += Vector3.left speed Time.deltaTime; if (transform.position.x < -8f) { ResetPosition(); } }
>>447985 слабо, я пока еще не знаю как но проблему решил float xx = transform.position.x + 8; transform.position = new Vector3(8f + xx, transform.position.y, transform.position.z);
>>447980 Вот за эти вот 8f в приличном обществе лопатой по ебалу бьют. Запомни: чем меньше у тебя магических чисел в коде, тем больше посоны уважают, быдло боится, а тянки текут.
>>448062 Блэд, похоже я выработал привычку делать все переменные public. Похоже, пора резко переучится, пока не стало поздно. к теме про SerializedField
>>448064 Сам не так давно переучился. И даже те public-переменные, которые другие классы должны только читать, но не должны менять, делаю через посредника и ебошу get{}
>>448066 У меня ментальный ступор на свойствах. Простая хуйня, но я постоянно путаюсь в этих трех соснах и в итоге нихуя не работает. Ух, чувствую "выебу себя в очко"(С), когда буду убирать public и ставить свойства. Хотя для моего "проекта" можно оставить всё в виде велосипеда из костылейи слава б-гу.
>>448066 Ну и нахуя? Одно дело, когда в переменной хранится ссылка, а другое, когда какой-нибудь интежер. Делать гетсеты для интежеров случайных, когда тебе не нужно каким-то образом их реобразовывать - нахуя?
>>448068 > У меня ментальный ступор на свойствах Может просто опыта мало. >>448069 > Делать гетсеты для интежеров случайных Для случайных и не надо. А если у меня в объекте уникальный айдишник, который если поменять — всё наебнётся, то нехуй мне его менять из другого класса. Как говорится, смотреть можно, но руками не трогать.
>>448071 >>Может просто опыта мало Конечно мало. До сих пор в коде юзаю около 30% херни которую не до конца понимаю. Но мне и не надо, я и не хочу бы программистом
>>448071 >нехуй мне его менять из другого класса. А зачем у тебя всё на айдишнике завязано? При создании класса задаёшь айдишник, и больше его не трогаешь. >Для случайных и не надо Сам говоришь пабликов бояться, сам говоришь, случайные в покое оставить.
>>448074 > При создании класса задаёшь айдишник, и больше его не трогаешь Естественно не трогаешь. Как раз потому через посредника его и расшариваю, чтоб никто не трогал. Но если надо будет его прочитать — всегда пожалуйста. > Сам говоришь пабликов бояться, сам говоришь, случайные в покое оставить Никого бояться не надо. Если число нахуй не нужно другим классам — private. Если нужно в полном доступе — public. Если нужно в ограниченном доступе — посредники. Вот и вся кухня.
>>448077 >Как раз потому через посредника его и расшариваю Нахуя его расшаривать вообще? В идеале классы должны лезть только в те классы, которые были из первых классов созданы. Так тебе вообще морочиться с доступом не нужно. А раз ты создал из первого класса второй, то второй безопасно может обращаться в первый, как первый безопасно обращается во второй.
>>448078 > Нахуя его расшаривать вообще? Ну например, у меня есть много объектов, среди которых есть пары, определяющиеся одинаковым айдишником. И контроллер как раз для определения пары сравнивает айдишники. Читать для этого он их должен, а вот менять — не должен.
>>447930 > на собеседовании он выполнил тестовое задание А не в курсе что за задание хоть было? А то я б тоже куда-нибудь пристроил свою жопу, но понятия не имею что там спрашивают и какие задания дают.
спрошу и тут Такая беда: Два монитора, 4к и фулл хд. Если перетащить окошко спрайт эдитора на второй фуллхд монитор, то он сваливает из сраного низкого разрешения, спиздив сраное окошко. Вернуть его не получается, тк это не отдельное окно в винде и перемещение не работает. Работает сброс лейаута на заводской, но не буду же я каждый раз так делать, он и мои настройки трет. Знает кто-нибдуь решение?
Пацанва, вопрос по рейкастам. Мне, надо узнать не точку, в которую попадает луч, и пересекается ли он с определенной коллизией. Поставить к другим коллизиям игноррейкаст не подходит, т.к. они используются для других рейкастов. Собственно есть ли возможность у луча определить пересекается ли он с конкретным объектом или, хотя бы, выдать все объекты, которые он пересекает. Если есть, то как сделать? Если нет, то что можете посоветовать?
Встретил проблему, мыкался туда-сюда около часа, решил спросить в треде. Пока формулировал вопрос по самым строгим критериям местных unity-богов, нашел решение. Телепатическая помощь. Секнс.
>>448370 Ты в любом случае рейкастишь, но в случае без слоёв используешь свой собственный фильтр. Если несколько миллиардов подсчётов в апдейт не суёшь, то даже не заметишь, что что-то там подсчитывается
>>448376 этот дело говорит. повылезают из каменного века со своим программированием, какими-то модификаторами доступа. в 2к18, лол. качаешь ассеты, хуяришь их на сцену и заебись. ну можно ещё тумана пиздануть чтоб края замылить. и всё, готово.
>>448380 ти так говоришь будто это не так эти охуевшие потом своё говно на фуллассетах на сторы льют, потом говорят что они начинающие инди игродел каманды
нет, серьёзно, пока ты, я, анон, кирилл, серега, вот мы все — пока мы сидим на дваче в юнетитреде беспокоиться о чистоте кода, да и вообще качестве своих поделий мягко говоря рановато. делай хуяк хуяк, чтобы было хоть что-то, выдумывают тут блять себе проблемы.
Анончик, подскажи. Есть у меня 3 одинаковых плитки, на них висят триггеры. Во всех случаях их коллайдеры должны пересекаться, но OnTriggerEnter срабатывает только когда я встаю в ту, которая расположена выше всех (пикрил). Что я делаю не так? Хочу чтобы плитка лежала на полу и срабатывал триггер. Если увеличить коллайдер на плитке то всё работает, но это какая-то хуйня и смахивает на костыль.
>>448501 > ригидбоди только на игроке должен быть Схуяли? Риджидбади должен быть на любом из объектов, которые будут реагировать на OnTriggerEnter, OnTriggerExit и т.д. На каком именно — вообще похуй. А так как на игроке, судя по скрину, риджидбади нет, то я потому и спросил есть ли он на плитках.
Почему Resources.FindObjectsOfTypeAll и Object.FindObjectsOfTypeAll не ищет мои инстансы скриптабл обжектов?
выдает пустой массив. Как правильно искать объекты не в сцене? Или лист со скриптабл обжектами лучше сразу дополнять при инициализации каждого экземпляра?
>>448564 Лучше положи эти объекты на сцену. =ДА-ДА, НЕ НАДО УДИВЛЯТЬСЯ!!!= Хочешь научу класть любой объект на сцену? Просто впихни ссылку и сериализуй её в сцене и хуяк, юнити САМА ВСЁ ЗАГРУЗИТ!!!11111111
РАЗБЕРЁМ НА ПРИМЕРЕ:::
Сначала ПИШЕМ РУКАМИ, ВОТ ЭТА:: class SerGAYsexSIMONOV : MonoBehaviour { [SerializeField] myScriptableObject my33cmDIeCK;
void Awake() { my33cmDIeCK.Suck(); } }
Потом СОЗДАЁМ НА СЦЕНЕ GAYmObject, вешаем скрипт SerGAYsexSIMONOV и в инспекторе просто перетягиваем наш ScriptableObject в поле скрипта SerGAYsexSIMONOV.
ГОТОВО!!!!!11111111)))))
И такое можно проворачивать с ЛЮБЫМ ОБЪЕКТОМ. Все ссылки, которые видит юнити на сцене, она автоматом загрузит.
Только долбоёбы в 2017 году пишут свои загрузчики ассетов. Ровные пацаны ебашут референсы.
На самом деле можно ещё через ассетбандлы, но для тебя сложно будет скорей всего.
>>448586 Ну начинай отлавливать где что не так. Попробуй повесить в тот же скрипт void OnMouseDown () { print ("yoba"); } Если по клику мышкой тебе в консоле что-то выдаст - уже хорошо. Если нет, то проблема не в тех твоих двух строчках.
>>448588 Судя по ошибке, он у тебя жалуется на LaserWeapon.Shot (shotSpawn), а не на сам laserWeapon. в ту сторону ковыряй. Может он shotSpawn и не видит.
>>448599 В принципе поебать, если на префаб плиток повесить риджидбади и хуйнуть isKinematic. Но по-хорошему да, лучше вешать на игрока. Только вот там висит CharacterController, так что на игроке риджидбади будет так же лишним.
>>448615 Мне вообще кажется странным, как у тебя это устроено. В курсе, что если скрипт прикреплён к объекту, то геймобжект можно по gameObject вызывать? Как варианты: ты забыл сохранить скрип, нужно перезагрузить юнити, возможно, ты всунул не тот лазер.
Есть 2 объекта. Один создает второй и хочет получить от второго его высоту используя публичный метод. Получаю ошибку >unity object reference not set to an instance of an object
Скрипт родителя.
public Slot slot;
void Start () { Slot s = Instantiate(slot, new Vector3(0f, 0f, 0f), Quaternion.identity); print(s.GetHeight()); }
Скрипт детеныша
public Sprite[] icons; private SpriteRenderer spriteRenderer;
>>448635 >>448637 Риджидбади нет нигде, на персе висит чар контроллер я нуфак и читаю unity in action, не бейте лучше обоссыте. Пробовал вешать и туда и сюда, ничего не меняется. Суть-то в том что плитки все одинаковые, но на одной триггер не срабатывает, а на другой которая расположена например на 10 пикселей выше - срабатывает, хотя коллайдеры должны пересекаться в обоих случаях.
Псоны, нубский вопрос. Вот есть у меня класс Pushka, в котором есть поле (или свойство?) private damage. И вот создаю я класс OhuennayaPushka и наследую его от Pushka, а не от MonoBehaviour. Правильно ли я понимаю, что пока я не сделаю damage публичным (а не приватным, как он сейчас) моя OhuennayaPushka не будет знать что это за дамаг такой?
Наконец-то закончил (почти) генерацию карты, и теперь нужна камера. Стрелочками и мышечкой запилил, но теперь нужно сделать границы движения камеры. У меня есть карта, состоящая из отдельных гексов, которые сами из чего-то состоят. Как мне весь размер карты найти, чтобы камера не могла сбежать из определённого радиуса от ближайшего гекса?
>>449044 Что странного-то? Мне нужно как-то слепить все гексы на карте в одну фигуру и забрать из этой фигуры габариты. Это вообще возможно? Можно, конечно, искать ближайший гекс к текущей позиции камеры, но как-то по-нубски это выглядит.
>>449052 сам факт вопроса. как будто твой генератор генерирует пустоту, или белиберду в которой ты сам ничего понять не можешь. просто взять минимальные и максимальные позиции вертексов по нужным тебе осям тебе не нравится что-ли?
>>449059 Это предполагает, что карта прямоугольная. В общем-то так сделать тоже вариант, но я много в каких играх видел, как камера привязана к ближайшей "твёрдой" точке, а не к минимуму и максимуму.
>>449214 > Так что, это всё просто затем, что великие умы постановили так делать? Тебе выше уже давали ссылку на статью про инкапсуляцию. Если ты не можешь её осилить, то у меня для тебя плохие новости.
>>449217 > Ты сам-то понимаешь, нахуя это нужно, ммм? Для защиты данных, прикинь. Но ты не задумывайся об этом, смотри дальше уроки на ютубчике и двигай ассетики по сцене.
>>449218 >Для защиты данных, прикинь. Для защиты от кого, от тебя самого? Ты что, настолько себе не доверяешь, что тебе нужна инкапсуляция, чтобы по соседним классам методы для работы с этим классом не распихивать? Серьёзно?
>>449217 Ну ты и кретин. Тебя носом ткнули куда пойти почитать чтобы не завадавать дебильных вопросов. Твое предположение про байтики - вообще оскара стоит. Можно ради лулзов в шапку добавить. Модификаторы доступа нужны для (внезапно) модифицирования доступа. Если ты хочешь унаследовать свойство - protected, если свойство нужно только этому классу или на нем завязано поведение класса - private, если тебе нужно использовать свойство из других классов - public. Место в памяти занимает само свойство, а не модификатор доступа к нему. Опять таки, я описал очень поверхностно и не совсем правильно, пиздуй читать основы блядь программирования, а не строй из себя идиота, но можешь и построить, это-же двач.
>>449222 Ооо, мемасы пошли. >>449224 Тут вопрос не в том, уебёшь ли себя током, а в том, не пойдёт ли ток не по тому проводу. Даже с изоляцией риск будет, так-то. >>449225 То есть это разделение не несёт прямой практической пользы, а только косвенную (и весьма сомнительную). Всё ясно с вами. А сколько гонору-то, спрашиваешь, тут же начинают "ыыы бля да у нас на раёне за такое убивают!" Вообще охуеть. Лепят и не задумываются, нахуя оно надо.
Ребят, перетащил инвентарь из Джейсона на скриптабл обжекты. Прикольно, офигенно. Но можно ли как-то сделать, чтобы если ты редактируешь объект в кастомном эдиторе, при изменении одного значения, можно было бы автоматом менять и другие, не выходя в плей мод? Пока что я вижу вариант только через кнопку, типа ApplyChanges, нельзя ли как-то на лету? Например я добавляю элемент в лист, и в другом листе у этого-же объекта добавляется определенный другой элемент.
>>449231 Ага, не признаёт авторитет стариков непререкаемым - значит, ассетики двигает. Да ты совсем тут зажрался. Небось, по 300к в секунду зарабатываешь, да? Молодой успешный специалист в молодой динамично развивающейся компании?
>>449233 Наоборот, вопрос в том, насколько бы всё было проще. Ты пробовал нормальные кнопки в юнити сделать? Это же кошмар просто. Или эти рейкасты, которые просвечивают сквозь УИ всё под УИ? Вот и лепишь велосипеды с костылями, только бы подальше от стандартного набора фич отбрехаться.
>>449239 > Вот и лепишь велосипеды с костылями А ты не лепи, а документацию читай. Методы есть на любой случай жизни, просто о них не знают даже те светлые умы, что на ютубах свои "уроки" ебошат, а сами кроме трансформ и ротейт нихуя не знают.
>>449240 >А ты не лепи, а документацию читай. В соседнем треде (или вообще на политаче) про собеседования программистов было такое. Мол, не знаешь хуйни, которой в жизни вообще ни разу не пользовался и не воспользуешься, ведь другие способы и роднее, и лучше - значит, плохой, плохой программист! Зазнались вы, батенька. Вот объективно - плохие ли стандартные фичи юнити? Ну, понятно, что хоть что-то лучше, чем ничего, но всё же.
>>449238 >Despite being the lead developer of Godot, I have almost 20 years of experience developing and shipping games, and a decade of experience as technical consultant.
>>449241 > плохие ли стандартные фичи юнити? А я только про стандартные и говорил. Их до сраки, просто не на поверхности лежат. > про собеседования программистов было такое. Мол, не знаешь хуйни, которой в жизни вообще ни разу не пользовался и не воспользуешься, ведь другие способы и роднее, и лучше - значит, плохой, плохой программист Ну собеседования — то отдельная тема. Тут смотря на кого попадёшь. Бывший одногруппник говорил что ему замечание сделали из-за того, что он фигурную скобку с новой строки в коде открывает.
>>449243 >А я только про стандартные и говорил. А что, ещё и продвинутые есть? Я как бы про не модифицированные самим пользователем (или велосипеды) фичи говорил. >Их до сраки, просто не на поверхности лежат. Например?
>>449238 Разве НИИ пердуны в 90-х придумавшие анально огораживаться от всего мира инкапсуляцией богатые? Гора денег на твоем творении никак не выставляет тебя как опытного разработчика а во времена говностартапов это должно быть особенно очевидно. Автор статьи создал опенсорс движок, создал вокруг него сообщество, сделал десяток игр и имеет огромный опыт в игровой индустрии и смежных направлениях. Но для кириллов итт критерием профессионализма программиста конечно являются деньги.
>>449244 > плохие ли стандартные фичи юнити? > А что, ещё и продвинутые есть? Тебе виднее, ты же спрашивал. > Например? Недавно вон кто-то (может ты, лол?) лепил здесь велосипед, чтобы обработчик клика мышки срабатывал только тогда, когда курсор не перекрывает UI. Пердолился с рейкастом, определял во что рейкаст упрается, пыхтел и пыжился, а мог бы всего лишь прописать EventSystem.current.IsPointerOverGameObject () и готово. Узнал он об этом слишком поздно, велосипед выбрасывать было уже жалко. Или вот ещё один тут целый трактор изобрёл для сортировки геймобджектов по расстоянию относительно объекта. Там такое нахуевертил, что глаза болели. А можно было сделать IOrderedEnumerable<T> OrderByDistance<T>(T[] array, Vector3 point) where T:Component { return array.OrderBy (x => (x.transform.position - point).sqrMagnitude); } и пиздец. Много чего удобного зарыто.
>>449245 >сделал десяток игр Если ты не поленишься и решишь загуглить, что он сделал, то увидишь, что он по сути был КОНСУЛЬТАНТОМ ПО ТЕХНОЛОГИИ, а не разработчиком какого-нибудь говна. МАМ, Я АПИ НАИЗУСТЬ ЗНАЮ, МАМ
>>449247 >обработчик клика мышки срабатывал только тогда, когда курсор не перекрывает UI Я такой велосипед собрал ещё полгода назад и очень счастлив, что сделал его. Никакой ёбли с юньковским сумасшествием. И весь пердолинг заключался в гугле - и это для меня, который в жизни раньше не программировал. Предпочитать своё удобство юньковским заводским костылям - ну уж извините. https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html Посмотри внимательно на это и скажи, кто и в каких условиях мог придумать такой дизайн для определения, UI это или нет под мышкой.
Делаю простые вроде бы вещи: Есть некий WeaponBehaviour : MonoBehaviour
И есть вот такое, чтобы сделать мини-БД привязки пребафа с этим WeaponBehaviour к строковому ID
[Serializable] public struct WeaponPrefabConfig // похуй, что struct, что class делал { public string Id; public WeaponBehaviour Prefab; }
[CreateAssetMenu(fileName = "WeaponPrefabsConfigAsset", menuName = "Beehit/WeaponPrefabConfig", order = 1)] public class WeaponPrefabConfigSO : ScriptableObject { public WeaponPrefabConfig[] Weapons; }
После я в редакторе создаю из этого WeaponPrefabConfigSO ресурс, заполняю его (пока что всего 2 элемента) и делаю на него ссылку еще в одном моно. И вот к моменту ссылки на этот ресурс он УЖЕ может стать каким-то "поломанным"/не валидным и ссылку на него дать нельзя. Возвращаешься к нему в ресурсах, а инспектор при его выделении ничего не показывает. А может и все будет работать пока не запустишь игру и только тогда все слетит. Какой-то полный рандом в этом отношении. Есть предположения что за..?
>>449263 это понятно, а как в кастомном инспекторе подхватывать изменения на лету? Там же только OnEnable есть. Для того, чтобы запустить метод какой нибдуь, надо или туда пихать, или кнопки городить.
Есть спрайт оружия на персонаже для анимации. Хочу из него сделать иконку для инвентаря, для этого надо сдвинуть рамки у спрайта( сделать меньше). Ручками для каждого предмета делать не хочу, хочу программно. Есть инспектор скриптабл обжекта с предметом, есть два спрайта, начальный(для анимации персонажа, то что пойдет ему в руку) и тот, который хочу получить, на него в инспектроре превью прилеплено. Пытаюсь создать второй спрайт от первого так: SpriteIcon = Sprite.Create(SpriteOnPlayer.texture, new Rect(0, 0, SpriteOnPlayer.textureRect.width, SpriteOnPlayer.textureRect.height), new Vector2(v1, v2), 100, 0, SpriteMeshType.FullRect, new Vector4(border1,border2,border3,border4));
непонятные переменные задаю ползунками пока для наглядности. Ничего не выходит, как обрезать сраный спрайт?
>>448993 >>449052 А вот и смежный вопрос подъехал. Допустим, я хочу подсветить границы какого-то поля из гексов, причём только внешние. Как взрослые дядьки это делают? Первая мысль - разделить гекс на 6 "стенок", собрать подсвечиватель, который будет высчитывать, граничит ли гекс стенками с другими гексами из группы, и если нет, то подсвечивать не граничащие стенки.
Делаю мобильную игру по классической схеме с выбором уровней, которые различаются лишь декорациями/набором противников/доступным оружием (примерно как Angry Birds).
Разумеется нелогично было бы на каждый уровень делать отдельную сцену.
Как лучше организовать сам проект? Я так понимаю, что у меня будет 3 основных сцены: стартовый экран, экран с выбором уровня и сам уровень.
Соответственно, в сцену с уровнем мне нужно будет подгружать параметры: доступное оружие, фоновый спрайт, время и место появления врагов. Как это правильно сделать? Можно ли хранить набор параметров в отдельном массиве в контроллере (или в файле конфига) и при клике передавать в загружаемую сцену? Есть в Юнити какие-то нативные возможности?
Прошлый тред: https://2ch.hk/gd/res/427717.html
Официальный сайт: https://unity3d.com/ru
Документация: https://docs.unity3d.com/ru/current/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com/
Магазин ассетов: https://unity3d.com/ru/asset-store
UnityWiki: http://wiki.unity3d.com/index.php/Main_Page
На Unity сделано много замечательных игр - Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
FAQ
- Какие у Unity сильные стороны?
- Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
- Какие у Unity слабые стороны?
- Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
- На каких языках я могу писать скрипты для Unity?
- На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.
- Для каких жанров подходит Unity?
- Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.
- На каких платформах работают созданные с помощью Unity игры?
- Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
- Часто вижу скриншоты с красивой природой на Unity. Как такое создать?
- Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
- Что такое стартер киты?
- Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.
- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки?
- Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
- Бесплатен ли Unity?
- Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
Обучение
- Язык
Итак, с чего же начать изучение этого замечательного движка? Прежде всего, с изучения языка. Самые основы C# можно узнать на интерактивных курсах здесь:
https://dotnetcademy.net/CSharp/Beginner
или в текстовом туториале здесь:
https://www.tutorialspoint.com/csharp/csharp_quick_guide.htm
Для изучения основ UnityScript выучи вначале основы JavaScript:
https://learn.javascript.ru/
Помни, что далеко не все элементы JS есть в US. Чтобы понять, в чём разница между этими двумя языками, прочти эту статью:
http://wiki.unity3d.com/index.php/UnityScript_versus_JavaScript
Помни, что тебе достаточно одного языка из двух и учить их оба одновременно не нужно.
- Движок
Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка.
http://www.ozon.ru/context/detail/id/34792570/
Также посмотри на видеотуториалы с официального сайта:
https://unity3d.com/learn/tutorials
Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь:
http://catlikecoding.com/unity/tutorials/
Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху:
https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started
Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов:
https://noobtuts.com/unity
В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Шапка: http://www.writeurl.com/publish/zukmrogwv45ptyuseyol