Это копия, сохраненная 17 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: 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
Двачую. Уже чувствую, как простейшая двадэ головоломка уровня злых птиц лагает от космического количества слоёв абстракции. Гамак, заточенный чисто под 2д, передаёт привет. С ним годот, констракт и остальные.
покажи хоть где не прав, чтобы исправился. Писал бы приложение на сях, создал бы где-нибудь в мейне обекты и хранил бы их. А тут как делать?
Dontdestroyonload()
Ну твою то за ногу, ну пройди ты официальные туториалы на сайте Юнити, поделай туториальные игры. Тогда не будешь задавать вопросы, которые в силу их безграмотности никто даже не может понять, не то что ответить. Что у тебя за пять экранов, пять мониторов чтоли, игра для биржевых аналитиков?
Если тебе нужно грузить сцену, при этом не уничтожая что-то что-то, есть Dontdestroyonload, есть LoadSceneMode.Additive; можешь что-то сохранять в ScriptableObject.
Экран с загрузкой - если я правильно понял, речь о SceneManager.LoadSceneAsync(додуешь или нагуглишь, как сделать индикатор загрузки).
Паузу можно ставить с помощью time.timescale = 0f Может это и не самый грамотный способ, но извините.
Аминь, братишка.
Сразу про poolmanager погугли.
Нахуй нужен движок разработчики которого даже не делают игры? Как они могут сделать хороший для разработчика движок?
>Все на поверхность 3д плейнов выводится и снимается с камерой без перспективы.
Будто что то плохое.
> гамак - ну это вообще несерьёзно
Зачем ты судишь об инструменте, который никогда в глаза не видел?
> Можно на вашем гамаке или констракте сделать что-то уровня Heart of Iron 2?
Можно
Гамак - серьёзно. Хотлайн, hyper light drifter, 12 is better than 6, spelunky, nuclear throne и прочие кагбэ намекают. Годот - штука специфичная, в него вкатываться трудно пзц. За констракт не отвечаю.
Вообще не вижу проблем. Берёшь алгоритм A-star, ведёшь врага по пути, при появлении шума меняешь конечную точку на источник шума и заново строишь путь. Прафет.
>Хотлайн, hyper light drifter, 12 is better than 6, spelunky, nuclear throne
Это ты типа годные игры перечислил?
Просто массив или Dictionary<> JSON не сможет реализовать, так как это ссылочные типы.
Посмотри, может вот эта штука сгодится https://docs.unity3d.com/Manual/NavMesh-BuildingComponents.html
Это -самые настоящие игры. Фэнтезийные, нереалистичные, аркадные и интересные. Игоры фаркраем не ограничены.
Да никто не спорит, что можно сделать неплохой экшн с видом сверху, рпг ил платформер. Но 2D этим не ограничивается. Ещё есть большие и сложные глобальные стратегии, с кучей графиков и расчетов, с огромной непрерывно обновляющейся картой. И тут юнити будет лучше.
Вычисления массивов данных можно проводить хоть в чистом си, всем насрать. Памятью чаще всего заведует ОС/виртуалка, нежели двигло, особенно в языках с мусоросборщиком. Тут как раз Юнити будет лишним.
>Ещё есть большие и сложные глобальные стратегии, с кучей графиков и расчетов, с огромной непрерывно обновляющейся картой.
Которые ты никогда не сделаешь. Потому что помимо программиста и художника в команде должны быть несколько математиков и экономистов, которые допилят баланс до играбельного состояния. Без баланса хардкорные игроки скажут "фи" и все.
>>42218
Кости не должны торчать, лол. Если торчат, то кто-то что-то похерил при импорте модели и сетка не привязалась к костям.
Делают Т-позу потому что так проще моделлить и рисовать веса на модели при риге. Если по стойке смирно будет стоять, то очевидно, что заебешься из за близости рук к телу.
Уже не делаю, подумал что лучше в каждом объекте, что может получать урон, проверять в OnCollisionEnter2D() столкновение и через switch определять тип попавшего снаряда и снимать HP.
Хотя EventManager всё равно до конца не ясен
Я ивенты как место связи использую. Туда помещаю всё, что происходит в самой игре (а не просто в коде) и от чего зависят много скриптов разом. Скажем, смена хода, удар, движение и всё такое, т.е. не банальности, а как бы комплексные действия.
Думаю, он говорит про кнопочки (которые хуёво устроены) и про панельки с текстами (которые тоже хуёво работают). Довольно просто настроить и значения туда-сюда подогнать. А с туториалами вообще можно целую игру запилить не погружаясь в дебри программирования. Мечта любого парадоксоёба-моддера, короче.
В общем, я не нашёл ничего про инпутфилды кастомные, поэтому придётся использовать встроенный. https://docs.unity3d.com/ScriptReference/UI.InputField.html
Я правильно понимаю, что могу сделать наследующий класс инпутфилда, взять любую функцию из списка, ебануть оверврайт, поставить base что-то там, чтобы выполнялось то, что выполняется в оригинале, и дописать своё поверх?
Что из этого отвечает за включение/выключение режима письма в бокс? Activate и deactivate?
Скажем, мне нужно в изменять вводимый текст, чтобы при введении какого-то слова оно окрасилось в какой-то цвет. Понятно, что нужно подменить текст. Что и куда менять надо из этих функций?
ну а что по твоему ещё? открой ссылку на гитхаб, там экзамплы лежат, посмотри.
Прикрутил EventManager описанный в "Искусство создания сценариев в Unity" Алана Торна (стр146). EventManager отсылает уведомление о событии всем подписанным на него объектам. Каким образом можно отослать уведомление конкретному подписавшемуся из нескольких?.
Я не помню точного кода, но ты подписываешь каждый объект отдельно. Там какая-то строчка с +=
спросить "ты ли это?" у каждого кто принял. но вообще если ты дошел до такого то ты не совсем правильно пользуешься этой штукой
А конкретному нельзя, это да
Ну, чисто технически, ты можешь конкретному отослать, но менеджер эвентов - это тот еще головняк и лучше используй его, когда у тебя есть события типа: пауза, на локации пошел дождь, тян серит вонюче. То есть, там, где тебя не ебет флоу.
Я для своей игры так делаю:
Отдельный объект урона, разные типы урона наследуют от основного урона. В основном объекте метод нанесения урона, в который заносятся параметры от участвующих юнитов. Удары случаются только от абилок, так что этот метод (ссылка на объект урона занесена в абилку как тип урона, также удобно на панельке абилки информацию об уроне выводить) вызывается из абилки, когда она используется. Всякие баффы тоже отдельными объектами, в них есть список подписанных на конкретный бафф юнитов, у юнита список наложенных баффов (для удобства, опять же), если есть баффы, их методы используются до абилки или после.
Через ивенты в принципе будет то же самое (я думаю), но ты будешь тот же самый метод вызывать из другого места просто. Может быть проще следить, но я что-то сомневаюсь, что в этом дерьме так уж много строк, чтобы не уследить.
Просто массив или Dictionary<> JSON не сможет реализовать, так как это ссылочные типы.
ты задал вопрос через жопу. опиши структуру того что ты пытаешься сериализовать. и отдельно опиши более детально что ты вообще пытаешься делать. желательно с картинками.
Уже сделал, спасибо
Это либо юнити совсем охуел, либо я в конец даун отбитый:
Проставил галочки как на пикриле, собираю билд на ведро, но ебучая черная полоска с дебагом все равно всплывает сверху.
Галка девелопмент билд отключена.
Спасай, анон, что это за хуйня?
Какая еще черная полоска? Ты там какой нибудь ебучий ассет скачал чтоб он тебе полоски показывал.
У меня же получается, что когда я нажимаю на один объект, местоположение меняют оба. Почему так и как вообще лучше реализовать это?
>>первый изменит местоположение.
>>местоположение меняют оба.
Место где именно указывается какой объект меняет местоположение.
Ты бы хоть для других написал как.
>Думаю, он говорит про кнопочки (которые хуёво устроены) и про панельки с текстами (которые тоже хуёво работают). Довольно просто настроить и значения туда-сюда подогнать. А с туториалами вообще можно целую игру запилить не погружаясь в дебри программирования. Мечта любого парадоксоёба-моддера, короче.
Это про юнити или констракт?
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
не по тегу или имени объекта на который нажали, а тому объекту, который я объявил в самом скрипте.
То есть я объявляю public GameObject Obj;
И мне надо совершить действие после клика на него. Но не через
if (hit.collider.gameObject.tag == "...") или name.
>>42447
Вот собранный из говна и палок рейкастер. Правда, он для 3д. Суть его в том, что он видит одновременно и ГУИ, и сами игровые объекты.
https://pastebin.com/n2Q6iCRg
По умолчанию видит любые объекты, которые наследуют от IClickable, и берёт первый, в который упирается луч. Объект обязательно должен иметь image.
Добавляешь к объекту новый компонент RaycastFilter и используешь метод Initialize, чтобы рейкастер мог перестать замечать части изображения, которые за пределами коллайдера. Добавляешь компонент RaycastHidable и наследуешь от IRaycastHidable, ставишь в нём owner'а объект, к которому добавил RaycastHidable, и затем можешь переключать бул raycastHidden, чтобы рейкастер мог видеть/игнорировать этот объект
В переменной hovered лежит объект, в который упирается луч после фильтров. OnMouse*Custom'ы в видимых рейкастеру объектах вызываются в соответствующий момент.
void Start (){
mousePosition = Input.mousePosition;
mousePositionGlobal = Camera.main.ScreenToWorldPoint(mousePosition);
}
void Update (){
transform.position = Vector3.MoveTowards(transform.position, new Vector3(mousePositionGlobal.x, mousePositionGlobal.y, 0.0f), speed * Time.deltaTime);
}
Пуля доходит до точки где был курсор в момент выстрела. Как заставить пулю лететь до упора?
> Пуля доходит до точки где был курсор в момент выстрела
А схуяли она должна через MoveTowards лететь дальше координаты конца вектора? Вычти от mousePositionGlobal свой tramsform.position и внезапно получишь направление (геометрию в школе прогуливал что ли?), а по этому направлению уже пускай свою пулю по прямой.
А что это?
Ты про OnMouseEnter/Exit? Если панелька в GUI будет висеть над объектом, то случится хрень полная. Мышка зашла на панель, мышка заходит на объект, но не вызывает OnMouseExit для панельки. С таким рейкастером не нужно придумывать охуительные системы вычисления, над чем же, бля, мышка висит.
>>Геометрию в школе прогуливал что ли?
Ага. Вместо уроков шел играть в вов в клуб. Даже не знаю что было лучше -полюбить игори или знать геометрию?
Спасибо, всё работает как нужно
>EventSystem.current.IsPointerOverGameObject
Неа.
https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html
В любом случае говноёбство. Велосипед с нуля логичнее работает.
Никак. Тебе решать, что лучше. И тот и другой подход имеют право на жизнь. В идеале заранее спланируй какие у тебя там менеджерв должнв быть и что они будут делать, а также подумай не избыточны ли они.
Удачи в написании велосипедов вместо игры.
Нужно просто постараться.
Игровая импотенция у геймдевелопера или у игрока? В первом случае это профессиональная деформация, второй случай у каждого по своему развивается.
Считаю что лично мне игровая импотенция не светит - за всю жизнь я прошел около 5-7% существующих игр. К тому же я каждый день повторяю мантру про охуеность геймдева Видео-игры - апогей современного творчества....
Привет, как сделать кнопку интерфейса видимой только во время нажатия кнопки (E) клавиатуры?
То есть, какая команда отвечает в скрипте за это?
>игровая импотенция не светит
Так же она не светит любителям дотки, майнкрафта, ЖТА, лола, чо я еще забыл?
Имхо, как раз именно сессионки становятся причиной игровой импотенции. Дрочить одно и тоже рано или поздно надоест, а осадок в виде рвотной реакции на все игры вообще, остается.
Куда угодно, только не на хуету, которую прятать собираешься. И да, саму хуету в скрипт передать не забудь.
А меня только R6:S спасает. Всё ранее перечисленное вообще не заходит (а доту даже не пробовал).
бамп разочек
> В первом случае это профессиональная деформация
Профессия еще не началась, а уже деформировался.
5% игр точно не прошел, но много овощил в РПГ (500 часов в Скайриме благодаря модам), преимущественно из-за красоты и загадочности миров, интересного лора. Теперь вот пытаюсь сделать подобный рай для аутиста.
Хуйня какая-то, вставь текст ошибки лучше полный.
Понял в чем ошибка. Этого объекта нет на сцене, когда он пытается вызвать корутину.
Аноны, хелп! Писал на юнити игру с февраля 2017, значит все собрал, все работает и решил я накинуть плагинов с рекламой и достижениями. Выбрал плагин от аподила и плагин от гугла с достижениями. И они вместе никак не хотят работать. Вылетает ошибка unable to convert java dex format. Проблема в том что в папке plugins слишком много плагинов и андроид не может собрать апк. Подскажите, может кто-то с таким сталкивался. Пытался собрать через градл, но там полетело еще больше ошибок. Хочется чтоб и ачивки были, и копеечка с релкамы.
Проблема была в этом:http://answers.unity3d.com/questions/745685/nullreferenceexception-on-startcoroutine.html
Я использую переменную в которую подгружаю ссылку на текущее оружие: currentWeapon = new Rocketshoot(); . Для стрельбы вызываю соответственно currentWeapon.Shoot() >>42617. В совете выше предлагается использовать AddComponent вместо new и я не понимаю как именно, ведь мне нужен весь объект а не какой-то его компонент.
Ни фига себе, у тебя headless server будет? На hlapi ваяешь что-то вроде авторитарной архитектуры? Unet так то фигня сырая, мало кому нравится.
я сорт оф сделал прототип с hlapi. на сервере болтается синглтон который сообщает клиентам всякие мелочи вроде какая карта выбрана, где текущий респавн и прочее. общий статус игры в общем. но внутри какая-то нелепая мешанина с делегатами. пару дней назад полез в llapi и меня устраивает, но туда проникать буду долго. теперь вот у двача решил спросить советов
Hlapi в основном для прототипов и советуют использовать. llapi смотрел, вроде можно работать, но это какой-то гемор. Есть же готовые решения. Мне например Photon понравился из п2п релейки. Вот про его отличия от юнета https://www.youtube.com/watch?v=Y1my5bKhKJY
Правда, родные скрипты вероятно придется переделывать/допиливать, PhotonTransformView и т.п.
Что касается клиент-серверной архитектуры(если ты ее делаешь), поспрашивай у других анонов. Для нее тоже есть готовые решения, Forge networking например, но я их не тестил.
спасибо за ответ, да.
да, я уже смотрел это видео и знаю. делаю клиент-серверную архитектуру, но чтобы сервер мог к себе присоединиться как клиент ещё.
ещё несколько дней посмотрю llapi, хочу попробовать сделать его вместе с hlapi. сделать чтобы общая информация передавалась через llapi и чтобы оно служило как метод синхронизации состояния, но с перемещением и прочими мелочами вроде и hlapi неплохо справляется. хотя все это выглядит сомнительным. потом наверно фотон посмотрю и Raknet планировал глянуть.
Перезарядку на выстрел корутиной
Нашел, WaitForSecondsRealtime
> подгружаю ссылку на текущее оружие: currentWeapon = new Rocketshoot();
Нихуя не понял твоей логики. Ты из нихуя создаешь новое оружие в переменной, в которой оружие свапается постоянно.
На пике то, как твой шутан должен примерно работать, на видео примерно тоже самое описывается.
https://www.youtube.com/watch?v=bvRKfLPqQ0Q
Спасибо, сейчас попробую переделать.
Что должно быть в ShootingMechanic ? Пустой public virtual void Activate(int damage) и всё ?
Выдает NullReferenceExeption в 16 строчке (твой пик).
ShootingMechanic — это MonoBehaviour. В моем примере от этого класса наследуют типа механика стрельбы снарядами по прямой и механика стрельбы рейкастом. Можешь еще прикрутить гранаты и спавн взрывчатки на точке.
В ScriptableObject'е (который оружие) потом навешиваешь ту или иную механику. Только в оружие тебе нужно еще вписать префаб снаряда, иначе их хуй передашь.
> Выдает NullReferenceExeption в 16 строчке (твой пик).
Так допиши проверку на null, одной строчкой решается.
Лол, блядь, потому что конструктор арсенала просто создает пустые ячейки, все внутри него равно null. Тебе надо в префабе игрока в арсенал закинуть хотя бы пистолет. Шаблон под оружие у тебя есть, надо просто сделать вариант, который можно назвать пистолетом по урону и скорости стрельбы.
Можно последний даунский вопрос?
>>надо просто сделать вариант, который можно назвать пистолетом
Это должен быть скрипт наследующий Weaponq? Или префаб? Ни одна хуйня не подходит.
Доделаю оружие - приведу всё в порядок.
Подскажите и я съебу наконец.
27-ая строка позволяет пилить ассеты из этого класса. Т.е. отдельную инстанцию объекта. В браузере файлов Унити (ну или как он называется, ты меня понял) на ПКМ создаешь ассет, настраиваешь урон, кд, патроны, спрайт/модель.
Все, у тебя есть пистолет.
Только сериализуй struct Weapons, чтобы он появлялся в компоненте игрока и кинь пистолет туда.
Гугли ScriptableObjects и как они работают.
Есть у меня, значит, девконсолька. Всё работает, гайд в интернете есть, открывается-закрывается, кнопки жмутся, проблем нет. А есть сам инпут филд с дитём-текстом. Инпут филд тоже работает, я к нему прикрутил почти всё, что мне нужно, но при тесте встала проблемка: похоже, инпут филд имеет свой набор быстрых клавиш, и при нажатии эскейпа он принудительно удаляет вписанное в инпутфилд.
Как и где это лечить? Всё, что я с этим инпутфилдом делаю, это вызываю Activate/DeactivateInputField(). Эскейп тоже вызывает в одном случае Deactivate, но аналогичный вызов через клик на пустую область экрана не стирает набранный текст
>>42732
в итоге полез ещё дальше в llapi. вообще, теперь когда я узнал как оно примерно работает то код hlapi который в открытом доступе лежит стал заметно понятней. наверно можно и его будет напильником допилить.
но там такое чтиво что прямо зачитаешься.
>>42812
за пару лет зоонаблюдений в этом разделе и конкретно в юнити-треде я видел некоторое дерьмо. если достаточно упёртый и не тупой то и ты увидишь.
Векторы, возможно захочешь запилить какие-нибудь формулы, например для опыта персонажа.
да знаем, просто проблема мелочная. на, почитай.
https://bitbucket.org/Unity-Technologies/ui/src/0bd08e22bc17bdf80bf7b997a4b43877ae4ee9ac/UnityEngine.UI/UI/Core/InputField.cs?at=5.2
>>42817
решай проблемы по мере их поступления.
Хотел пошутить про чтение 2к строк кода, но потом F3 и нашёл
protected EditState KeyPressed(Event evt)
и дальше
case KeyCode.Escape:
{
m_WasCanceled = true;
return EditState.Finish;
}
Как мне это исправить? Не оверрайтнуть же
зато чтение 2к строк кода всегда сработает!
а ты и не можешь, не виртуальная функция же. можешь просто скопировать весь код и переписать как тебе там надо. хотя вон единственная функция которая эту вызывает виртуальная. public virtual void OnUpdateSelected(BaseEventData eventData). оверрайдни её, скопируй её код и сделай проверку с кейкодом, например.
Спасибо за помощь.
Вон, выше в треде про велосипеды писали, мол, зачем, в юнити же всё есть. Конечно есть, но вот как какая-нибудь подобная хуетень вылезет, так всё равно всё копировать и переписывать
Парни, подскажите в двух-трёх словах, а там уже я подхвачу.
Есть NavMesh, на нём есть статичные преграды,в виде, например кубов с коллайдерами. Есть NavMeshAgent'ы, висящие на, допустим, капсулах. Скажите куда копать чтоб одна капсула, видя другую враждебную капсулу, скрывалась за ближайшим укрытием.
Каждая капсула рейкастит по враждебным капсулам, если есть контакт, то она так же рейкастит пути укрытия, так? Вот эти самые пути укрытия я не сильно понимаю.
Ссылка случайно приклеилась, пардон.
на здоровье.
да ладно, подумаешь какой-то ебучий UI, он в открытом доступе лежит. его же не просто так положили открытым. решать такие проблемы это не велосипеды делать.
другое дело когда тебе действительно надо писать велосипеды. когда понадобится хитровыебаная навигация, ИИ, процедурная генерация, собственные инструменты заточеные под проект и прочие интересные вещи. вот тогда начинается интересное.
>>42825
лол. честно? хороших методов мало. можешь сделать несколько самплов на навмеше рядом и проверять видимость до них, а потом просто выбрать самый ближайший. но ничего тебе не гарантирует что эти точки будут достижимыми. как раз такие проблемы и требуют кастомных решений.
но если очень хочется то можешь воспользоваться моим ассетом
https://www.assetstore.unity3d.com/en/#!/content/85181
он может тебе возвращать грид достижимых точек на навмеше в пространстве рядом и даже генерировать укрытия
https://www.youtube.com/watch?v=M3x9l-wWNJU смотри какую хуйню можно творить
надо будет кстати починить его уже. триангуляция очень уж далека от совершенства.
Первый костыль, который приходит в голову, это проверка наличия укрытий через коллайдер, затем смотреть на каждом укрытии, будет ли агент защищен.
на здоровье. учитывай что я не написал никаких крутых алгоритмов навигации, агенты даже не знают что рядом есть другие агенты и будут просто толкать друг друга. там ещё писать и писать, а ведь надо копать в другие стороны ещё.
с другой стороны можешь пользоваться двумя навмешами сразу. навмеш юнити тоже очень хороший.
https://www.youtube.com/watch?v=Cjf7QEJ4HCM вообще навмеш а самом деле может делать гораздо больше чем от него обычно ждут. когда у тебя на руках пиздилиард вокселей которые описывают всю геометрию вокруг и можно управлять ими как хочется то сразу столько возможностей.
вообще навигация в играх это большая и интересная тема. у тебя может быть и простое решение, зависит от того как у тебя устроен уровень.
Обратись в саппорт, там быстро ответят.
Гайс, как мне описать движение объекта(спрайта) чтобы объект двигался не тупо вперёд , а по направлению тела
Анонусы, возникли вопрос.
1. Во-первых, существуют ли сайты с которых можно скачать платные ассеты?
Это ведь везде так — если есть что-то платное, то где-то на торрентах по-любому можно найти крякнутое. Но я перерыл всё что мог и нихуя не нашёл. Вообще пусто, даже каких-то устаревших ассетов платных не нашлось. Такого в природе вообще не существует и все прилежно покупают?
Даже на торрентах можно найти крякнутый Unity Pro максимум 5.2 версии, что примерно двухлетней давности.
2. Как привязываются покупки ассетов? То есть понятно, что к аккаунты. Но вот я зашёл на их сайт, залогинился, купил ассет.
А потом иду и логинюсь под этим аккаунтом в про версии. Мне пиздец или они это не чекают?
Можно ли на разных компьютерах пользоваться юнити под одной учёткой (и качать купленные ассеты)?
3. Третий вопрос более локальный к моей проблеме. Возникла задача заимпортить анимацию Point Cache. В инете либо устаревший скрипт, либо покупай за 35 бачей ассет для 5.6+ версии. Неужели все, кто сталкивался с такой задачей шли покупать ассет? А что если версия у меня старее? Мне уже никак не решить эту задачу тогда?
Надеюсь на ответы анончики.
мимокрок
двигать его по направлению тела? ну тоесь лол если же вычесть из позиции Б позицию А то ты получишь направление от А к Б.
>>42843
да. существуют. плохо искал, плохой пират. ищи лучше.
>>42844
можно сказать это и делает мой навмеш. вообще вокселей слишком много. чтобы это хорошо работало надо писать свой рэйкастинг чтобы он происходил на гпу быстро-быстро.
>можно сказать это и делает мой навмеш. вообще вокселей слишком много. чтобы это хорошо работало надо писать свой рэйкастинг чтобы он происходил на гпу быстро-быстро.
Погоди, у тебя рейкастинг постоянно идет? Я имел в виду, что можно отрейкастить один раз все статические укрытия.
нет конечно. укрытия являются побочным продуктом создания навмеша. у меня там нет рэйкастинга по моему нигде вообще. там магия линейной алгебры. но чтобы проверять валидность укрытия надо же делать рэйкасты. притом на нескольких высотах если есть перепады в них. если брать самплы точек вокруг то даже если точки каждые пол метра то выходит под добрую сотню точек если надо проверить хоть какое-то значимое пространство вокруг на предмет укрытия, притом количество проверок множится на каждого кто может это наблюдать. под этак и выходит по 2-3к рэйкастов в итоге, что пиздарики.
у меня вот есть понятие о укрытиях, пространстве которое находится только рядом с препятствиями. можно проверять не сотню точек, а десять и на гораздо большей дистанции. но опять же точка рядом которая находится в небольшой ямке может быть гораздо лучше.
плюс опять же проблемы с навигацией. даже если ты знаешь что рядом есть укрытие то проверить цену перебежки к нему можно только на навмеше. потому что укрытие может быть на другой стороне стены.
вообще методы поиска укрытий сильно зависят от геометрии уровня. если они представляют собой коридоры из пары стен которые все на одном уровне то разумеется все заметно проще. а если у тебя лес с камнями то охуеть можно.
Не, я хуево сформулировал
Например есть спрайт стрелочки , как сделать так чтобы объект(этот спрайт) всегда двигался в направлении стрелочки , а не по Х например
Тут тебе нужна геометрия.
Как вариант - берёшь точку и берёшь точку с другой стороны объекта, меряешь расстояние между ними, затем берёшь другую точку рядом и противоположную ей, снова меряешь, и так повторяешь, пока не найдёшь самое большое расстояние между точками. Это расстояние будет означать самую большую ширину объекта, и по точкам от этого расстояния можно найти прямую.
Затем можно найти "вес", то есть с которой стороны спрайта больше точек закрашено, и по нему определить, в какую сторону смотрит стрелка.
Братан, ты походу шаришь. Расскажи как сделать вот у меня есть спрайт хуя, как сделать чтобы он все время двигался тебе за щеку, а не по Y например
transform.right или transform.up можно для этого использовать.
Скорее всего автор пикчи обосрался и тебе нужно создавать не экземпляр абстрактного класса, а экземпляр наследующегося от него класса. Но вообще я нихуя не понял что там за решение.
О да, большое тебе спасибо, я вроде бы распутал этот клубок.
Я наебался и класс не должен быть абстрактным, конечно же.
> хотя бы создается пустой объект
Если он без полей в редакторе, прописывай [SerializeField] над private переменными.
Есть 4 ячейки сверху, 4 снизу, хочу перетаскивать карточки туда-сюда.
Написал реализацию через интерфейсы IdragHandler и пр. таскаются.
Есть два массива, для карт в верхних ячейках и в нижних.
Тип массивов лучше сделать ГОбджекты или Классом скрипта? Не могу решить как удобнее.
И главное, как проще реализовать изменение значений массивов этими перетасканными картами?
Или сначала менять значения, а от них уже таскать?
Сейчас пробую сделать свойство у карты, допустим CurrentCell, где сеттером присваивать значение нужному элементу статического массива из ячеек.
То есть допустим есть GameObject[] TopCells, я туда перетащил, ОнЕндДраг получил значение номера клетки, взятое из OnMouseOver клетки, присвоил его CurrentCell карты, дальше сеттер пихает gameObject в массив.
СЛОЖНО ВЫХОДИТ, совсем голова не варит, как проще сделат?
Бля, впизду. Твой уровень интеллекта не достижим для меня. Я разобрался на половину, но всё равно тут ещё слишком много копать. А мне нужна была всего лишь строчка if (toCd < Time.realtimeSinceStartup) toCd = Time.realtimeSinceStartup + cd;
просто ты валенок и пытаешься делать то что не соответствует твоему уровню знаний. делай более простые вещи.
Вот сдесь есть все что тебе нужно сумеешь раскопать все получится охуенно https://www.youtube.com/watch?v=KLaGkc87dDQ&list=PLX-uZVK_0K_7V8z0lfuC9680FnCWoYdbb
простой тебе совет: если ты валенок то повторяй за другими. когда станет понятно что происходит то делай по своему.
вон видяшечки на ютубе посмотри кто как чё делает.
Я месяц назад нихуя не шарил. Сейчас тоже, но в меньшей степени. Смотри Live сессии, там один хуй половину основ объясняют, остальную половину догугливаешь если надо, к этому всему сверху еще и примеры работающей игры (ну или хотя бы механики).
> Посоветуешь что-нибудь?
Появляется проблема — гуглишь — скорее всего находишь сессию — получаешь развернутое решение с плюшками.
Я тебе с самого начала кидал по ScriptableObject'ам сессию. Там очень хорошо описан вариант использования как раз для решения твоей проблемы.
ищи на ютубе длинные серии из видео, где кто-то делает что-то с нуля достаточно продолжительный срок.
мне например понравились старые видео этого бородоча. https://www.youtube.com/watch?v=YYqzz1dy3Ak&list=PLE5C2870574BF4B06 он там неебическое количество времени делал хуйню. играбельного он ничего не сделал, но как учебный материал более чем сойдет.
Охуительная, блядь, система. С одной стороны, есть такая жуткая ненастраиваемая вещь, как private методы и булы внутри класса инпутфилда, благодаря которым хрен ты что поменяешь, не скопировав все 2к строк или не применив охуительные познания в порядке апдейтов. Не хочешь, чтобы при включении инпутфилда текст выделялся? Изволь сообразить десяток костылей! Не, оно понятно, что всю теорию и практику кто-то где-то уже сообразил, но честь-то знать надо. Мало этого, так ещё с инпутфилдами крепко переплетается инпутменеджер (тот экран с настраиваемыми клавишами) и анально внедряется во все области жизни всего игрового интерфейса. Отключить оси инпутменеджера нельзя, - посыпятся nullexception'ы, - чтобы private методы изменить нужно весь код копировать и надеяться, что у юнити какой-нибудь скрытой хуйни в каком-нибудь другом классе нет, из-за которой весь код на плаву держится. Ладно, хорошо, можно навигацию отключить, но так дело-то в том, что это говно запривачено по самое небалуй в коде. Люди на эту херь с 2004 года жалуются. Как это блядь вообще?!
Я давненько так не охуевал, если честно. Как вы с этим живёте?
>>42987
вся твоя проблема выглядит как что-то что не является проблемой изначально. для меня загадочно нахуй ты вообще делаешь то что делаешь. копирование класса в случае с инпут филдами разумеется сработает, он же там никуда не лезет глубоко в сам движок. вообще ты всегда можешь воспользоваться старым гуи, если тебе новый не нравится, или даже скачать альтернативные решения вроде NGUI. тебе вот всяких вещей дали, сделали за тебя много, а ты жалуешься. можешь вот UE попробовать, он опенсорсный же, лол. но пойдя туда будь готов что если ты что-то дёрнешь то потащишь код со всего движка. а если глубоко залез то хуй тебе а не обновления.
что по твоему проще?
вообще если надо то не копируй весь инпут филд, всегда можно написать свои инпут филд с игрищами и блудницами взяв за основу код уже существующего. вот как я например с классом графа аниматора поступил. сделав все как надо тебе всегда получаешь ожидаемый результат. а тут за тебя и так уже почти все сделали.
>для меня загадочно нахуй ты вообще делаешь то что делаешь.
Вот представь обычную консоль на тильду. Вроде просто, из самых простых палок и говна нормально работать будет даже без дрочки, но если хочешь хотя бы минимального удобства, то приходится искать способ отрубить принудительное выделение всего текста при включении поля, искать способ менять взаимодействия клавиш в самом классе, чтобы в случайных местах не отрубалось и не прыгало, искать способы убрать инпутменеджер, чтобы нажатие на стрелку не переключало фокус, и всё такое подобное. Да, это не глубоко лезть, да, погуглишь, и всё будет, но блин, вы на поделки на юнити посмотрите, там везде одни и те же проблемы, и эти проблемы с самого начала юнити висят. Пишут функционал, который нужен в узких случаях, но для его работы нужно анально ограничить тот функционал, который нужен широко.
>всегда можно написать свои инпут филд с игрищами и блудницами взяв за основу код уже существующего
Ну, это выше моего поверхностного понимания юнити.
>тебе вот всяких вещей дали, сделали за тебя много, а ты жалуешься.
Звучит как "жри, что дают". Не пойми неправильно, я благодарен, но это жесть какая-то. На кой чёрт писать фичи, которые нужно самому пользователю вырезать, чтобы они ничего не портили?
>Вот представь обычную консоль на тильду.
лол сделай её на старом гуи, хули ты мучаешся. он гораздо лучше подходит для таких задач
а, ты не знаешь. классы
https://docs.unity3d.com/ScriptReference/GUI.html
https://docs.unity3d.com/ScriptReference/GUILayout.html
на нем свои кастомные окошки сейчас пишутся, там ещё куча другой хуйни есть в этом случае. вот они делают только то что делают. ничего лишнего.
>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.
>вот они делают только то что делают. ничего лишнего.
Вижу. И как взаимодействие игрока с прямоугольниками делается? Смотрим, как широко раздвинули в коде прямоугольник, смотрим, влезает ли в эти координаты мышка, и от этого отталкиваемся?
Ну, я уже присобачился использовать панельки во всех ролях, но гуи действительно выглядит получше.
там своих интересных трюков полно. для того чтобы узнать расположение курсора в прямоугольнике там есть такая клевая хуйня как система эвентов, например. можно написать что-то в духе if(rect.Contains(Event.current.mousePosition)){} и узнать находится ли мышь в прямогульнике.
он хорош тем что он рисуется каждый раз с нуля, в нем не надо никакими эвентами менять значения, чтобы они обновились. для взаимодействия с твоим говном напрямую просто заебись. все происходит в одном месте.
ну а новый гуи хорош производительнотью, своими фичами с скейлом, системой делегатов, тем что он геймобжект, интерфейсами и прочими полезными вещами. для чего-то хорош старый, для чего-то новый. советую знать оба.
Даун не может зайти в гитхаб/ассетстор и написать в поиске unity console, спешите видеть
Делаешь три системы - логика, отображение, и инпут - они нихуя не знают друг о друге, и общаются только через ивенты.
Чаще всего в геймдеве юзается индусский код и пластилин.
В теории надо ебашить ECS - но на практике все решения находятся в зачаточном состоянии уже 5 лет. Поэтому все ниасиливают и ебашат как получится, но хоть какой-то принцип разделения аспектов желателен.
>логика, отображение, контроллер
>MVVM
Серьезно? То есть даже посчитать что там три сущности, а не две ты не в состоянии? Это mvc называется.
Разве это взаимозаменяемые вещи?
Господи, еще один оптимизатор. Взгляни на какой-нибудь Evil Genius, где под половину объектов отдельные анимации для рабов, и на одном экране у тебя 30 NPC занимаются чем-то своим. Ничего не лагает.
> Господи, еще один оптимизатор
И не говори. Про стадии разработки бы хоть прочитали. А то поставят на сцену двух болванчиков с тремя анимациями и уже ОПТИМИЗИРУЮТ.
Как он делается? Через партиклы как-то? Или просто искать в магазине префаб готовый?
а нахуй тебе эти паттерны? сколько код ни пишу - так и не увидел смысл классифицировать используемый подход.
>>43264
тебя дураком назвали. спросили как тебе там, дураку который удивляется столь старой хуйне как туман в играх.
>>43267
руки чтоли отсохнут код писать? если ты из этих то лучше в UE иди.
единственное для чего они реально нужны это чтобы сказать другим "моя хуйня работает вот так", или "делай хуйню вот так" более ёмко. на этом их польза заканчивается. но на этой доске они не адекватны реальности. потому что встретить тут проект над которым работает больше одного человека уже редкость, а чтобы эти оба человека ещё и код писали и им требовались такие термины так это вообще что-то невероятное. ну так нахуй паттерны? особенно тут? за пределами чего-то примитивного вроде "синглтон"?
> потому что встретить тут проект над которым работает больше одного человека уже редкость
Над мои проектом вот работает 4 человека. Я кодер, художник, моделлер и композитор.
Так что не такая уж и редкость.
Про туман в играх знал, не знал как его делать. Ибо нюфаг полный
удивительно. но вернемся к теме паттернов. вот ты используешь эти термины при общении с этими артистами? отличают ли они один от другого? часто ли они лезут в код?
Пардон, дружище, я с удовольствием завтра с тобой пообщаюсь, без шуток (а может и сегодня, если раньше вернусь), но надо по работе внезапно отъехать.
>Я кодер, художник, моделлер и композитор.
Человек и пароход. В хозяйстве очень полезный Тебе ещё редактор нужен, наверное.
>Я кодер, художник, моделлер и композитор.
>Речь же была про четыре человека
Я тебе и посоветовал ещё редактора. Чтобы русский язык твой правил.
А, так вас уже пятеро человек в одном теле. Кодер, художник, моделлер и композитор - и ещё "не он".
Пять личностей у него, а шизик я.
конечно. https://unity3d.com/ru/learn/tutorials/s/graphics
вообще твой вопрос изначально не корректный. вопрос не в том как сделать заебись, а в том что ты хочешь получить.
Суть в том, что я вроде начал понимать разные вещи по отдельности, но как все объединяется вместе, для достижения желаемого визуального эффекта - тут не очень понятно. Хотелось бы какие-то примеры в этом духе. "Как сделоть красивую ААА игору", лол.
Меня вот удивляет, что даже платные туториалы в основном заняты всякой залупкой типа как поднять предмет, как лупить мобов. Но ведь все это тривиальные вещи, можно сделать как угодно - не принципиально, если не пилишь убийцу WOW. А вот такие вещи как
а) красивый производительный графон
б) подводные камни, засады, как не надо делать никогда
на удивление редко/мало затрагиваются.
да как бы не так и много вещей делают графон. ебани, посмотри, ебани того что не хватает / убери того что слишком много. графон же не код, в один прекрасный момент тебе не придется снести все к хуям, потому что где-то в начале говна наделал.
>а)б)на удивление редко/мало затрагиваются.
профайлер в помощь, хули. это и не должно затрагиваться.
Наверное, не продается. Все-таки геймплей можно сделать на говне и палках вместо фаерболов и мечей, что и привлекает людей, а графон надо еще кому-то рисовать.
Алсо, не понимаю, почему с многими туторами идет ассет пак, причем подается он как для тупых. Видимо, красивой финальной сценой завлекают.
Наверняка на таких лекциях и туториалах воду льют, в стиле обзора самых последних модных графических технологий, PBR-шэйдеров и процедурных карт.
На деле, для того чтобы сделать красивый ААА-графон нужно просто увеличить в 10 раз время на налаживание пайплайнов и само производство. Притом не только на модельки, но на сэтап и анимацию тоже, ведь не может быть дерганной анимации в ААА.
В основном нужно не средства движка задрачивать, а средства 3д-моделирования. Учишь там Zbrush скульпт, запекание текстур, текстурирование в Substance Painter, ретопологию 3D Coat, риг и анимацию в Maya. Современные пайплайны, короче. Это на деле не так-то сложно, просто в 10 раз больше учить чем для васянского графона.
https://www.youtube.com/channel/UCfTH1D7ajaVzzDERUY4GqHg/videos
Ебать ты долбоёб братишка.
Паттерны используются для достижения гибкости в разработке. Если ты хардкодер ёбаный и у тебя один класс отвечает за несколько задач, то у меня для тебя плохие новости.
Покажи парочку своих классов что ли, а то сложно судить, что у тебя там. Бывают случаи, когда люди и так пишут гибкий код, используя паттерны, только не знают, что они их используют.
мимодругойанон
можешь вон навмеш мой скачать, почитать, хули. >>42827 написан конечно местами так себе, но так что я не испытываю проблем с его доработкой и даже если грохнуть кусок кода у основания то остальной не рассыпется, что я недавно и делал. я его правда никуда на гитхаб не заливал чтобы просто так почитать.
вообще я бы много чего мог показать, конечно. в моем проекте много интересных велосипедов. просто местами там дохуя понаписано и вряд-ли кто-то в своем уме будет это читать.
придумали там паттерны, слова какие-то. я вот самоучка, меня паттернам никто не учил и сам я их не учил. пока пишешь код думая о том как он будет работать в будущем тон будет работать в будущем.
Ну да, с пунктуацией чуток проебался, пардон.
>>43281
>>43282
Паттерны я использую сугубо потому что могу. То есть я ещё с универского курса их помню и как только становится какая-то цель — я сразу понимаю как её лучше реализовать.
Сейчас вот, например, юзаю медиатор, с ним всё намного проще. Но опять же — в именно моём проекте.
Запощу сегодня новую демку. Переделал геймплей со швыряния предметов на швыряние + расстановку мин по путям перемещения девочек.
Моя продуктивность упала в разы по сравнению с TWG. Хз, почему так, нравное пропадает вера в гейминдустрию в возможность поднять в ней бабла по крайней мере.
>>43313
Onsen Rumble на нем практически полностью собран. Не рекомендую. Вкатиться легко, а вот вносить правки в кучу параллельных FSM - сложно. Хуи отследишь, какая из них ответственна за баг. До сих пор разобраться не могу, почему у меня девочки по полу скользят после смерти. Еще не хватает полиморфизма, что заставляет иногда заниматься обезьяньей работой.
А что за тулс у тебя на скриншоте? Впервые такое вижу в Юнити хотя я еще слишком туп, чтобы ковырять какие-то ассеты и инструменты.
А то я смотрю, даже у ебовых на тыщи человекочасов кода и смешной ценой в пределах сотки количество отзывов вообще ниочем - их вообще кто-нибудь покупает?
Тогда странно, что еще DRM не ввели.
Есть панель неопределённого размера с вертикальной лейаут группой и контент фиттером. В панель я динамически добавляю префаб из обжектпула, префабов может быть дохуя и больше.
Мне нужно растянуть префабы по ширине на всю панель, но сохранить свою высоту, и при этом чтобы первый префаб оставался закреплённым в углу, а новые вырастали снизу. У меня же выходит так, что префабы уезжают куда-то за пределы панели, не растягиваются и вообще.
Я только панель пустую запостить могу.
Строки (которые хуёво видны) находятся в контейнере-панельке. Высоту и ширину я сам могу исправить, это не проблема. Проблема в том, что они спавнятся в центре панели, а каждый последующий объект смещает первый объект вверх.
Да, использовать один большой текст будет проще.
> Да, использовать один большой текст будет проще.
да, используй один большой текст. этажи логи. делай как все.
у меня давеча возникала твоя задача, но там был не текст, а кнопки. перепробовал перегуглил всё, пришлось скриптами назначать координаты.
>пришлось скриптами назначать координаты
Ну, я так и понял.
Удивительно сделано. "Пивот" выражает собой центр главной панели, и когда прибавляется какой-то объект, ширина и высота объекта становятся шириной и высотой главной панели. А когда добавляется второй объект, то главная панель расширяется на оба объекта, и после этого смещается в пивот, забирая с собой оба объекта.
А, я сообразил.
Нужно добавить Layout Element скрипт и анально задать минимальные размеры главной панели. Тогда волшебным образом всё центрируется в нужное место.
Я васян-графон как раз и демонстрировал. Только диффузные карты и unlit-шэйдеры, нет реальных теней.
Но при желании мог бы делать ААА потратив в 10 раз больше времени, только вопрос в том, а нахуя? Надо чтобы в игру увлекательно играть было и смотрелось достаточно убедительно для ЦА.
да нет, всё правильно, и не в 100 раз, а в 10, просто этого никогда не добиться используя фототекстуры и качая модельки.
>используя фототекстуры
Так разве ААА не главные пользователи фототекстур? Ну ОК, они еще фотограмметрию юзают и сильно их обрабатывают и процедурные эффекты сверху кидают. В основе реалистичного графона всегда фото.
>качая модельки
Тут уж надо выбирать, или ты геймдевелопер или 3д-моделлер. Вот мне хочется в итоге увлекательную игру получить, а не реалистичную модель резиновой утки.
вообще unet на самом то деле не плох. когда я в него полез то обнаружил что там дают возможность пользоваться сразу несколькими слоями того клея что скрепляет базовый функционал и они плохо между собой совмещаются. и документация местами пиздец.
а так вроде норм.
>>43318
дааа вопрос то не в том что ты чем-то пользуешься. вопрос в ценности самих терминов.
отдельно конечно можно поднять ценность следования паттернам, но тут мне нечего сказать.
>>43320
стало лучше, да. вообще ты на процесс разработки неправильно смотришь. надо делать то что в первую очередь желаешь увидеть сам, тогда это желание и начинает двигать процесс в первую очередь.
я вот когда устаю делать свое говно, то я несколько дней дрочу в игры. и в один прекрасный день я смотрю на них и понимаю что пока я в них дрочу, проект лучше не становится. а так как в нем будет все что я ценю в играх то я понимаю что надо делать, там будет просто заебись! и делаю. недели на 2-3 хватает такой мотивации.
хотя учитывая что ты с PlayMaker страдаешь то у тебя наверно в процессе разработки большая битва с самим собой. может лучше шарпом расскажешь глупой машине что ты от неё хочешь?
>>43337
йеп. покупают. только их почти никто не коментирует и не ставит оценки, даже несмотря на то что юнити предлагает это делать спустя несколько дней после того как скачал. хотя там конечно несколько иной рынок. это все-же рынок инструментов, а не кинца.
>>43386
кстати а чего не ебанешь немного графона? сделал бы хоть водичку получше. в этой игре много водички.
> ААА главные пользователи фототекстур
> сильно их обрабатывают и процедурные эффекты сверху кидают
толще, выше, сильнее!
> Тут уж надо выбирать, или ты геймдевелопер или 3д-моделлер
тут уж надо выбирать, или ты геймдевелопер который может делать игры, или кирюха, таскающий ассеты и мнящий себя игроделом
Либо ты девелопер
Либо ты моделлер
Либо ты левел-дизайнер (тот самый таскатель мышкой)
Пытаться делать все сразу = делать все хуево
либо ты неосилятор который не может уделить время и научиться делать всё хорошо.
всё это говно про "делать все сразу = делать все хуево" только в твоей голове, но ты продолжай оправдываться.
поучился скриптить на двикжках года три, потом ещё пять повазюкал модельки, а левелдизайнить может вообще любой васян который в жизни играл в игры и представляет всё интуитивно. но на дваче сказали что после того как выберешь себе класс, в другой класс даблспеком нельзя.
три года на погромизм и пять на модельки, да? куда лучший результат будет если потратишь 8 лет либо на погромизм, либо на модельки. сможешь хоть что-то делать хорошо. если конечно не планируешь в одиночку тащить проект много лет. как будто в игры не играл, субклассы нужны только ради стартовых скиллов.
>надо делать то что в первую очередь желаешь увидеть сам
Какой идеалистический взгляд на геймдев. У тебя есть законченный и изданный проект своей игры мечты?
Не, я больше вижу геймдев как борьбу с временем, которого всегда не хватает, жизненными обстоятельствами, ленью и контрпродуктивными пайплайнами (вроде моих неудач с Playmaker). Основной движитель в том, что если не выпустить свою игру даже весьма убогую за пару месяцев то все, кончатся деньги и придется завязывать с геймдевом.
> может лучше шарпом расскажешь
Простые проблемы намного быстрее отладить в Playmaker, а не пердолиться с консолью. Нужно умело совмещать, как мне кажется. Вот этот https://www.youtube.com/user/mdotstrange ютубер неплохо умеет разделять код с визуалом.
>>43435
Я не траллю, а правда так думаю. Полностью процедурные текстуру очень трудоемки. Проще в Substance Painter фототекстуру спроецировать и обмазать всякими ржавчинами/царапинами.
>кирюха, таскающий ассеты и мнящий себя игроделом
Голословная предъява. Кто-то там говорил, что я из MMD модельки ворую, однако они даже по пропорциям тела другие, не говоря уже про морфы и текстуры.
То, что мне лень резиновую утку моделлить не считаю чем-то плохим.
>>43467
>>43474
8 лет учебы чтобы опубликовать первую инди-игрушку в стим и получить $1000-$5000 c продаж? Найс.
>8 лет учебы чтобы опубликовать первую инди-игрушку в стим и получить $1000-$5000 c продаж? Найс.
ну не все же ассетоворы. некоторые, например, делают свой контент для игры. дураки какие-то. особо глупые даже пытаются делать его качественно. зачем оно нужно, не понимаю. ведь можно хуяк-хуяк из готовенького.
> В основе реалистичного графона всегда фото.
> Проще в Substance Painter фототекстуру спроецировать и обмазать всякими ржавчинами/царапинами
безусловно, проще. теперь найди на пиках фототекстуры.
Творцы качественного контента имеют чуть больше шанса получить $5000 с игры, чем $1000. Если доведут разработку до конца, разумеется.
А вообще, покажи мне демку своей игры, которая на голову графонистее и оригинальнее моей.
> покажи своё))) ты докажи))))
> не собираюсь тебе ничего показывать
> ты слился))))) значит пиздить надо)))))
ясн
плойка же. диды за каждый полигон ваивали
>Какой идеалистический взгляд на геймдев. У тебя есть законченный и изданный проект своей игры мечты?
ноуп. но я долгое время делал велосипеды на благо моей идеи и проникал в интересующие меня темы (навигация, ИИ, процедурная генерация). недавно наконец настало время устроить autobots assemble моим велосипедам. из-за того что моя идея слабо изменилась за это время и я думал над ней пару лет и у меня есть прототипы/решения основных фич которые я желаю реализовать. сейчас я вижу свой путь весьма прямым.
>Основной движитель в том, что если не выпустить свою игру даже весьма убогую за пару месяцев то все, кончатся деньги и придется завязывать с геймдевом.
хуёво тебе. у меня нет таких рамок с ограничениями и у меня куча свободного времени.
>а не пердолиться с консолью. Нужно умело совмещать, как мне кажется.
я в этом сильно сомневаюсь. нодовые редакторы слишком поверхностные, в нормальном коде больше средств отладки, в том числе визуальной, нет этой мешанины из лапши, половину времени в которой тратишь чтобы её распутать. я немного попользовался в UE, при небольших масштабах они работают просто отлично, но перестают быть адекватным решением при увеличении сложности проекта. очень плохо скейлятся.
кстати да, покажу клевое. когда думал над этим - целый вечер думал. о том как менять скейл карты высот. таких идей интересных придумал, ух!
Как может быть общий альфаканал? Наркоман что ли? Может у них ещё и синий канал общий?
Вот и я не пойму. У меня есть панель с дитём-кнопкой. Меняю только панели цвет на прозрачный - кнопка тоже становится прозрачной. Как добавил ещё одну кнопку, так теперь она цвет с панелью не меняет.
Я сделал так
playerprefs.setint("huy", penis);
playerprefs.save();
Но эту переменную мне нужно использовать в реальном времени. После ее изменения сразу же передать в другой скрипт. Если использовать playerprefs.getint, то смена переменной видна только перезапуска.
Тоесть. Есть два типа пениса, по умолчанию выбран первый тип. Я меняю тип пениса на второй. Выбор сохраняется, но переменная пенистайп изменяется только после перезапуска, что логично. Что делать?
Вопрос снят, присвоил значение переменной в апдейте.
Почему то весь день думал, что так не сработает
Алсо, в Юнити реально делать open-world и подгружать чанки по мере необходимости? К единому NavMesh'у, смотрю, нельзя пришивать куски. Нормально ли держать довольно крупный запеченый NavMesh в памяти или зашквар?
>>42177
>>43653
NavMesh. Внезапно работает в 2D.
>К единому NavMesh'у, смотрю, нельзя пришивать >куски.
https://www.youtube.com/watch?v=n-RXnDGE72M&feature=youtu.be
2д.
У меня есть две точки, А и Б, (два вектора2), мне нужно найти штук 15-20 точек между ними расскиданных равномерно. По какой формуле это делать?
Пиздец, когда же вы научитесь вопросы формулировать?
> штук 15-20
Так 15 или 20?
> мне нужно найти
Что значит найти? С лупой будешь их искать что ли? Может быть не найти, а определить координаты?
поддерживаю
Ты полностью прав.
Просто я на попехах. Извиняюсь. В следующий раз (если он будет) сформулирую вопрос лучше.
Осталось только обновить документацию.
ssaniy ruski yazik
Работать с кастомным EditorWindow также как с игровым окном? Мне просто надо кучу прямоугольников вывести как содержимое массива.
//Serializeable
public struct Rectangle
{
Vector3 ...
}
public class Yoba
{
//SerializeField
List<Rectangle> rects = new List<Rectangle>();
}
квадратные скобки вроде как здесь проебываются, заменил на "/"
Есть 40 точек выстроенных в линию. Из каждой точки мне нужно кастовать рей. Как мне сделать так, чтобы реи кастовались перпендикулярно линии вне зависимости от того в какой позиции и под каким углом находится линия?
Никак не могу разобраться.
Линяя прямая? Точки загнаны в массив? Рейкаст должен светить в одну сторону или в обе? Если в одну, то в какую?
Линия прямая. Точки в аррее. Я не очень понимаю что значит в какую сторону, ну типа это же относительно. Ну допустим влево, если линия А Б перпендикулярна "земле", точкой А вверх.
> Я не очень понимаю что значит в какую сторону
Ну у точки, лежащей на линии есть два варианта луча, который будет перпендикулярен этой самой линии.
Ну я понимаю. Я просто не знаю как описать эту сторону. Попытался описать как мог сообщением выше.
В этом то и суть. Линия привязана к объекту и крутится вокруг него. Как будто объект держит селфи палку и передвигается и крутится с ней. И линия в данном случае айфон на селфи палке, который должен кастовать из себя лучи перпендикулярные себе же в сторону объекта.
1432x700, 0:04
Или так понятнее.
Помогу разобраться с твоей хуйней за 500р, в дальнейшем тоже сможешь обрашаться. Если интересует, оставляй контакты.
Упорядочиваешь все точки на линии, чтобы их rotation был одинаковый. Заранее ручками или в коде (я сделал в коде). И отбрасываешь луч на 90 градусов, но локально, а не глобально. Потом все эти точки прячешь под пустой геймобджект "палка" (хотя скорее всего так оно у тебя и есть) и всё, как ты эту палку не крути, в локальных координатах у точек ничего не изменится и они всегда будут светить куда надо.
Спасибо. Правда, я надеялся без пустых геймобджектов обойтись, но так тоже сойдет. Спасибо.
> я надеялся без пустых геймобджектов обойтись
40 одинаковых точек в корневом уровне иерархии держишь что ли? Зачем, если можно их свернуть под пустой объект?
Что ж вы за любители засирать иерархию? Потом же глаза сломаете.
А что конкретно ты имеешь ввиду?
Типа создать 40 пустых гейомбджектов, приделать к ним рейкаст, и всех эти 40 геймобджектов сделать чайлдами еще одного геймобджекта?
Ну я очень неопытный в этом всем, но мне казалось что всякое такое делать это типа НЕХОРОШО и неаккуратно. Я делаю все такие вещи через уровнения. И все не так сложно, все эти 40 точек и рейкастов определяются лупов из пары строчек.
Пропиертарное говно не нужно.
Это не канон.
> Типа создать 40 пустых гейомбджектов, приделать к ним рейкаст, и всех эти 40 геймобджектов сделать чайлдами еще одного геймобджекта?
Нет. Твои 40 геймобджектов, которые составляют прямую, спрятать под один обджект "прямая". Большего тут не требуется.
Да
Сертификаты по курсам в интернете — это бумажка для вытирания жопы. Она стоит ровно нихуя.
Хочешь бумажку, которую можно приложить к резюме — иди на курсы ИРЛ.
Так в чём будет различия Time.fixedDeltaTime от Time.fixedTime? И ещё вопрос, что использовать в корутинах?
В том кто из твоих родителей будет шлюхой.
> Time.fixedDeltaTime
Время итерации для физики. deltaTime — это время, за которое прошел один кадр. Первое статично, второе зависит от железа, выполняемых процессов, хуе-мое.
> Time.fixedTime
Это вообще сколько времени прошло с начала запуска приложения.
> что использовать в корутинах?
WaitForSeconds(); ? Что тебе еще нужно?
Пиздец, ну у вас и вопросы.
> в чём будет различия Time.fixedDeltaTime от Time.fixedTime?
Если ты в гугле забанен, то открой справку хотя бы.
> что использовать в корутинах?
Как разбанят в гугле — почитай для чего они вообще нужны. Вопрос сразу отпадёт.
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.
А то нужно чтоб навигация была только в определённом месте на плоскости, а запекается вся плоскость.
Можно, конечно, все ненужные места обложить статичными объектами, потом запечь карту и убрать объекты, но это ж шестиколёсный велосипед.
https://docs.unity3d.com/Manual/class-NavMesh-ModifierVolume.html
можно например этим делать то что ты хочешь. но рисовать до сих пор не дают.
О, спасибо. Кажись то что надо.
https://github.com/Unity-Technologies/NavMeshComponents на, качай. официальная хуйня которую по неизвестной причине так и не сунули до сих пор. как и много других интересных вещей.
Нифига не понял как этим говном пользоваться. Может надо просто поспать.
Вот я поставил этот куб на walkable поверхность, ставлю самому кубу что он not walkable, перезапекаю, и нихуя не меняется.
Неожиданно выросла ещё одна проблема. У меня есть вертикальный лейаут, в который я динамически добавляю объекты определённой высоты. Родитель лейаута содержит скроллрект и дитя скроллбар (чтобы прокрутка работала). Всё это работает так-то, но есть одна проблема - в тот самый момент, когда добавляется 9ый элемент, он "съедается" и не показывается вовсе, хотя он существует и является элементом этого вертикального лейаута. Потом я догадался отключить маску и нашёл этот элемент за пределами поля, т.е. лейаут сам по себе съехал на какую-то величину вниз, когда ему пришлось расшириться.
С хуя бы он это сделал и как это исправить?
Уточню. Кому-нибудь еще ключ DevX Upacker'a еще нужен? Почти доломал его.
Прогу ломаешь? Вкидывай сюда, спасибо скажем
Даже если не захочешь делиться, выложи скринов что получилось с какой-нибудь настоящей игры.
Я сохраняю новую модель вместе с костями, кости абсолютно идентичны старой модели. Встраиваю новую модель в старую иерархию, выставляю RootBone ссылку на старую кость.
У меня такое чувство сложилось, что либо я дурак неправильно вопросы задаю, либо здесь в треде никто панельки не ковыряет и с моими проблемами не сталкивается.
Инпутфилдами, значит, все довольны, кнопками все довольно, панелями довольны - что вы там вообще кодите, что вас это говно не смущает совершенно?
у меня искреннее непонимание твоей проблемы. ты сказал "хочу хуйню в которую можно сунуть больше чем оно само", а потом жалуешься на то что элементы интерфейса сьезжают? разве это не то что должно было произойти? ты может схему нарисуешь че ты вообще получить то хочешь?
я лично пишу код базовых механик. чтобы дамаг между персонажами синхронизировался, чтобы был менеджер патрон который бы за ними следил, чтобы ИИ пользоваться инвентарем мог, чтобы командовать можно было. чего с UI то возится когда игры нет?
>"хочу хуйню в которую можно сунуть больше чем оно само"
Вертикальный лейаут динамически увеличивается в размере, если в него вставляется новый элемент. Можешь попробовать в редакторе добавить новый элемент несколько раз. Самое забавное же то, что после одного единственного съезжания лейаут затем нормально расширяется, без прыжков. То бишь так, как надо. Вот мне и непонятно, откуда взялся этот прыжок, если дальше всё норм идёт.
>чего с 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); // смотрим на ближайшую цель
То есть добавилось всего то, что "морда" пушки будет смотреть на ближайший объект. И, нахуй блять, смотрите какая анальная клоунада начинается на втором видео.
Почему так? Я уже все волосы на голове вырвал, я нихуя не понимаю почему это происходит.
Если что, в инспекторе в обоих случаях видно что обе капсулы в массиве, то есть во втором случае он тоже ловит обе.
Уже два часа сижу на ровном месте и просто охуеваю.
Суть проста: есть "пушка", которая с помощью 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); // смотрим на ближайшую цель
То есть добавилось всего то, что "морда" пушки будет смотреть на ближайший объект. И, нахуй блять, смотрите какая анальная клоунада начинается на втором видео.
Почему так? Я уже все волосы на голове вырвал, я нихуя не понимаю почему это происходит.
Если что, в инспекторе в обоих случаях видно что обе капсулы в массиве, то есть во втором случае он тоже ловит обе.
Не могу добавить новый skinned mesh объект к костям своего персонажа.
Не, аватар не трогал, я ведь никак не вмешиваюсь в структуру костей. Кости не добавляю, только сетку.
Не понимаю логики Меканима, ведь в любом 3д-редакторе можно легко сделать привязку к существующему персонажу новых объектов, можно даже перенести веса со старых. А тут уперся в такую элементарную фигню.
Можно, конечно, сохранить fbx с новым персонажем и импортировать его с нуля, а потом копировать на него все коллайдеры, системы частиц и прочее, но это путь какого-то мазахиста.
1432x700, 0:04
Заменил
> transform.LookAt (curTarget.position);
на
> transform.LookAt (new Vector3 (Random.Range (0, 360), Random.Range (0, 360), Random.Range (0, 360)));
чтобы его пидарасило по полной и исключить возможность того, что проблема именно из-за движения "башни".
Результат на видео.
Короче, юнька меня затралила, у меня уже пена изо рта идёт.
>public float distance = 2f; // радиус обнаружения коллайдеров
float minDist = distance; // ближайшее расстояние
А с этим никаких проблем не будет?
> А с этим никаких проблем не будет?
Нет, здесь всё нормально. Сначала задаю минимальным расстоянием максимально возможное, чтобы с ним сравнивать.
На первом и третьем видео с этим всё нормально, как видишь. Проблема начинается только когда прописываешь
> transform.LookAt (curTarget.position);
Суукаааа. Я смотрю на это и ахуеваю. Сам ньюфаг, только вкатился. Уже думаю идти в анриал. Юнити часто таким образом троит?
>>44270
> А ещё у тебя lookat в теории может ссылаться на нуль
Лол, как раз таки если его заставить смотреть на v3.zero, то всё нормально. Как и на любой другой v3, отличный от координаты капсулы.
Там полторы переменные, на что там смотреть?
В любом случае держите. Как видите, расстояние до правой меньше, но светит всё равно в левую
А если позицию curTarget'а перевести в новый вектор и скормить его LookAt'у?
transform.LookAt (new Vector3(23.1f, -0.2f,30.9f));
Это координаты капсулы, как ты видишь в дебаге. И так он светит через жопу.
Ставлю
transform.LookAt (new Vector3(23.1f, 0.2f,30.9f));
То есть по y минуса уже нет. И светит оно как надо.
Так, новый факт.
Если по Y поставить -0.1, а не -0.2 (как в координатах капсулы и есть), то светит как надо. Возвращаю 0.2 - глючит.
Буду шагами перебирать переломное значение.
Итого.
Сама позиция капсулы по Y -0.2
Распознавание перестаёт глючить в диапазоне от -0.3265 до -0.1236. То есть между этими числами — мёртвая зона.
Как и почему это работает — понять не могу. Как это чинить — тоже. Разве что костылями.
1432x700, 0:18
> Фреймов в секунду стабильно?
Вполне.
> От update'а быть не может?
При других высотах капсул работает же.
Вот, смотри на этот цирк.
Будет у меня не пушка, а какая-нибудь вышка, которой не нужно будет вертеть "головой".
Я до сих пор нихуя не понимаю почему это происходит, но одно знаю точно — без LookAt всё работает как надо.
У меня тоже такая непонятная херь есть - рейкастер упорно видит одну особенную кнопку на другом конце экрана, хотя она находится на этом, и её можно нажимать там. Причём эта баженная область начинается ближе к центру и становится шире к краю экрана, т.е. как будто сектор на радаре. Я не знаю, как работают апдейты и рейкасты, но если область такая ровная, то, наверное, во время выполнения рейкаста в апдейте что-то отсекается случайно.
Что-то вроде этого?
http://answers.unity3d.com/questions/1141633/why-does-fixedupdate-work-when-update-doesnt.html
нет, я по прежнему не вижу что ты имеешь в виду. у лэйаут групп есть разве что эта нелепая проблема с тем что в редакторе к первому добавившемуся элементу не применяется лэйаут, но эта проблема только в редакторе.
>>44264
помоему рут бон в редакторе это рид онли, его изменение ничего не делает. вроде если имена костей и иерархия те-же то должно работать, но может настройки импорта какие особенные должны быть. я бы с радостью помог но я никогда особо не пердолился с тем чем ты. разве что один раз все перестало работать после того как переименовал кость.
но кстати да, посмотри ка на всякий случай в старте веса костей.
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);
}
}
>Потому что УИ отражает на себе все базовые механики, и если поочерёдно делать УИ то всё равно над механиками работаешь.
ноуп. не работаешь. у тебя есть свой собственный интерфейс разработчика уже, игровой интерфейс тебе нахуй не нужен чтобы продолжать работать над проектом.
>>44260
для начала обнуляй curTarget в начале цыкла.
вообще нахуй ты рэйкаст делаешь для нахождения ближайшего то?
>>44273
что у тебя там троит, наркоман?
нет, я по прежнему не вижу что ты имеешь в виду. у лэйаут групп есть разве что эта нелепая проблема с тем что в редакторе к первому добавившемуся элементу не применяется лэйаут, но эта проблема только в редакторе.
>>44264
помоему рут бон в редакторе это рид онли, его изменение ничего не делает. вроде если имена костей и иерархия те-же то должно работать, но может настройки импорта какие особенные должны быть. я бы с радостью помог но я никогда особо не пердолился с тем чем ты. разве что один раз все перестало работать после того как переименовал кость.
но кстати да, посмотри ка на всякий случай в старте веса костей.
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);
}
}
>Потому что УИ отражает на себе все базовые механики, и если поочерёдно делать УИ то всё равно над механиками работаешь.
ноуп. не работаешь. у тебя есть свой собственный интерфейс разработчика уже, игровой интерфейс тебе нахуй не нужен чтобы продолжать работать над проектом.
>>44260
для начала обнуляй curTarget в начале цыкла.
вообще нахуй ты рэйкаст делаешь для нахождения ближайшего то?
>>44273
что у тебя там троит, наркоман?
не того процитировал не там. ну в общем и так все понятно.
> для начала обнуляй curTarget в начале цыкла
Обнулял, нихуя.
> нахуй ты рэйкаст делаешь для нахождения ближайшего то?
Потому что мне нужна ближайшая цель, которую видно, а не которая за камнем стоит.
В любом случае, при обновлении до бэтки всё заработало.
у меня не бета, у меня 17.1.0f3. дай посмотреть на сломанное. мне интересно что у тебя там не так было.
>Потому что мне нужна ближайшая цель, которую видно, а не которая за камнем стоит.
а нахуй ты всех то рэйкастишь тогда? отсортируй по квадратной дистанции и потом уже рэйкасть начиная с ближайшего.
> дай посмотреть на сломанное
Код есть, видео тоже. Смотри дальше по треду.
> а нахуй ты всех то рэйкастишь тогда?
Чтобы определить ближайшего видимого же.
> отсортируй по квадратной дистанции и потом уже рэйкасть начиная с ближайшего
Зачем, если и так работает теперь?
>Код есть, видео тоже.
и что, предлагаешь сидеть и делать все примерно как там у тебя? чтобы в итоге увидеть что у меня все работает, а у тебя нет потому что у тебя там коллайдер где-то в который луч утыкался. код прочитал, видео посмотрел, хуй знает что там у тебя.
>Чтобы определить ближайшего видимого же.
смари, я тебя сейчас трюку научу. то что ты делаешь делать будешь часто. можно написать так:
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)) {
//проверка видимости
}
можно ценой генерации мусора немножко сделать твое говно читабельней.
>Зачем, если и так работает теперь?
чтобы знать чё как и почему и узнать что-то новое как всегда.
> коллайдер где-то в который луч утыкался
Без lookat почему-то не утыкался, а с lookat утыкался. Причём при lookat только в районе объекта, при рандомнои направлении всё нормально было.
> я тебя сейчас трюку научу
Благодарю, буду дома — потестю.
дык, может, у тебя там коллайдер ориентированный по направлению обьекта. луч натыкался на небольшое слепое пятно, или ещё чего в этом духе. надо же проверять куда там все это тычется и все значения которые имеешь. хуй же знает что у тебя там в сцене, то что ты там в сцену сунул это как контекст в беседе.
>помоему рут бон в редакторе это рид онли, его изменение ничего не делает.
Печально, если так. Не понимаю, как тогда редактор определяет привязку к костям. Берет skinned mesh, извлекает из него имена костей и ищет те же кости в иерархии?
Не, у меня так не работает и никакие кости не находятся. Вообще нет деформации меша при анимации костей.
За код спасибо, попробую.
> по моему это говорит о том что там что-то не работает, или произошло то что ты не заметил
Возможно. Хотя у меня один раз была одна херня, которая была точно глюком самой юньки. Как раз таки на бэтке, только на старой.
Элемент UI не отображался ни в сцене ни в игре. Контур есть, в инспекторе всё норм, а его не видно. Перезапускаешь юньку - всё нормально. До второго запуска.
Плюнул, окатился до стабильной версии - всё нормально.
Вечером, наверное, опять до стабильной версии откачусь, посмотрю остался ли тот глюк со сферами. Если да - скину, поиграешься, если хочешь.
2ch, получается что все инструменты в набор инструментов уже вложены? Т.е. такие инструменты как шуруповёрт, перфоратор и т.д.
А ты не особо умный я смотрю, движков сотни и все они имеют разную архитектуру. Попробуй переформулировать свой вопрос на мой вопрос.
Ты тупой.
Блядь, вот всегда так, тыкался час, гуглил и как только написал куда-то вопрос - сразу нашел блядь. Через поиск в add component не находило physics, а так он в списке есть, ахуенно.
То есть, я слайдером тяну маску, все заебись, но как мне зациклить блядский спрайт? С текстурами обычно просто ебашил тайлинг и плюсовал оффсет, но со спрайтами такую хуйню не получается провернуть. И что самое стремное - гугол практически молчит. Спасай анон, чувствую себя умственно неполноценным.
Каким способом можно сделать оба одновременно активными? Ебля с осью Z (2д же) приводит к двум результатам: маленький коллайдер над большим и на нём срабатывает OnMouseExit() большого, или маленький коллайдер под большим и соответственно вообще не работает. В идеале нужен первый вариант только без срабатывания OnMouseExit() большого коллайдера.
По сути это меню с выпадающими окнами. Из-за нестандартной планировки (не списком) приходится велосипедить
Пока что изъебнулся с quad-ом, натянув на него текстуру, но это реально говно какое-то, пришлось все дергать по z, разъебывая весь ui.
Надеюсь на знающих анонов.
у текстуры выстави full rect и укажи края в редакторе спрайта. потом в элементе интерфейса с прогресс баром добавь компонент sprite и выбери там tiled, всё
Я видимо чего-то не понимаю, но в спрайт рендере нет tiled, а если ставить в компоненте image, то там нет никаких параметров скейла и оффсета
Один умный на трёх даунов, уже не плохо для двача.
Попробуй использовать различные слои и проверять рейкаст по слоям.
Либо, если тебе достоверно известна форма меню (круг), то ты можешь посчитать отдельно для каждого элемента входит в него курсор мыши или нет.
> Какой оптимальный размер текстур для юнити?
чет ты da. у каждой модельки свой размер текстур, и зависит он от пространства и времени, занимаемым моделькой на екране в процессе игры.
> Какой формат лучше подходит?
максимум da. любой формат. юнети всё переконвертит за тебя, исходники из папочки ассетс в релиз не попадают
> Какой оптимальный размер текстур для юнити?
Какой нужен. Хочешь чтоб было оптимально - ебошь размеры в степени двойки. Остальное похуй. Хотя и это по большому счёту похуй
Ты ведь книгу из шапки даже не открывал, да, ленивый уёбок?
А что, надо было?
Спасибо. Во сне пришла мысль - вообще не делать пересекающиеся коллайдеры. Так и сделал.
Ну у меня комплексов много, чтобы так сделать. Мне бы знаешь, вот всё продумать, везде почитать, посмотреть там видосы, а так просто я не могу, ну стесняюсь шоле хз.
Спасибо. Нет, не открывал. Даже не видел. Выходит правильно делал, что пнг использовал. А то что он и псд съест, для меня приятная новость.
Я о том, что если я сделаю размер, например 16000х16000, все будет нормально? Или лучше не делать подобных вещей?
Да то что я ленивый это правда. А то что уебок, ну так это же двач, ты ещё относительно ничего обидного не сказал. Да и вообще по жизни стараюсь не обижаться на субъективное мнение других. Вот видишь, я тебя в ответ не обосрал, а поблагодарил за ответ, тебе и стыдно стало) ты меня лично не знаешь так что уебок я или нет, знать не можешь
Хорошо. Я наверное не правильно выразился, так что лучше узнаю путем тыка. Спасибо) Про кратность двойки знаю, я имел в виду очень большой вес такой текстуры...
Максимальный размер текстуры в юнити ограничен 8192х8192, формат не имеет значения так как при импорте картинка конвертируется.
Как в юнити повернуть отдельный компонент?
Мне конкретно надо повернуть NavMeshAgent по оси X на 90 градусов и по оси Z на 90, не поворачивая при этом 2D спрайт, вот.
Назначь их в редакторе и не будут теряться. Они у тебя инициализируются при запуске, все что произошло после запуска в редакторе не сохраняется.
Чего у тебя теряется, наркоман, ты в Awake ссылки получаешь при запуске скрипта. Можешь их private сделать чтобы в диспетчере не маячили.
>Это не объясняет почему они терялись
Ты искал по тегу. Тег меняется там где на MainButton в выпадающем меню выбрано untagged. Если такого тега нет то функция возвращает null, то бишь обнуляет твою переменную. Искать по названию объекта надо через GameObject.Find("...")
Естественно все теги я развесил. Искал по тегу потому, что GameObject.Find("...") тяжелее.
Скорее всего дело было в том, что нельзя получить ссылку на объект если он .SetActive(false).
Бля, надо будет монодевелоп тоже в тёмный перекрасить. А то бывает глаза болят.
>> windows 8.1
>> Substance painter
>> Substance designer
>> Notepad ++
>> Unity 3d
>> aimp
>> Tor (vidalia bridge)
>> Photoshop CC 2014 (так как 15cc ну устанавливается)
>> 3ds max 2012
>> google browser
- Эталонный говноед. Иди выпелись сука ебучая, пидр блять, сука блять, ёбаана блять.
В автокаде рисовал, экспортнул в 3ds
>>>>44770
Надо же как тебе повезло.
Нормальное разрешение сейчас 1024x1024/2048x2048
Если ты делаешь дом атласом, то ты - долбаёб.
>> Какой формат лучше подходит?
>> Юзаю png
Юзай дальше, тут нет что - то плохого.
Сам его юзаю.
Окна - отдельно.
Кирпичи - отдельно.
Двери - отдельно.
Если у тебя к примеру 4 двери - делай их атлосам.
Окна около 4 штук - тоже атлас.
Пример:
Вот чёрт!
Знаю, я -мудак :(
_rigidbody.MovePosition(_rigidbody.position + _movement * Time.deltaTime);
Почему MovePosition игнорирует задание направления мышью. Как задать направление?
Скажи честно, вы все из одной пробирки? Или вы все ходили на один и тот же курс по хуёвой постановке вопроса?
Где, блять, в твоём коде хоть намёк на направление мыши? Знаешь ли, хрустальный шар давно уже сломался от таких вопросов, так что давай конкретизируй.
В общем есть скрипт - моуселук, в котором берется трансформ капсулы и присваивается ротейшон.
Есть второй скрипт - мувмент, привязанный к капсуле. В котором:
_movement.Set(Horizontal, 0, Vertical);
transform.Translate(_movement);
Так все работает, как надо. Но если вмесно transform.Translate использовать rigidbody.MovePosition, то направление уже не задается. И вопрос в том, как задать направление для rigidbody.
И да, если ты собираешься делать здания более детализированным, то делай отдельными частями.
Ну там... Рама от окон - отдельно. Забор - отдельно.
Старайся что бы в одном mesh -е было не больше 15.000 Tris (Треугольников)
И названия материалов тоже давай правильное.
Кстати, если ты собираешься делать для UE (Unerial Egine) то коллизию тоже сделай. Всё вместе экспортни.
Пример:
Вау, это реально красиво. Про текстуры понял, буду пробовать. Пока что я только осваиваю юнити, она коллайдер ставит. На анреал позже может перейду, посмотрим
Сап, а в unity можно где-то найти исходный код NavMeshAgent?
Ах да. Пробуй ещё текстурировать/рисовать текстуры в substance painter/designer
Сейчас все перешли на pbr material.
Но ты должен не плохую развертку тогда мастерить. Без mix вообщем.
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).
Хелп ми.
Я не шарю, можешь разъяснить, пожалуйста? Я думал, все эти скрипты в опен доступе.
>float y = Input.GetAxis ("Jump");
>float yP = y;
>float yPos = yP;
>float yPosition = yPos;
>float yObjectPosition = yPosition;
transform.position не является функцией. Читай документацию внимательно https://docs.unity3d.com/ScriptReference/Transform.html
>transform.position не является
>Нужно transform.position
Не нужно setpositionandrotation, только кватернион вручную не пытайся задавать
Вбей в поиске в монодевелопе.
Я обосрался. Не обращай внимания.
Надо поставить перед игроком выбор уровня. Допустим, ему показывают три варианта 1 - простой сложности, 2- средней, 3- сложной. У каждого уровня будет определенное количество врагов, свой террэйн, допустим еще каке-то свойства.
Как я вижу: делаем класс УРОВЕНЬ в нём в конструкторе задаем метод Генерируй( сложность ){генерирует количество/вид монстров, в зависимости от _коэффициентов}. От класса УРОВЕНЬ наследуем классы террэйнов (прим. пустыня, тайга, казематы Путина), в наследниках переназначаем коэффициенты.
Игрок видит варианты, делает выбор, играет.
Все правильно делаю, или можно как-то проще и я зря тут фигню с классами и наследованием развёл?
ой, нет , фигню написал. Мне же надо зарандомить террэйн, и его нельзя рандомить в конструкторе базового класса.
Значит метод Генерируй() будет в менеджере, и он будет возвращать объект класса УРОВЕНЬ, который внутри медота будет рандомить террэйн, вызывать конструктор(), который в свою очередь будет определять количество мобов и прочие свойства.
Короче, двощ, я сдулал уже крутой инвентарь, отчасти благодаря тебе, помоги и с этим.
алсо, есть телеграм канал местный по юнити?
Простые кривые сложности для левелов мобов/героя.
Реализация дроп рейта предметов.
Алсо, поделюсь винами: http://aushestov.ru/шрайбер/
https://youtu.be/ZW6RCKVnqT4
> Реализация дроп рейта предметов
В класс Item добавь поле dropRate и рандомь число от 0 до 100. Чем ниже этот самый рейт, тем меньше шансов что он выпадет.
Во всяком случае я так делал, проблем не было.
это понятно
Вопрос как лучше сделать:
-- В базе айтемов на каждый айтем указать вероятность выпадания на определенном террейне.
--- или в каждом террейне создать свою базу выпадающих айтемов со своими рейтами. Ну как словарь, например.
Короче, не хочу изобретать велосипеды, и так реализуя механику боя уже наковырялся в своих гениальных костылях, пришлось все переписывать в ноль.
Хочется пример, где есть реализация дропа в зависимости от чего-то.
Вот еще идея:
я для террэйна создаю массив айтемов[100], который заполняю :
Редкий_предмет вероятность_выпадения редкого_предмета
Другой_предмет вероятность выпадения
остальное заполняю обычными предметами.
потом беру случайный индекс массива и таким образом монтекарлю себе рандомный айтем из текущего террэйна. Взлетит?
Ты ведь понимаешь, что это совершенно не принципиально?
В варкрафт 3 ковырялся? Вот так и делай.
private IEnumerator CheckMatch() {
if (_firstRevealed.id == _secondRevealed.id) {
_score++;
Debug.Log ("Score: " + _score);
} else {
yield return new WaitForSeconds (.5f);
_firstRevealed.Unreveal ();
_secondRevealed.Unreveal ();
}
_firstRevealed == null;
_secondRevealed == null;
}
Юнити ругается :
only assignment call increment decrement and new object
в конце функции. Может подскажете в чем дело?
>Ты ведь понимаешь, что это совершенно не принципиально?
не понимаю. Просто уверен придется что-то менять и добавлять, поэтому охота посмотреть на эталонный велосипед и реализовать "как положено".
Во-первых: не придется переписывать.
Во-вторых: минимум ошибок.
В-третьих: приучу себя к грамотным реализациям дефолтных задач.
>В варкрафт 3 ковырялся
а он опенсорс теперь чтоли?
Пока нагуглил паттерн фабричный метод. Вроде оно.
это не решение, если что. Зато поможет не отпугнуть тех, кто знает ответ.
сучка, заставил нуба гуглить.
Нет, (насколько я понял), я как раз стараюсь отвязаться от мэни-ту-мэни.
Ты от него не можешь "отвязаться", это блять определение твоей ситуации.
Если ты имеешь в виду, что ты боишься промежуточной таблицы - любая нормальная орм будет следить за связями в бд за тебя, так что не ссы (но только не поленись сразу разделить методы, которым нужно о конкретной орм знать, и собственно логику).
Антош, потрать на меня еще немного времени.
Я правильно понимаю, что м2м это когда айтем знает на каком террэйне у него какой дропрейт и каждый террэйн знает, какой дроп рейт у него для каждого предмета?
Мне всегда это знать не надо, связь в обе стороны тоже не нужна. Достаточно один раз узнать это при генерации. Напимер при генерации террэйна, посмотреть в поле этого террэйна с масиивом айтемов и дропнуть что-то оттуда, или пробежаться один раз по внешней базе всех айтемов и дропнуть оттуда все с ненулевым дропрейтом.
Выше я уже декларировал свой инсайт, что скажешь, покатит?
>(я для террэйна создаю массив айтемов[100], который заполняю :
Редкий_предмет вероятность_выпадения редкого_предмета
Другой_предмет вероятность выпадения
остальное заполняю обычными предметами.
потом беру случайный индекс массива и таким образом монтекарлю себе рандомный айтем из текущего террэйна. Взлетит?)
как вариант, если мне надо будет добавить дополнительный предмет в список дропа, я добавлю его в этот массив с его вероятностью, но чтобы не оверспавнить крутые предметы, перед этим увеличу количество элементов в массиве.
Сорри за потоки сознания.
как бы всё это целиком зависит от того как ты структурируешь свой генератор. если хочешь захардкодить всю генерациию, то ебись с наследованием. я так делал, но после пятнадцатой закрывающей скобки я решил что нахуй и в пизду.
>>45216
_firstRevealed == null;
_secondRevealed == null;
оператор == проводит сравнение.
Мне нужно сообразить, как лучше всего сделать парсинг данных из внешнего текстовика. Пока что у меня сделано это через сплит с разделителем по \n и затем с разделителем по ;, но это получается синтаксис текстовика очень требовательный. Да и метод для работы с этими текстовиками очень не-общий.
Как нормальные люди такое делают? Пока что склоняюсь к созданию общего метода, который смотрит на заданный разделитель и ищет заданное количество элементов (которые выдаст наружу), если не находит их столько, то дополняет нулями. Но допустим, что есть 4 элемента, как определить, что пропущен 3ий, а не последний? Нужен специальный синтаксис опять.
Я даже хз, что тебе сказать. Есть куча бд любых видов, которые специально для этого предназначены, и имеют хуилион человекочасов вложенных в них - нет блять хочу изобретать велосипед. Ты бы еще предложил хранить в джипегах фотки узелковой вязи и тренировать нейросеть распознавать их.
>качай ассет качай ещё один ассет и ещё раз
Вот так всегда. Либо говорят что-то очень охуенное, либо говорят качать ассеты. Что с вами не так? Совсем опрофессионалились? Чернь кругом видите?
>>45191
вот этот ньюфаг с рандомными террэйнами и уровнями сложности на связи.
Сделал. Нормально?
Главный вопрос, я же смогу в будущем безе проблем работать методом родителя класса (который не переопределяется) с полями наследников класса?
https://pastebin.com/gd5efWP1
<iframe src="https://pastebin.com/embed_iframe/gd5efWP1" style="border:none;width:100%"></iframe>
поясните ньюфагу как вставлять нормальный отформатированный код?
это года три назад было, я так навскидку и не помню. вроде пытался в одну итерацию по главной маске сгенерировать шумы. в итоге на каждой развилке приходилось открывать новые скобки. получилась ебанистическая функция на 700 строчек. но зато лол, генерировала карту только через код. но было абсолютно нечитабельно.
>>45302
может просто воспользуешся XML сериализацией? оно читабельно и уже делает все за тебя.
>>45323
сначала генерацию ебани, потом эти вопросы сами найдут ответ.
>генерировала карту только через код. но было абсолютно нечитабельно
Играл в Зевса-Посейдона? Там была охуенная система генерации зданий-монументов. Банально был текстовик, в котором указывался начальный "камень", а затем параметрами материалы и т.п. и ещё направление, в котором поставится следующий камень. Если направления нет, то считается, что камень последний. Такая охуительная задумка - просто делаешь два метода, один читает, другой создаёт новый камень в нужном месте с нужными параметрами. Нужен рандом? Делаешь третий метод с генерацией параметров по какому-то алгоритму.
Это я так, к слову. Поделиться увиденным хотелось.
>может просто воспользуешся XML сериализацией?
Спасибо, почитаю, как это работает.
Ещё вспомнился метод парадоксодрочилен - берётся таблица csv, и из неё всё нужное выдирается.
> а как можно воспользоваться навмешем без навмешагента?
Примерно так же, как водить грузовик без грузовика.
Бля, а хуле у них так всё неудобно? Этому агенту даже сторону, в которую он будет идти нельзя назначить, да и вообще он пиздец какой-то неудобный.
ноуп. не играл. в актуальное время не слышал про неё.
методов генерации то можно придумать много, но как правило более интересная задача как структурировать это месиво. можно на коленке сделать красивую мешанину, но когда задумаешься "как сделать из этого уровень? где тут должны быть места интереса?" вот тут то и начинается генерация.
>>45340
на самом деле раньше был метод чтобы получить меш навмеша. но ты хочешь хуй знает что. что получить то хочешь?
Ну я хочу, чтобы мой енеми искал путь до игрока по навмешу. У меня проблемы с поворотом, просто. Игра 2D и с навмешагентом, мои боты колбасятся, пытаются идти по неиспользуемой оси и т.д.
ты ещё что-ли один из тех кто не смог повернуть навмеш из плоскости XZ в плоскость XY?
>"как сделать из этого уровень? где тут должны быть места интереса?"
В случае с Зевсом всё просто: сложно предоставить в 2д-текстовике возможность моделировать 3д, поэтому вместо того, чтобы каждому камню просто задавать 3 координаты, сделали задачу координат относительно предыдущего камня. К тому же в самой игре здание не сразу ставилось, а его нужно было строить, и строители по заданной последовательности его возводили.
>"как сделать из этого уровень? где тут должны быть места интереса?"
Имхо, лучше всего заранее сделать определённое число кусков ландшафта, которые друг к другу прилепляешь. Какой бы рандом охуенный не был, он всё равно надоест, а так можно совместить рандом с ручной работой.
> Ну я хочу, чтобы мой енеми искал путь до игрока по навмешу
agent.destination = player.transform.position
Не пойму с каким там поворотом у тебя проблема. Angular speed повысь, если агент поворачивает как полено.
>Имхо, лучше всего заранее сделать определённое число кусков ландшафта, которые друг к другу прилепляешь.
А чалленджи, паззлы или что там для уровня задавать именно через куски ландшафта. Вот, например, есть игра на ПС2 Makai Kingdom, или ещё забавнее, на ПСП Valkyria Chronicles 3: там есть ограниченное количество кусков ландшафта, они присоединяются друг к другу от балды, но в каждом из кусков свой чаллендж есть, не зависящий от всего уровня, а входы и выходы в кусках расположены таким образом, чтобы общий чаллендж уровня воплотить.
Кстати, если есть, готовое решение по этому вопросу, то может еще можно нормально сам навмеш делать? А то я, для того, чтобы сделать навмеш добавляю кучу кубов, т.к. из 2д коллайдеров он не делает непроходимый путь.
> то может еще можно нормально сам навмеш делать? А то я, для того, чтобы сделать навмеш добавляю кучу кубов
https://github.com/Unity-Technologies/NavMeshComponents
> Да, а как это сделать?
Полторы секунды в гугле.
https://github.com/Unity-Technologies/NavMeshComponents/issues/31
куча вариантов, большая тема. можно просто делить карту на связанные зоны, можно соединять карту из заготовок в гриде, можно написать нейросеть чтобы она тебе из мешанины уровни генерировала "вот тут на камне отличное место для вышки потому что рядом ещё камень" и прочее-прочее. очень уж сильно сами варианты зависят от контекста.
>>45360
я не настолько консолота чтобы знать такие примеры. но про Valkyria Chronicles ты что-то страшное рассказал, первая часть была замечательной, а теперь похоже ничего не осталось от положительных качеств.
>>45358
ссылку тебе только что дали. несколько раз, лол. скачай, посмотри, там есть экзампл где ось навмеша крутят. покрути ось.
и в следующий раз ставь вопрос правильно "я хочу так. как получить?".
Я дико извиняюсь за свой долбоебизм, но где тут крутить ось?
И самое главное: Я хочу, чтобы навмеш строился по 2D коллайдерам, как сделать?
Господа, я ничего не понимаю в серверном программировании и поэтому спрашиваю тут. Подойдет ли Photon PUN для несложной ммо с онлайном максимум 1000?
Единственные, кто обещают сделать заебись из коробки - спатиалос, но какие там подводные - не знаю, и сам давно жду хоть каких-нибудь постмортемов. Есть еще всякие подозрительные серваки в сторе и на гитхабе, но это совсем кот в мешке.
Свой сервер, если тебе не нужна авторитарная физика, можешь хуярить на чем угодно, хоть на плюсах хоть на пхп.
Почитать как сделать заебись нигде нет, только копать известные эмуляторы и те же подозрительные поделки.
Короче я почти все реализовал.
Есть генерация трех уровней разной сложности на выбор, каждый с рандомным террейном и своим рандомным набором мобов. Лист мобов для каждой локации публичный, я натаскивал туда префабы через инспектор, в ходе генерации их оттуда случайно вытаскивают.
Но с выпадающим за прохождение локации шмотом так не сделать. Запарюсь перетаскивать.
Как сделать проще? В идеале мне надо к каждому классу локации прифигачить словарь с (шмот, вероятность выпадания). Сама база шмота у меня в json.
Как лучше сделать? Запилить для каждой локации еще json файлик? Или быстрее все-таки в инспекторе натаскать?
Словари сериализуются вообще, если будут (ГО, инт) или (стринг, инт)??
Хочу быстрое наполнение руками.
Снова я
Запилил жонглирование текстассетами и текстовиками, с этим, как и думал, проблем нет. Но вот начал читать про xml и csv и прихуел чутка.
Мне нужна таблица, которую может редактировать сам игрок, то есть она должна быть достаточно простой, чтобы в ней можно было просто менять значения в полях, и при этом позволять вводить новые строчки со стандартными полями.
CSV как работать будет мне понятно, есть пример парадоксодрочилен, а вот XML тёмный лес какой-то. Как оно будет выглядеть вообще? Есть какой-нибудь пример подобной таблицы? Методы для работы с ней тоже бы желательны
Или вот захочу папку с картами, где каждый xml будет отдельной картой с последовательностью шагов постройки, как в монументах-зданиях в Зевсе-Посейдоне. Как это будет на xml выглядеть?
И ещё кое-что.
При загрузке я заношу в один большой словарь все-все-все тексты из текстассетов и внешних текстовиков. Собственно, а не охуел ли я, и не трачу память впустую?
Может, можно как-то заблокировать изменение внешних текстовиков во время выполнения программы? Чтобы никто не мог в них что-либо изменить.
>таблица, которую может редактировать сам игрок, то есть она должна быть достаточно простой
XML не слишком для этого подходит. Почему не сделать текстовый конфиг? Я диванный, но скорее всего юнити умеет с чем-то подобным работать.
<objects>
<item id="1">
<param1>Значение</param>
<param2>Значение</param>
</item>
<item id="2">
<param1>Еще значение</param>
<param2>Другое Значение</param>
</item>
</objects>
XML это не таблица, то есть не двухмерная матрица, в нем доступна большая вложенность и редактировать неподготовленному человеку может быть сложновато.
В примере, что я привел значения заключены между тегами параметров, которые в свою очередь вложены в объекты у каждого из которых есть уникальный атрибут-идентификатор.
Это как бы тебе ликбез краткий.
Так что думаю лучше смотреть в сторону текстовых конфигов.
Что-то вроде:
Fog = On
Difficulty = Hard
StartLife = 14
>таблица, которую может редактировать сам игрок, то есть она должна быть достаточно простой
XML не слишком для этого подходит. Почему не сделать текстовый конфиг? Я диванный, но скорее всего юнити умеет с чем-то подобным работать.
<objects>
<item id="1">
<param1>Значение</param>
<param2>Значение</param>
</item>
<item id="2">
<param1>Еще значение</param>
<param2>Другое Значение</param>
</item>
</objects>
XML это не таблица, то есть не двухмерная матрица, в нем доступна большая вложенность и редактировать неподготовленному человеку может быть сложновато.
В примере, что я привел значения заключены между тегами параметров, которые в свою очередь вложены в объекты у каждого из которых есть уникальный атрибут-идентификатор.
Это как бы тебе ликбез краткий.
Так что думаю лучше смотреть в сторону текстовых конфигов.
Что-то вроде:
Fog = On
Difficulty = Hard
StartLife = 14
Если ты скажешь зачем тебе это нужно и чего ты хочешь добиться, то проще будет подсказать решение.
Спасибо примерно так я это и понял
>>45733
>Если ты скажешь зачем тебе это нужно и чего ты хочешь добиться, то проще будет подсказать решение.
Моддабельность для игры хочу. Ну, и чтобы можно было ручками без вхождения в юнити фиксить разную ерунду вроде баланса.
Тут вопрос в том, сколько памяти будет жрать загрузка всех текстовиков в условленной папке внутри папки с игрой. Вон, парадоксоигры грузятся довольно долго, потому что они все текстовики (в форматах txt для скриптов и csv для локализаций) грузят до запуска игры и, похоже, постоянно их держат в памяти. Объём всего текста там несколько мегов, но больше 20, хотя я не считал. Вроде бы звучит не страшно, но я не профи же Из-за того, что всё заранее загружается в игру, можно во время самой игры текстовики менять, как только вздумается.
Есть альтернативный вариант - подгружать данные из текстовиков только по запросу, но тогда эти текстовики нужно либо как-то безопасно обустроить, либо заблокировать их изменение во время работы программы. Блокировка звучит гораздо лучше.
Я не совсем понимаю все-таки в чем твоя проблема. Почему так важно, чтобы текст нельзя было изменить во время игры? Кто вообще станет таким заниматься в теории?
По поводу загрузки в память ты обсчитался имхо. Средний роман на 300 страниц весит 1,2мб в fb2 и это с обложкой в base64. Значит на деле будет 600кб. У тебя будет в игре текста на целый роман?
[
{
"id": 0,
"title": "Steel Gloves",
"value": 6,
"stats": {
"power": 1,
"defence": 4,
"vitality": 2
},
"description": "Gloves made from steel",
"stackable": false,
"rarity": 2,
"slug": "steel_gloves"
},
{
"id": 1,
"title": "The Great Stick",
"value": 543,
"stats": {
"power": 56,
"defence": 2,
"vitality": 45
},
"description": "It's a stick that's pretty great.",
"stackable": true,
"rarity": 2,
"slug": "the_great_stick"
}
json не пойдет?
довольно читабельный даже для юзера, есть редакторы, где еще проще.
[
{
"id": 0,
"title": "Steel Gloves",
"value": 6,
"stats": {
"power": 1,
"defence": 4,
"vitality": 2
},
"description": "Gloves made from steel",
"stackable": false,
"rarity": 2,
"slug": "steel_gloves"
},
{
"id": 1,
"title": "The Great Stick",
"value": 543,
"stats": {
"power": 56,
"defence": 2,
"vitality": 45
},
"description": "It's a stick that's pretty great.",
"stackable": true,
"rarity": 2,
"slug": "the_great_stick"
}
json не пойдет?
довольно читабельный даже для юзера, есть редакторы, где еще проще.
>Кто вообще станет таким заниматься в теории?
Кто-нибудь да будет. А от такого воздействия будут серьёзные ошибки.
>По поводу загрузки в память ты обсчитался имхо
Может быть. Я ж не специалист. Везде пишут экономить на foreach, меняя их на for везде, где можно, а проку от этого крупицы. Что же тогда делать с 600 килобайтами мёртвого груза, которые нужны очень-очень редко?
>>45746
>>45747
По сути, это та же таблица, только визуальное представление другое. Как и xml. Надо обмозговать это всё
Как уже заметили, проще для дата-классов использовать ScriptableObject. Урок от Unity как им пользоваться как раз для таких задач.
Вообще, в больших проектах дизайнерам проще работать с Excel'ем. Забивать туда сотни и тысячи item'ов, высчитывать по странным формулам цену, графики рисовать и прочее. Потом всё это экспортится в xml или json. Хотя можно прямо из xls читать. Некоторые вообще по сети из google spreadsheet конфиги тянут.
https://youtu.be/PjvMrJDiH-U
Дрочую этого, сам впендюривал в проект на аутсорсе поддержку гуглтаблиц со кучей стат айтемов, которые через жусон в скриптабл обджекты запихивал.
Ну и собственно статы подгружались каждый запуск, пока ребалансили.
Парни, можно ли проверить есть ли объект с тэгом на пути луча?
У меня идёт луч от эмени к игроку и проверяет, касается ли луч тэга "wall". Я решил сделать стекло в игре, через которое враг может игрока увидеть, но не может пройти соответственно. Так вот прикол в том, что если стоит враг, потом стекло, потом стена, за которой игрок, то враг сагрится и побежит искать игрока.
Ещё один магистр по формулировке вопросов.
> можно ли проверить есть ли объект с тэгом на пути луча?
Можно.
Я не знаю как ты там делал, но ты явно велосипедишь. Вынеси стекло в отдельный слой, который будет игнорироваться рейкастом, и свети себе в сторону игрока. Упрётся луч в стену и никуда твой моб не побежит.
ти забыл что ти в юнете-треде
>Когда у тебя будет билд уже готовый и ты поймешь, что памяти действительно не хватает,
Тогда будет слишком поздно. Вон, соседний тред глянь: >>411195
Эта игра выдаёт 30 фпс максимум. ЭТА ИГРА ВЫДАЁТ 30 ФПС МАКСИМУМ
У меня от этого Яндере-дев только он ещё 8 часов на разбор почты тратит Он ещё жаловался, что на проверку каждого нового изменения в игре ему надо по 10 минут новый билд компилировать.
Нужно сразу по уму делать (насколько ум тебе позволяет), а не то будешь сидеть баготестить каждую переменную по полчаса
>>45755
>>45760
В общем, послушаюсь вас. С одной стороны буду хранить не словари с книжного объёма стрингами, а пути к текстовикам внешним и/или название текстассета, с другой стороны буду иметь словарь с преобразованными стрингами, чтобы много раз одну и ту же стрингу не преобразовывать, который к тому же буду периодически подчищать. Благо, после моей ёбли с поисковиком путей у меня охуенный PriorityQueue скодился, можно по тому же принципу сделать подчищалку
> Тогда будет слишком поздно
Не совсем понял что именно будет "поздно". Оптимизация — это последний этап игропроизводства. Шлифовка, так сказать.
Очень многие так нихера и не выпустили, потому что не игру делали, а рисовали три сосны и потом ебали себе мозг как бы их оптимизировать.
А потому что и показывать нечего.
Ошибка выжившего, знаешь ли. Те игры, что выходят, это результат очень маленького процента тех, кто садился за разработку.
По-моему еще в этом треде кто-то спрашивал про оптимизацию анимаций. Нахуя — непонятно. До нас и так оптимизировали что могли.
>Тогда будет слишком поздно.
что за чуш. этап разработки надо делать как можно быстрей, а не оптимизировать. за время разработки свое говно по пять раз перепишешь, прежде чем продвинешься. одно дело поменять имплементацию какого-то метода, другое дело когда придется сносить весьма приличный кусок кода, просто потому что он устарел.
>в отдельный слой, который будет игнорироваться рейкастом
Вот. Про слои я знаю, а как сделать, чтобы слой игнорировался рейкастом? И можно ли проверять только один слой?
в функцию с рэйкастом лэермаск же можно сунуть. угадай что он делает.
Не, я нуб.
1)Пилить здание стоит одним мешем или каждую комнату отдельно + отдельно внешние стены?
2)Как пилить коллизию? Меш колайдера достаточно или нужно самому растягивать боксы? Есть ли возможность запилить коллизию в максе/блендере?
1 советую пилить отдельно, меньше мороки. особенно если Occlusion Culling ебанешь
2 если дом статичный то хули, ебани меш коллайдер
Я просто покупал плагин бачей за 15 или 20, спредшит 2 что-то там. Можешь просто его спиздить, там скрипт под гугловский апи, который заливается на драйв, и который под себя несложно адаптировать, и несколько скриптов с примерами для самой юнити.
Пробовал if (Input.GetKey(KeyCode.Escape)), не работает
http://answers.unity3d.com/questions/25535/android-back-button-event.html
А здесь говорят, что работает.
Ты в апдейте нажатие проверяешь или где? Точно код до места, где проверяется инпут.геткий, доходит?
Тестил через Remote Unity, надо будет скомпилировать и посмотреть, мэйби Remote врет
> Тестил через Remote Unity
У него вообще очень странное поведение. Например, мой персонаж бегает по клику ПКМ, но через Remote ПКМ вполне себе заменяется тапом двумя пальцами. Хотя я коде я ввод под ведро вообще не писал.
>> Хочу в юнитях запилить небольшой двухэтажный дом внутрь которого можно зайти. И тут два вопроса.
Экстерьер - отдельно.
Интерьер - отдельно.
Можно одним mesh-ем, но следи за треугольниками. Делай до 15/20 тысяч треугольников.
> 2)Как пилить коллизию?
Можешь в самом 3d пакете делать коллизию. Но сетка должна быть упрощена (У вазы или люстры, к примеру)
> Меш колайдера достаточно или нужно самому растягивать боксы?
Достаточно mesh collider
> Есть ли возможность запилить коллизию в максе/блендере?
- Да.
Но вот я лично хз на счет unity. Я всегда ставлю mesh collider.
В UE можно и mesh использовать в качестве коллизий.
>Адепты оптимизации говорят
>> 445896
> 2)Как пилить коллизию?
> Можешь в самом 3d пакете делать коллизию. Но сетка должна быть упрощена (У вазы или люстры, к примеру)
Читай мудень.
Оптимизация это да, но этот геморрой стоит того только тогда когда очень много полигонов или большая сцена
>But I Would Not propose to use Python...ответ на буржуйском юнити форуме Хочу попробовать в гейдев, но впадлу учить новые языки, знаю Python/C++
> Почему рекомендуют С# и JS, если можно и python
Ну ебашь на питоне, в чём проблема? Тебе наше благословение нужно?
>а на юнити можно запилить около опенворлд или просто большие локации полноценные
Даже если нельзя, можно из темноты спавнить новые места, деспавня из мест, откуда вышел, старые
А есть мануалы на эту тему, типа как в клевых играх - дальний фон грубо-говоря в скайбокс улетает и прогружается по мере приближения, а тот что прошел - упиздошивается в скайбокс (если я правильно понимаю как работает скайбокс, надеюсь ты поймешь).
> вы тут выше думаете над оптимизацией одного блядского дома
Это свежий оптимизатор подошел, сейчас хотя бы вопросы более-менее адекватные.
> запилить около опенворлд
Смотри выше NavMesh Surface. Десять из десяти, самое то для опенворлда, потому что подгружать нормальный мир вместо LOD не звучит как что-то проблематичное, а вот болванчиков бегать между чанками хуй знает как еще заставить.
Для примера пиздатых больших локаций можешь посмотреть какой-нибудь Tyranny (хотя там по-моему приемущественно 2D). Также на канале Unity на YouTube можешь глянуть на йобу из Unity 2017.
> При этом будет ещё какая-никакая боевочка ну все как всегда.
Пока пытался сделать хоть какое-то подобие РПГ системы, к Юнити не притрагивался вообще. Прицепить это к движку вообще не сложно, но там начинается период дерганья ползунков и дрочинга чисел, чтобы была DOOSHA.
Спасибо, ещё вопрос:
планы у меня как у всех просто неебательские, дженерик/некст ген вотэтовсе. У самого с финансами не все прям хорошо, поэтому по началу до альфы точно планирую выезжать на фри ассетах. Стилистика гигантика очень доставила - есть шансы найти хотя-бы в 2 раза хуже халявные ассеты в таком стиле пикрил ? Алсо хочу ММО хотя-бы человек на 20, может посоветуешь что после "Unity in action" можно почитать/посмотреть?
>>45942
Сделать можно что угодно, об оптимизации думать будешь когда будет что профилировать.
Халявные ассеты кроме каких-нибудь общих текстурок - говно, платные - часто тоже, советую на этапе разработки бессовестно пиздить левые ассеты, а перед релизом взять кредит на нормального дезигнера. Любой левый код, кстати, включая сами дефолтные юнити компоненты, тоже советую оборачивать в свои прокси - потому что вполне может быть придется их менять к релизу.
>об оптимизации думать будешь когда будет что профилировать.
Не совсем так. Об оптимизации будешь думать, когда увидишь 5 фпс на конфигурации, которая без проблем тянет гта 5 или ведьмака, и осознаешь, что нихуя с этим не поделать, кроме как резать графон/кол-во объектов в кадре, ибо движок оказался говном, а доступа с сорцам для оптимизации нет.
Ну если сцена состоит из двух стульев, сам знаешь каких, и задача танцора балансировать на них, чтобы сберечь анальную девственность, тот тут уж как хорошо не танцуй, ничего хорошего не выйдет.
>моя сцена - это два стула
Господа, вы сначала всякое говно кодите, а потом через пару месяцев достаёте напильники. Как бы хорошо говно не обтесать, всё равно говно будет, и движок тут не при чём, его сразу укрощать надо было.
Нахуя дефолтные-то менять? Пример приведи, если не трудно. Алсо на ютубах смотрел чувака, он там по чуть-чуть что-то рассказывал и как-то показывал пару платных сцен - вполне ничего вроде были.
Нет, IK можно пилить к любому объекту, как именно это устроено я не знаю, но на этом строится большое количество анимаций. Судя по всему она выебет в жопу тебя и не раз, пока будешь разбираться.
https://m.youtube.com/watch?v=o3bYZbbRVq4
> как именно это устроено я не знаю
По маске группы гуманоидных костей, ёбаный в рот, как ещё это может быть устроено?
Одну группу спрайтов двигай с одной скоростью, другую группу — с другой.
А вообще это всё потом, сначала игру сделай.
Смотри все функции с IK в названии.
https://docs.unity3d.com/ScriptReference/Animator.html
Вот в этом коллбэке
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnAnimatorIK.html
ставишь таргеты и веса для своих рук/ног и головы, при помощи вышеуказанных функций. Позиция - любой Vector3, то есть хоть жопа персонажа, хоть статика, что хочешь. Там даже пример есть, посмотри. В общем-то все значительно проще, чем могло показаться.
Адепты js, не поскпжете как сделать побуквенный вывод текста? Шот с корутинами ебался безрезультатно
WeatherManager
https://pastebin.com/Szsw0U8A
NetworkService
https://pastebin.com/1Rq4X2Yj
Подскажите где трабл? По идее вызываю в WeatherManager Startup>GetWeatherXML>CallAPI>IsResponseValid>OnXmlDataLoaded и даже если оно что-то плохо возвращает - там проверки есть. Алсо если ссылку копирнуть и в браузер вставить - он отдает валидный xml.
Добавлю что сцена стала странно себя вести, иногда бывает что я в сцене не могу камеру (свою, не сценовскую) двигать или двигается рывками, если двигаюсь в сторону середины сцены. Хз как описать.
>но можно же и только непосредственно в момент изменения хп обновлять
Делай так. Скажем, в классе интерфейса есть метод сбора хп, мп и прочей херни, который вызывается через ивенты или прямой вызов, случающиеся во время изменения информации. Сами ивенты вроде получения урона или чего там делаешь ручками, но ивенты вроде встречи коллайдеров и дёргания мышкой в юнити изначально есть.
>>46084
а не проще просто сделать свойство HP , где в сеттере запустить изменение хада, или что там у тебя.
Короче, есть пустой объект, на который я навешиваю Managers и WeatherManager, в первом скрипте должны инициализироваться все менеджеры и мы в цикле ждем пока все менеджеры примут статус Started, я закоментил этот цикл и юнити не виснет, причем в логах выводится xml. Т.е. колбек срабатывает, статус присваивает, но из цикла не выходит.
Managers
https://pastebin.com/gmV89AiS
>>45976
ИК то чтобы ручки и ножки вставали куда надо, чтобы ручки вот за жопу хватали, а не за воздух рядом.
сделай две анимации, где кто-то трахает кого-то, сделай чтобы две модельки подъезжали на нужное расстояние когда это должно случится и запускай анимации синхронно.
>>46078 (Del)
ну напиши чтонибудь типа
public void ChangeHealth(float healthDelta){
health += healthDelta;
if(health <= 0)Die();
UpdateUI();
}
внутренние поля же все равно не должны меняться ничем кроме подобной хуйни.
>>46089
ты же из цыкла не выходишь.
а много ли систем вообще к ХП обращаются? UI, может ИИ, что ещё то?
если хочется то можешь через делегаты например сделать подписку на события с ХП, чтобы когда ХП менялось то оно заодно инвокнуло все делегаты из списка.
например как тут
http://wiki.unity3d.com/index.php/Advanced_CSharp_Messenger
или воспользоваться тем что юнити нагородило. есть например такое
https://docs.unity3d.com/ScriptReference/GameObject.SendMessage.html
или чуть посовременней
https://docs.unity3d.com/Manual/MessagingSystem.html
хотя у них свои недостатки.
Чтобы юнит мог принять в себя вообще абсолютно любые данные, я соорудил отдельный класс СТАТЛАЙН, в котором лежит словарь с стрингой в ключе, T в вэлью и методами для работы с этим. И этих статлайнов для каждого юнита несколько штук для интежеров и стринг и всего подряд. Когда юнит инициализируется из csv, он берёт в себя любое написанное там говно, сортирует по интежерам-флоатам-стрингам, а затем, когда нужен какой-то стат (который выбирается по ключу-стринге), открывает его из статлайна, но если стата нет, то он находит базовый csv файл для юнитов в текстассетах и присваивает в словарь внутри статлайна нужный стат из базового файла.
Так вот. Я обезумел? Где-то тут говорили, что нужно по возможности не плодить лишние ходы для кода и использовать одни и те же методы, и такие статлайны (я думаю) сработают лучше и, чсх, выглядят лучше, чем вручную переписывать для каждого отдельного стата-переменной имя (это заменено string[] {все нужные стринги-ключи}; for i от 0 до string[].length, ну вы поняли).
Блядь сделай ты эвент менеджер, сделай в нем эвент OnPlayerDamage или еще какую хуйню, подпишись туда нужной хуйней и вызывай из другой хуйни, какого хуя тебя всему учить надо?
Суть такова, есть экран общего инвентаря, есть панельки с квик-слотами(ну типа пояс), есть инвентарь перса. По клику на перса меняется панелька с его инвентарем, остальное не меняется.
Как лучше сделать? я сейчас совсем опух и попробовал просто геймобжекты предметов выключать, когда окно персонажа закрывается и вместо него открывается другое. Но что-то не очень выходит.
Вообще как такие вещи делаются проще? все на уровен бэкэнда, типа несколько массивов, потом операции с циферками и на выходе уже отрисовка, или можно всю"физику", перемещения предметов и прочее делать геймобжектами и их компонентами, а-ля фронтенд?
не суди строго, опух, поехал.
Ты как-то всё усложняешь.
Окно инвентаря просто отображает массив айтемов. Лично у меня они в List загнаны. Разные персонажи - разные List'ы. Как и у лутабельных объектов.
В предметах есть метод ShowMe, в инвентаре есть лист предметов. Когда открывается инвентарь, он вызывает ShowMe во всех предметах листа, и каждый предмет показывает через этот метод только свою иконку. Тебе же не нужно сам предмет выключать, только отображать его, верно?
а зачем делать всем предметам ShowMe() ри открытии, если они дочерние к инвентарю и мы когда закрываем инвентарь, они и сами появляться/убираться буудут.
У тебя предметы только в инвентаре существуют? Никакого влияния на статы и т.п. не оказывают? Я думал, они объекты в большом мире, которые могут существовать в разных обличьях и имеют влияние на мир.
>Окно инвентаря просто отображает массив айтемов.
ну их же еще и перетаскивать надо из окошка в окошко, условия проверять.
Таскаем мы за геймобжекты, а не за циферки.
айтем у тебя это Геймобжект, или просто класс, описывающий поведение, с циферками, который ты вешаешь на ГО?
Просто у меня есть получается такая картинка, есть Item, который объект, часть базы из json, эти объекты хранятся в массивах инвентаря и пр. Это циферки, грубо.
Есть физическое представление этих циферок, класс, который реализует дропы, драги и проч. Наследуется от монобих. И есть геймобжекты, на которые вешается последний класс.
не нагородил ли я лишнего?
влияние на персонажей оказывают. На мир не оказывают. Обычный лут, короче.
Немного не понял твою мысль.
повторю реквест, не видели гайдов, где не один инвентарь реализован, а несколько окон, для разных персонажей. Или, например магазин, думаю тоже подойдет.
> ну их же еще и перетаскивать надо из окошка в окошко
Реализуется элементарно.
> айтем у тебя это Геймобжект, или просто класс, описывающий поведение, с циферками, который ты вешаешь на ГО?
Айтем у меня это префаб, который по сути пустой геймобжект, с навешенным классом. В классе прописано имя, вес и тип предмета. А уже по имени подсасывается спрайт, который отображается в инвентаре.
> img.GetComponent<Image> ().sprite = Resources.Load<Sprite> ("Sprites/" + it.iName);
Инвентарь открыл - из листа всё заполнил. Закрыл - удалил.
Гайдов не видел, но можешь посмотреть на реализацию в Divinity: Original Sin 2. Торгует один играбельный персонаж, но можно быстро переключаться, чтобы получать плюшки с навыков/репутации. Все инвентари сделаны обычной сеткой в одном окне, только разделены по именам.
> В классе прописано имя, вес и тип предмета.
а как база данных со всеми предметами реализована?
Лежат себе в папочке Resources, откуда загоняются в лист.
Для моих нужд пока такого более чем достаточно.
Именно так. В каждом префабе прописаны все свойства.
У меня всего 22 предмета, так что проблемы нет.
В целях повышения квалификации, я буду по вечерам заводить стримы и помогать решать ваши проблемы.
Шо думаете?
Готов отвечать на вопросы вида "что такое нулл эксепшн" и "где скачать ассет инвентаря как в ММОРПГ"?
ладно, соглашусь, хуйню сказал.
По вечерам по московскому времени? Тут люди со всех кругов ада присутствуют, не только с первого
В общем-то, рейкаст врага теперь игнорирует стекло и видит сквозь него. Но у меня лучи еще служат для того, чтобы определять стену, в состоянии патруля. Ну и теперь вражина упирается в стекло. Как сделать так, чтобы стекло игнорировало одни лучи, но другие нет?
>Ну и теперь вражина упирается в стекло.
Дай вражине модельку мухи и сделай вид, что так и надо
Петросян.жпг
Два разных рейкаста. Один для визуального определения, другой физического. Ну я бы так сделал.
Сейчас, компилируя новый билд игры, после обновления югити, уже около 15 минут идёт этап
"Packaging assets - 8ce0a54f...",
почему? (и как можно исправить,конечно)
Аноны хелп. При приближении к объкетам они урезаются. Всё началось после добавления модели машины спи3женой с инета. Что посоветуете?
Знать бы ещё какой именно параметр
Ух, всё анон. Разобрался. Не в этом трабл был. Сори за беспокойство, просто я ебан сразу в нескольких расширениях одну и ту же модель закинул и такая хуита получилась
Та я тебе не особо то и помог, но если что, всегда рад)
Есть сфера, на которую натянута текстура и карта нормалей (обе две dds) из интернета. При этом освещается это почему-то в обратную сторону, и впуклости выглядят как выпуклости.
Как пофиксить?
Инвертировать нормали пробовал, выглядит еще всратее.
Конструктивно.
>При этом освещается это почему-то в обратную сторону, и впуклости выглядят как выпуклости.
Лол, а если реальную впуклость осветить лампой с другой стороны она станет выглядеть как выпуклость?
Ну ты и тупой.
Отзеркаль текстуру.
Я генерирую карту из csv и задаю каждому созданному гексу высоту в -34F, потому что это та высота, на которой у меня расположен начальный гекс. Однако, когда гексы таки генерируются, они падают ещё на 34F. Почему? Это нормально?
И ещё. Я собираюсь при генерации гекса в месте другого гекса заменять старый гекс новым. Destroy() будет для этого подходить? Я ещё собираюсь все упоминания старого гекса из всех словарей и листов удалять мануально
И что это значит? Он что, сам полезет по вызову Destroy() во все мои листы и словари и сам всё удалит?
> во все мои листы
ну это твои листы, он в них не будет лезть потому что они твои. но из своих подчистит. не понимаю вопроса короч.
>строчке на Space, Self и W
ну смотри, в трансформе указываешь в конце перегрузку Space.World и у тебя обжект генерится в мировых координатах, а если Space.Local то относительно координат создающего объекта.
да, доки у юнити та еще дыра, приношу извинения.
>зачем такие подозрительные манипуляции, если гекс уже есть?
у него же там СВОИ_ЛИСТЫ. вероятно ему проще удалить старый и создать новый чем пердолиться с заменами
Ясно, спасибо.
>>46484
>подходить то, конечно, будет. но зачем такие подозрительные манипуляции, если гекс уже есть?
Я сделал генерацию через csv, где каждый следующий генерируемый гекс строится относительно предыдущего Зевс-посейдон и всё такое. Можно, конечно, старый гекс оставлять, но имхо логичнее, что если новый гекс хотят поставить поверх старого, то нужна замена. А если так, то нужно все ссылки на старый гекс подтереть.
>где каждый следующий генерируемый гекс строится относительно предыдущего
И это очень дезориентирует, как оказалось, лол. Тут без хоть какого-то взаимодействия со старыми гексами, если конфликтует позиция нового шага и старого, не обойтись.
а вдруг нет? вдруг он делает что-то удивительное? например удаляет гекс под курсором чтобы вместо него заспавнить подсвеченный гекс! мы не знаем. надо узнать. а заодно узнать на какую платформу ориентируется, что делает, украсть код, идею, душу, ключи от квартиры.
>>46491
порядок орисовки UI элементов же зависит от их положения в иерархии в канвасе, не?
хотя я фейд не трогал, может он особенный.
>>46492
ну тогда дестрой, да. кстати почитай про то как юнити интересно дестроит. обьект не исчезнет из твоих листов, но если ты будешь спрашивать у него нулл ли он то он будет говорить что он нулл.
>например удаляет гекс под курсором чтобы вместо него заспавнить подсвеченный гекс!
Я меняю цвет одного из материалов - пока что. Когда начну корутины грызть, хочу испробовать их на подсветке сначала.
>обьект не исчезнет из твоих листов, но если ты будешь спрашивать у него нулл ли он то он будет говорить что он нулл.
занятно
> например удаляет гекс под курсором чтобы вместо него заспавнить подсвеченный гекс
мое утро сделано, спасибо
что, прямо из сцены поверх UI чтоли рисуется? какая охуительная проблема. а хуй знает че там тогда, я не пробовал. ну, если у тебя UI только в камере будет, а не в мире, то можешь решить эту проблему основательно. сделай отдельно камеру которая рендерит только UI и поставь у неё Depth побольше.
Верно, ступил я. Но я всё равно уверен, что причина в том же самом.
http://answers.unity3d.com/questions/1242578/ui-stays-behind-game-objects.html ?
Попробуй canvas render mode поставить overlay
Собственно вопрос в том, где в этих ваших юнити играх лежат ресурсы, т.е картинки, текст, шрифты? Папка resourses весит как-то подозрительно мало.
Алсо вопрос номер два: чтобы их достать, нужно ли что-то кроме движка? Знаю, что по крайней мере в ue3 разработчик мог как угодно упаковать ресурсы, чтобы ни одна собака ничего не достала. С юнити аналогично или всем похуй и можно ковырять?
Нормальную модель скачай.
Колесико мыши покрути, аутист
круто. Если реально готов заняться, то веди трансляцию на ютубе, там и чатик, и потомкам будет что оставить со списком вопросов. Ну и в шапку можно добавить, если годнотой окажется.
Ну, я не шибко большой спец, но всё равно. Я считаю, что стоит попробовать.
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
Даже не так. Надо, чтобы он запускал заново все функции с ванильными настройками, кроме awake.
Вот есть у скриптовый файл, в котором описан класс wheel с интересными мне полями. Я хочу их изменить в другом скриптовом файле, где описываю совсем другой класс. При чем изменить я хочу все объекты, к которым приписан этот скрипт (обозначил их все одним тегом). Как это можно сделать?
Пример кода кинь, а то нихуя не понятно.
кроме то6о, что ты со школьной скамьи пришел, а не с .net
Ты какой-то велосипедист.
>При чем изменить я хочу все объекты, к которым приписан этот скрипт (обозначил их все одним тегом).
Заносишь объекты в лист и меняешь.
Реализовал что-то подобное через tooltips, но беда в том, что сами эти подсказки по какой-то причине юнити анимировать не дает. Вторая мысль была сделать это с помощью кнопок, но через gui как это сделать, чтобы кнопки были прикреплены к какому-то определенному месту? (у меня камера следует за персом).
Если некорректно/неясно сформулировал, могу как-то попытаться изобразить, что имею в виду и кинуть скрины с наработанным, чтобы было понятнее. я лишь прошу натолкнуть в реализации своей идеи
Создай отдельный Canvas. Задай Render Mode = World Space. Внутри уже размещай нужные тебе элементы.
Значит так.
Берешь и в VehicleAssist прописываешь поля public Wheel leftWheel и т.д.
Потом просто перетягиваешь геймобджекты со своими колёсами в свой ассист и работаешь через эти поля без каких-либо поисков компонентов.
А ещё лучше не паблики везде хуячить, а использовать аттрибут SerializeField на приватных полях
> А ещё лучше не паблики везде хуячить, а использовать аттрибут SerializeField на приватных полях
Кстати, почему? В книге из шапки вон тоже советуют делать так.
Потому что пабликами делаются поля, которые безопасно можно модифицировать и не сломать ничего. В этом же вся соль ООП, что по сути ты меняешь состояние объекта не зная, внутренней реализации.
Не, это понятно. Но если программирую только я, и я точно знаю, что ничего ломать я не буду и лишний раз паблики дрочить не собираюсь?
Понятное дело, что если делать по канону, то паблики отдельно, приваты отдельно. Но в большинстве случаев это вроде не критично.
Там, кстати, в книге автор ещё так советует писать.
Например:
private int _id;
public int id {
get {return _id;}
}
То есть айдишник вроде как и публичный, но можно его только получить, а не менять. Что логично, да, с точки зрения безопасности.
Наверное, надо будет привыкать писать так, чтоб потом не краснеть если занесёт к приличным людям.
Убрал предварительную задачу белого цвета - стал рисовать зелёный. Блядь, как так-то
Знаешь, полезно писать код так, чтобы не замусоривать его комментариями типа "ЭТА ТОЛЬКА ДЛЯ РИДАКТОРА, НИТРОЖЬ". Вообще, в идеальном мире, код пишется так, что если ты смотришь на него спустя полгода а то и больше, то тебе не надо вспоминать, что он делал.
В общем, правильно мыслишь.
Ещё можешь почитать статьи на рефакторинг-гуру и совсем упороться "правильным" подходом к разработке, но мой тебе совет всё, что там описанр, не стоит воспринимать как 100% истину во всех инстанциях
> Белый цвет задавался в Start()
А зачем ты задавал в коде один цвет, а потом в другом участке кода его менял? У меня вот стартовый цвет задаётся тупо материалом в инспекторе, а потом уже я его меняю в коде и всё норм.
Я уже разобрался, в чём дело. У меня был старт для главного контроллёра, где зелёный цвет и делается, и были старты для разных раскрашиваемых хуёвин. До этого момента я, видимо, всегда трогал только те хуёвины, которые стартились до главного контроллёра, и поэтому их цвета нормально работали.
Вот, кстати, на комментарии я тоже часто забиваю, надо отучиваться от этой лени.
Но даже без комментариев если открываю код трёхмесячной давности (не пол года, но всё же), чтобы посмотреть как я там делал вот ту вот залупу, то всё предельно понятно.
Опять же, сказывается тот фактор, что никто кроме меня мой код не читает, поэтому и комментарии писать лень. Хорошо хоть приучил себя к правильному форматированию и не называю переменные lampochka, а методы — VertimHuevinu, за такое ещё в универе монтировкой по ебалу били.
> к правильному форматированию
Точнее не "к правильному" (стандарты MSDN я хуй помню), а скорее "к единому". Это как свой почерк, даже если писал в темноте и бухой в слюни, то всё равно потом прочитаешь.
Да, я натыкался на это вчера, но при этом текст блюрится и делается четче только в том случае, если его сильнее увеличить. Как поправить?
Может я в шары долблюсь, но в инспекторе возле имени объекта я вижу только статик, слои и тэги.
Суть такова: есть статичная камера, которая смотрит на карту. Камера охватывает всю карту и не движется вообще.
На карте есть, например, кубики. Я хочу чтобы при клике по кубику над ним (кубиком) всплывала кнопка (а может и не одна).
Короче, хочу чтоб было вот так https://www.youtube.com/watch?v=zd5CvQm1TZI но на видео у него позиция всплывающих кнопок статична, так как камера бегает вместе с персонажем. Мне же нужно чтоб кнопка привязывалась к позиции кубика, над которым всплывает.
Не спал 22 часа, так что если объяснил как еблан — не серчайте.
Благодарю, изучил. Но сделал всё же иначе.
У меня есть словарь с двумя ключами Team0 и Team1 в виде стринг. Я ввожу текст Team0, проверяю через дебаг.лог - это действительно Team0 - но сучий словарь отказывается этот текст принимать, говорит, что нет такого ключа. Как это возможно вообще? Русского текста там нет, только английский. Никаких невидимых символов.
Дело скорее всего в csv файлах, из которых я текст беру. Такое чувство, что одинаковый текст из монобихевиора и из csv по-разному воспринимается. В 99 случаях нормально работает, а вот в этом ну никак, блядь.
Может, кодировка как-то влияет? Я уже охуел тут.
Я распечатал посимвольно (через char[]) входной текст, и хуле я вижу? Один из символов ЁБАНОЕ НИЧТО
Это как вообще?
s[0] - это строка из текстовика
>>47003
/0 или /r? Что так трудно вывести код этого символа? Да выше по коду можно отследить откуда он взялся, хотябы добавив кавычки в debug.log("\"" + xyz + "\"")
Внимание! А теперь вопрос:
Как заставить ScrollView скроллить по тачу только когда элемент не помещается во viewport (тогда же и скролбары появляются).
\r, оказывается. Спасибо большое.
Собственно, я разделяю строки по Split('\n') Нужно как-то по-другому, выходит, их разделять? Да ещё и в зависимости от системы?
Environment.NewLine - конец строки на активной системе (но файлы то могут и на другой быть созданы)
Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries) - разделителей можно несколько указать
System.IO.StringReader.ReadLine() - Split медленный и не подойдёт для больших файлов, StringReader быстрее и не жрёт много памяти
>стать Юнити экспертом
Аххахаха. Экспертами по руководствам не становятся.
>(очень нужно, для приёма на работу)?
Для первой работы, чтобы взяли в норм проект, достаточно изучить документацию с офф сайта и прочитать пару базывых книг по архитектуре юнити-приложений или чем ты там заниматься хочешь. А дальше после каждого проекта вписываешь его название в резюме и увеличиваешь цифру в графе "желаемая зарплата".
Посмотри в сторону CanvasGroup. Там что-то было, что блочит последующее прохождение рейкаста.
повеселился с этого
Как в юнити сделать, чтобы при импорте он считал модельку уже в нулях, а не трогал блендера цифры?
Ну или как в блендере сохранить текущие параметры скейл-ротейт-трансформ, чтобы при импорте они в юнити не шли.
Блендер только установил, не кидайте тряпками, лучше помогите.
Ссу на ебло тупому, бездарному, зачуханному чмырю-дегенерату, который даже не способен своими дряхлыми, немощными ручонками, измазанными по локоть в говне и сперме собак, открыть гугл и вбить пару слов. Псссссссс
Object > Apply > Visual Transform
Ты совсем отбитый? Окно импорта модели видел?
Чашку чая тебе с валерьяночкой
>>47157
применяй трансформ в блендере перед импортом, хули ты.
Предлагаешь каждый кадр анимации синхронизировать? Нормальные пацаны делают рендер отдельно от просчета, а потом анимации подстраивают под движение на клиенте уже.
да пока ничего особо не предлагаю, просто интересно. например как сделать перемещения когда персонаж побегал-побегал, а потом ему например надо после удара по ебалу красиво как-то покорячится в анимации и выйти из неё в другом месте отшатнувшись. синхронизировать позицию/ротацию, включить рутмоушен на время этой анимации? как сделать хитро экстраполяцию анимаций, если например геймплей предполагает что удар регистрируется через коллизии мужыка который медленно размахивает бревном накручиваясь в рутмоушене? вроде довольно предсказуемо. или например посадка в транспорт с анимацией, как это было в первом PlanetSide.
Подозреваю что в OnPointerClick на кубике убивать кубик дестроем и на его месте инстанциировать префаб шарика не очень хорошая идея. Есть ли варианты лучше?
Можно ли просто меш менять с коллайдером или это лишние заморочки и проще поменять префаб?
а что не так в этой идее то? как бы, зависит от того как часто ты это собираешься делать.
всегда можешь лезть в MeshFilter и менять меш там. но вообще нахуй ты задумываешься о таких проблемах то? ты главное делай. просто сделай этот процесс так чтобы его потом поменять можно было безболезненно, если оптимизировать захочется.
да, нужно пояснить:
кубики, это клетки на сетке поля в игре. При клике будет меняться не только цвет, а и моделька. Условных кубиков много.
Вот если бы не надо было меняь модельку, а только спрайт, или цвет, я бы сделал для всех клеток стейт от енум и менял бы просто его по клику, а дальше подменял текстурку или что там. Но если надо менять модельку без изменения положения Г-обжекта и прочего, стоит ли его убивать и спавнить новый? или это дурной тон?
А моделька чо, богоизбранная?
Я знаю варианты:
перетащить на каждый префаб в инспекторе.
навесить при спавне через AddComponent
еще есть какие?
>При их инстанцировании, хочу навесить на них компонент скрипта, который потом навесит на префаб другие компоненты через RequiredComp
AddComponent ебашь.
Только ты это, префаб не очень правильно используешь, если потом компоненты навешиваешь.
ну иначе мне на каждый префаб (штук 10) придется по несколько компонентов руками вешать.
спасибо, посоны.
Юнити им блядь сериализатор дала. Бери, пользуйся. Не пиши код, сериализуй в редакторе.
Не хочу блядь! Хочу говно жрать по-старинке всё хардкодить.
СУКИ! ГОВНО СОБАЧЬЕ!
А то я нихуя не понимаю. В том же гамаке у камеры есть ширина, высота. У спрайтов размеры в пикселях. И все понятно.
А тут какие-то PPU у камеры, спрайтов, неба и аллаха.
Гугли IoC.
>>47247
if (krutitsya) transform.Rotate()
>>47230
Я имел ввиду, не пиши код, который дохуячивает объекты с настройками в рантайме, а то уже невозможно видеть как всякие костылепидоры суют свои обоссаные жсон и хмл, лишь бы не пользоваться редактором, а всё сделать по-старинке и каждый раз переписывать код своего обоссаного захардкоженого сериализатора.
>>47249
Насколько помню, то если ОТКРЫТЬ ДОКУМЕНТАЦИЮ ЮНИТИ, то там все расписано за единицы измерения. Я бы за тебя погуглил, но я на мобиле сижу.
Если нихуя, тогда на пальцах поясню. В юнити 1 единица пространства равна 1 метру. Когда ты импортируешь спрайт в юнити, то по умолчанию размеры спрайта становятся 100 пикселей спрайта=1 метру. Например, если у тебя спрайт 100х100 пикселей, то когда ты его кинешь на сцену, то увидишь, что спрайт у тебя займет пространство ровно 1х1 метр (1х1 единицу пространства сцены)
Алсо, аноны, я пока в больнице кисну, думаю есть ли заинтересованные в том, чтобы я в прямом эфире поотвечал на вопросы про юнити? Если есть, пожалуйста, напишите сюда в какое время (по мск) вам удобно бы было, чтобы я стрим запускал? Я с работы прихожу в 19:00 по мск
> В юнити 1 единица пространства равна 1 метру. Когда ты импортируешь спрайт в юнити, то по умолчанию размеры спрайта становятся 100 пикселей спрайта=1 метру. Например, если у тебя спрайт 100х100 пикселей, то когда ты его кинешь на сцену, то увидишь, что спрайт у тебя займет пространство ровно 1х1 метр (1х1 единицу пространства сцены)
Cложна.
Окей, тогда так. Допустим, я делаю игру под разрешение 1920x1080.
Размер ортографической камеры я выставляю в 10,8 получается (она ж там по высоте выставляется)? 100 пикселей в 1 единице = 1080 пикселей.
Потом выставляю аспект в 16:9 и все в шоколаде? То есть потом после компиляции игра будет выдавать картинку в 16:9 с черными полосами если юзер выбрал другой аспект?
Про 2560х1080 и шире не забудь
Чисто технически да, если у тебя все спрайты будут иметь PPU 100, и всё, что с UI связано тоже.
А если не все спрайты PPU 100? Или надо всю графику делать под единый PPU?
Просто ща смотрю курс по юнити для нубов, там чел пихает объекты в игру и играется с PPU по ходу дела.
PPU можешь ставить какой угодно, хоть 1, чтобы все единицы юнити у тебя были в пикселях спрайтов. Только потом не сосни, когда у тебя float начнёт пидорасить.
Про физику я прочитал уже, что не стоит 1 к 1 делать, если используешь физику.
Я больше про архитектуру сейчас. Нужно ли все спрайты пилить под единый PPU, чтобы потом делать нормальные отображения разных аспектов без черных полос?
Ты показываешь соотношение сторон в редакторе, соотношение сторон в билде в другом месте ставится, но так и должно быть, да. Никто тебе не запрещает сбилдить и посмотреть.
Когда ж вы научитесь шапку читать? Там же есть название книги, лень скачать что ли? В книге за всё это говно расписано.
> научитесь шапку читать?
> Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Нассал тебе на ебло
> и по мере разработки гуглить непонятные моменты
> гуглить
Лол, ну так и шёл бы гуглить, а не тут спрашивать.
Тут мой гугл.
Проблемы только у тебя, раз ты сел дрочить движок, не разобравшись с его основами.
Я пришел с другого движка. И по опыту знаю, что темы с разрешениями идут во всех книгах/туториалах не сразу. Поэтому я хочу заранее прояснить некоторые моменты по архитектуре.
Алсо, я обложился курсами с юдеми.
> И по опыту знаю, что темы с разрешениями идут во всех книгах/туториалах не сразу
Ёлы палы, а оглавление для кого придумали? Что ж это у тебя за опыт такой, который не позволяет его открыть?
Да, не сразу, потому как "сразу" там написано куда вообще надо нажимать чтоб движок завёлся. А уже со второй части оно внезапно "сразу", буквально первая же глава.
Там сразу расскажут как правильно планировать игру таким образом, чтобы облегчить ебатню с разными аспектами и девайсами?
Извиняй, как замутить кнопку "сделать пиздато" не расскажут, но если IQ не двузначное, то книга даст неплохой буст.
Тем более что осваивается максимум за три вечера. Это если одной рукой листать книгу, а второй чесать яйца.
Я ж тебе и говорю — советы-то тебе дадут, но надо понимать что советы это не панацея и не заклинание, а ими нужно уметь пользоваться. Если умеешь, то бог навстречу.
Мне достаточно было пояснения с вершины опыта насчет тех же PPU, дальше я сам разберусь.
Я и написал, что это не критично.
У меня в коде и так везде "раскрываются" модули с initialize и задачей параметров, которые затем свои модули задают, но у меня начальный модуль для всего по логике вещей не начальный, а просто генератор карты. Если переделывать нормально, то нужно будет ГУИ на две части делить (общая и конкретно для этой сцены), ивенты делить, генераторы делить, всё делить, короче. Либо же сделать статические классы для всего и хитро переключать состояния, либо же иметь загружаемые отдельно для каждой сцены "полные" версии ГУИ, ивентов и т.п., которые будут заменять собой версии из предыдущей сцены. Деление, имхо, лучше будет, ведь по логике вещей меню, консолька и т.п. в любой части программы должны быть доступны.
Ну, все можно и не пилить. Это же просто масштаб твоего спрайта по отношению к пространству.
Представь себе картину, что какой-нибудь васян рисовал арт в сантиметрах, а другой в метрах. И чтобы другой васян не переконверчивал арт в нужные масштабы есть ppu.
>>47335
Я хз, мож IoC зря посоветовал, но я вот что еще вспомнил, юньку можно заставить запустить код тупо раньше всех через
[RuntimeInitializeOnLoad(BeforeSceneLoad)]
static void MyInit() {}
И правда. Спасибо.
Я вообще не пойму о чем ты, шизофазия какая-то.
Сцена - это просто рут для геймобжектов, никакого отношения к консоли или к локализации или к чему угодно кроме иерархии геймобджектов она иметь не должна.
Статику нормально юзать когда ты код один раз написал и забыл. А чтобы 100 раз не переписывать код каждый раз, когда ты что-то решил переделать, и придумали иок/ди.
Я на пингвине давно не сидел, но может туда студия встанет? Там-то вроде без проблем всё.
Студия может и встанет, но под вайном.
А так просто попробовать решил версию юнити под линукс, чтобы все нативно было.
Поясню. Например человечку надо взять предмет, который может быть разных размеров, как анимировать его руки так чтобы они прицепились за края предмета? еще пример, за ручку двери, кнопку?
Можешь за щеку освоить быстро.
Anima2D, там вроде IK есть.
В гейммейкере все просто, там человеческий экспорт без лишних приблуд и удобные методы.
А тут что-то какой-то пиздец судя по спайновским докам.
Для этого не быдлокод писать надо, а обучать нейросеть. В открытом доступе нихуя юзабельного естественно нет, можешь только ролики посмотреть как они учатся ходить с произвольным строением тела, траверсить любые препятствия, итд.
Обычный рэгдолл просто включает физику для конечностей блендом к записанной анимации.
>Сцена - это просто рут для геймобжектов, никакого отношения к консоли или к локализации или к чему угодно кроме иерархии геймобджектов она иметь не должна.
Поэтому я собираюсь отрезать от нынешнего ГУИ, который имеет в себе методы для работы и с текстом, и с меню, и с прочей чушью, и методы для работы конкретно со сценой, половину и перенести в новый ГУИ, который будет подгружаться только со сценой.
Сама по себе нейросеть простая как бревно, чтобы ее написать математики начальной школы достаточно (или ты легко можешь скачать самую пиздатую готовую).
А вот как ее обучать - тут тебе никто оптимального рецепта не даст. Человеческий моск тупо брутфорсит все что есть, ибо может себе позволить. А компьютерную ты так или иначе ограничиваешь, и тут тебе кроме личного опыта нихуя не поможет.
очень интересно, спасибо. Только я в 3д хочу, но я думаю что это мне поможет.
на нейросеть я не расчитываю, не для одного человека работа. Думаю несколько функций написать, а для предметов поставить точки за которые и нужно браться.
когда придется писать слишком сложную функцию, тогда лучше сделать нейросеть. Анимации тому пример. Посмотри анимации в ГТА на ютубчике.
Еще используют для распознавания образов.
И как ты себе представляешь то же открытие двери в "несколько функций"?
Твин культяпки к ручке? А если не дотягивается? Ну посчитать заранее сектор и переместить в него тушу, хуле? А как тушу перемещать? Ну астар типа в анимации движения, потом твин культяпки к ручке, и бленд в айдл для всего остального? Поздравляю, ты сделал обычную записанную анимацию +- 5 пикселей, только непонятно зачем проебался с ней в 10 раз больше.
Попрошу сильно не придираться, мне важен сам подход, такие анимации я буду использовать не для каждого движения.
Тушку будет двигаться игроком, а вот ручки нет.
5 пикселей записанной анимации это когда дверь стоит четко в одном месте всегда. А если нет? А если она сверху или снизу? Под углом как нибудь?
Наверное будет как ты и написал, спасибо.
джва года уже тренд.
Придурок, тебе дважды написали, что есть IK, или инверсная кинематика, но тебе же лень почитать.
Ослоёбина ты тупая.
Есть одна клиент-серверная дрисня. Данные (положение в пространстве и прочее) отсылаются всем клиентам по имеющемуся списку.Все ок, все красиво.
Задача - сделать так, чтобы данные отсылались только об объектах вокруг персонажа.
И тут я меня рвет на части моя собственная необучаемость: что быстрее: OnTriggerEnter(создали стороннего персонажа)\Exit(удалили стороннего персонажа),
или OverleapSphere, и его поэлементный !List<БылиВПрошлыйOverleap>.contain(List<ЕстьВЭтотOverleap>) (получили ушедшие слишком далеко персонажи, ручками удалили) и потом еще раз сравнивать !List<ЕстьВЭтотOverleap>.contain(List<БылиВПрошлыйOverleap>) (получили всех новых, ручками добавили)?
Как делают большие мальчики? Как принято?
Формулировка вопроса у тебя пиздец.
В ммо делают тупо зону интереса - квадрат, близко к ребру - 2 квадрата, близко к углу - 4 квадрата.
В танчиках на серве включена физика, и на изменение любого позишна пересчитывают двухсторонний m2m кто кого видит.
Чистится все и там и там на клиенте без участия сервера.
читал документацию и незаметил, что она для версии 5.3
Благодарствую, добрый человек: твоя мать достойная женщина а отец - настоящий мужчина.
Я, примерно, понимаю то, о чем ты говоришь, и даже могу несколько дополнить список примерами реализации из Battlefield (которыми все уже хз сколько обмазываются).
Вопрос именно в реализации расчета кто именно вошел в "зону внимания", а кто вышел. Поясню: предполагая, что OverleapSphere (который вроде бы даже легче чем CastSphere) вызываемый нифига не каждый фикседСтеп, должен меньше нагружать, я сделал через него. Но сравнение массивов, чтобы понять кто "новенький" в зоне внимания, убивают все что только можно. Тогда как очевидно более медленный OnTriggerEnter\Exit (более сложный в плане как рассчетов, так и обработки), тормозит на порядок меньше. Подобное несоответствие моего мировосприятия и результата и вызвало вопрос: как детектить вошедшего и вышедшего из зоны внимания.
А обязательно сферы оверлипить или кастовать? Нельзя, скажем, задать габариты объектам, посылать эти габариты + координаты объекта всем другим объектам, и если расстояние между объектами + габариты меньше радиуса обнаружения, то считать, что объекты друг друга видят.
Я в эти ваши сферы ещё не вникал, мало ли как оно устроено, если вон человек жалуется, что медленно это работает.
Я пользуюсь. И как я уже неоднократно объснял, тут суть в том, чтобы ты сука своими кривыми руками не писал код, который в тысяче мест знает какая у тебя реализация конкретного класса.
Например,
batya.kokushekList.Add(goveha);
В этом примере у тебя любой класс будет знать, что у бати 100% есть список с говёхами. Потом, по мере разработки, тебе не понравится List и ты решишь перейти на HashSet и если кто-то будет в отдельной ветке писать всё под тот же самый List соснёт хуев при мердже, т.к. ты сменил реализацию и новый код уже не сможет встать на текущие рельсы. Также при смене реализации, тебе придётся выебать себя в очко и руками обновить тонну классов, которые перестали быть совместимы с изменениями.
А вот если бы ты, изначально сделал список приватным, а на любой чих-пых завел бы отдельные методы, то ты бы мог менять внутренюю реализацию класса как угодно, не боясь, что у тебя сотни классов тупо сломаются.
Думаю, что объяснил понятно.
Гугл предлагает к каждой корутине ручками реализовывать обозначение активной корутины. Можешь добавлять в глобальный словарь (типа, <GameObject, string>) элемент, потом перед окончанием корутины его вытаскивать.
Либо я все еще тебя не понимаю, либо ты меня. Еще раз:
Для ммо:
у игрока изменился позишн: переслать всем кто в квадратах интереса игрока ивент что он переместился, посчитать текущие квадраты
если появились новые квадраты: передать игроку все определения из этих квадратов, которых у него еще нет в кэше, на клиенте почистить все кроме кеша в уже неакутальных квадратах
вся хуйня проиcходящая в квадрате рассылается всем игрокам, у которых этот квадрат в текущих
Все. Никаких оверлапов, никаких диффов массивов.
Для танчиков:
определения для всех загружаются в начале матча, многие ивенты транслируются вне зависимости от зоны видимости.
у игрока изменился позишн: посчитали кого он видит (тут можешь оверлап юзать если устраивает), заменили м2м на сервере, на клиенте почистили тех, кто выполз из поля зрения.
вся хуйня, совершаемая игроком, транслируется всем игрокам, которые его видят, через обратный конец м2м.
Все. Снова никаких диффов.
это, конечно, вариант. но вдруг корутина безобидная? например прикинь как было бы здорово выводить рядом с объектом список активных корутин. чтобы дебажить какие-то короткие события сделанные с помощью корутин. или чтобы видеть вообще что я, или кто-то, какую-то хуйню натворил а она чето там делает.
>>47829
дааа, это конечно вариант и я предположил его своем вопросе и я сам так делаю в критичных местах. но другие так не делают и мне самому лень эту хуйню творить каждый раз, но иногда она бывает полезна и когда она полезна то экономит кучу времени. можно конечно написать что-то вроде MonoBehaviourExtended и делать все свое говно наследуясь от него. но чёт не понравился мне этот подход, решил на дваче спросить.
>ивент что он переместился, посчитать текущие квадраты
Как? Главный вопрос - "как именно".
>посчитали кого он видит
Как? Как видит?
Главный вопрос обоих моих сообщений (сорян, я кривоумный) - каким образом реализовывать это "видит", "находится в текущем квардате" и прочее. Как сделать "видит"? Как сделать "вошел в зону"?
Точнее, ок, по квадратам я могу попробовать тупо описать сетку Х и Y координат, и потом каждые 0.1f секунд сравнивать. Криво, некрасиво, откровенно геморойно в плане дизайна, но имеет право на существование.
Что делать в боле продвинутом, описанном тобою случае?
во всех туториалах предлагают перемещать объекты используя физический движок, то есть задавать вектор силы и прикладывать его к объекту
в гамаке я привык к тому, что перемещаю объект просто прописывая ему кол-во пикселей по x и y
что-то типа
player.x += horizontal_speed;
player.y += vertical_speed;
в юнити так же можно или не стоит выебываться и просто юзать физический движок для перемещений?
А почему так?
Некоторые предлагают просто делать что-то вроде
transform.position += new Vector3(hsp, vsp, 0);
Это правильно?
ноуп. если будешь говорить трансформу позицию то он будет игнорировать физон. трансформ отдельно, физон отдельно. юзай физон.
Благодарю
В системе статов для персонажей использую свойства где только могу. Очень удобно, особенно потому, что в get можно выводить хуевины типа
return _thisPrivateVar + (var1+var2)*0.05;
Хочешь выводить приватные поля в редактор — используй [SerializeField]. А так думай, что делает переменная, нужно ли ей быть публичной, и не будет ли удобнее написать две-три функции на три строчки, которые с ней работают.
Мимокрок.
Можно сделать тело кинематическим и таскать за трансформу, если тебе не нужно физически реалистичное поведение. Силы на него действовать не будут.
В прошлом году один мой друг пробовал устроиться мобильным разработчиком на Юнити. Так вот, на собеседовании он выполнил тестовое задание и они его отругали за то, что он использовал foreach вместо for. Типа это сказывается на производительности, и вообще НИЗЯ ТАК ДЕЛАТЬ, плохой погромист!
На мобилках действительно всё так плохо с производительностью? И нужно использовать только for, забыть про свойства и стараться запихнуть побольше логики в один метод? Мне почему-то казалось, что по-настоящему на производительность может повлиять только графика, а всё остальное - микро-оптимизации, которые нахуй не нужны.
Это уже неактуально. Старые версии mono в foreach всегда создавали объекты, даже если GetEnumerator() возвращало struct. Шизики боялись что из-за этого будет срабатывать сборщик мусора и их матч-3 будет тормозить.
> transform.position += new Vector3(hsp, vsp, 0);
Ну ты пиздец. Для таких объёбаных наркоманов transform.Translate придумали.
В любом программировании доебы до любой конкретики при рекрутинге - признак днище-конторы и синдром вахтера. Тебе блять в любом случае придется его переводить считай с нуля под свои практики, никто придя с улицы не будет писать ровно так, как ты хочешь.
С драг энд дропом я так понимаю просто.
public Obj obj;
Перетаскиваем префаб в паблик поле и создаем в скрипте.
Instantiate(obj, new Vector3(0f, 0f, 0f), Quaternion.identity);
Как сделать без драг энд дропа? Просто указав нужный префаб в коде. Погуглил, там какие-то костыльные решения из 2010 года
var instance : GameObject = Instantiate(Resources.Load("enemy"));
Есть ли человеческий способ?
>var instance : GameObject = Instantiate(Resources.Load("enemy"));
GameObject go = Instantiate(Resources.Load("enemy"));
то есть все равно надо делать папку resources, пихать в нее префаб и потом загружать таким образом?
просто по имени префаба не найти?
У меня такие костыли но я вообще донный
//Присваивает объект по названию из папки Resources
public GameObject huita = Resources.Load<GameObject>("Huita");
Instantiate(huita, new Vector3(0f, 0f, 0f), Quaternion.identity);
Сап господа геймдевы, возник вопрос, в каком виде хранить диалоги и описания объектов, какие БД лучше использовать? Или лучше парсить самому из txt файликов, или собирать json'ы?мб плагины какие есть для разрабов диалогов?
Используй ScriptableObject. Или тупо префаб, который внутри хранит другие префабы по имени.
У меня есть префаб Weapons. Там, где мне нужен список все префабов оружия, я задаю ссылку на него и уже из него по имени получаю нужный мне префаб.
854x480, 0:03
Запилил объект, который себя двигает и ресетит позицию когда уехал за край.
Потом создаю оба объекта рядом друг с другом (зазора нет).
И получается просвет пикрелейтед. Как чинить?
Создаю рядом
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();
}
}
void ResetPosition() {
transform.position = new Vector3(8f, transform.position.y, transform.position.z);
}
}
Не знаю как это сделать в Юнити (там есть спрайт пакер свой). Но вот как я это делал используя TexturePacker на другом движке:
Extrude repeats the sprite's pixels at the border.
https://www.codeandweb.com/texturepacker/documentation
Либо ты можешь использовать только целые числа для позиции бекграундов.
слабо, я пока еще не знаю как
но проблему решил
float xx = transform.position.x + 8;
transform.position = new Vector3(8f + xx, transform.position.y, transform.position.z);
Костыль
Ты сделал х+16. Я не понимаю, как это могло что-то компенсировать, если у тебя оба изображения по 8 в длину, и ты в резете делал х+8
А, ну ясно. Один раз 16f не равно два раза по 8f. Классика.
Вот за эти вот 8f в приличном обществе лопатой по ебалу бьют.
Запомни: чем меньше у тебя магических чисел в коде, тем больше посоны уважают, быдло боится, а тянки текут.
Ну я тебе просто сразу говорю, чтоб потом не переучиваться и не привыкать заново.
Стиль вырабатывается как раз в первые дни и недели.
Да я знаю, я на гм до этого пилил.
Просто ща я смотрю как работают те или иные методы и не заморачиваюсь для скорости.
Блэд, похоже я выработал привычку делать все переменные public. Похоже, пора резко переучится, пока не стало поздно.
к теме про SerializedField
Сам не так давно переучился. И даже те public-переменные, которые другие классы должны только читать, но не должны менять, делаю через посредника и ебошу get{}
У меня ментальный ступор на свойствах. Простая хуйня, но я постоянно путаюсь в этих трех соснах и в итоге нихуя не работает. Ух, чувствую "выебу себя в очко"(С), когда буду убирать public и ставить свойства. Хотя для моего "проекта" можно оставить всё в виде велосипеда из костылейи слава б-гу.
Ну и нахуя?
Одно дело, когда в переменной хранится ссылка, а другое, когда какой-нибудь интежер. Делать гетсеты для интежеров случайных, когда тебе не нужно каким-то образом их реобразовывать - нахуя?
> У меня ментальный ступор на свойствах
Может просто опыта мало.
>>48069
> Делать гетсеты для интежеров случайных
Для случайных и не надо. А если у меня в объекте уникальный айдишник, который если поменять — всё наебнётся, то нехуй мне его менять из другого класса. Как говорится, смотреть можно, но руками не трогать.
>>Может просто опыта мало
Конечно мало. До сих пор в коде юзаю около 30% херни которую не до конца понимаю. Но мне и не надо, я и не хочу бы программистом
>нехуй мне его менять из другого класса.
А зачем у тебя всё на айдишнике завязано? При создании класса задаёшь айдишник, и больше его не трогаешь.
>Для случайных и не надо
Сам говоришь пабликов бояться, сам говоришь, случайные в покое оставить.
> При создании класса задаёшь айдишник, и больше его не трогаешь
Естественно не трогаешь. Как раз потому через посредника его и расшариваю, чтоб никто не трогал. Но если надо будет его прочитать — всегда пожалуйста.
> Сам говоришь пабликов бояться, сам говоришь, случайные в покое оставить
Никого бояться не надо. Если число нахуй не нужно другим классам — private. Если нужно в полном доступе — public. Если нужно в ограниченном доступе — посредники.
Вот и вся кухня.
>Как раз потому через посредника его и расшариваю
Нахуя его расшаривать вообще? В идеале классы должны лезть только в те классы, которые были из первых классов созданы. Так тебе вообще морочиться с доступом не нужно. А раз ты создал из первого класса второй, то второй безопасно может обращаться в первый, как первый безопасно обращается во второй.
> Нахуя его расшаривать вообще?
Ну например, у меня есть много объектов, среди которых есть пары, определяющиеся одинаковым айдишником. И контроллер как раз для определения пары сравнивает айдишники. Читать для этого он их должен, а вот менять — не должен.
Ну например, я для подобной херни заебошил Dictionary<ID, List<Obj>> Одинаковые объекты суются в один и тот же лист под один айдишник.
Ну это замечательно. А я вот заебошил иначе.
> на собеседовании он выполнил тестовое задание
А не в курсе что за задание хоть было? А то я б тоже куда-нибудь пристроил свою жопу, но понятия не имею что там спрашивают и какие задания дают.
Такая беда: Два монитора, 4к и фулл хд. Если перетащить окошко спрайт эдитора на второй фуллхд монитор, то он сваливает из сраного низкого разрешения, спиздив сраное окошко. Вернуть его не получается, тк это не отдельное окно в винде и перемещение не работает.
Работает сброс лейаута на заводской, но не буду же я каждый раз так делать, он и мои настройки трет. Знает кто-нибдуь решение?
нет, если перетащить с 4к на хд, то окно сваливает за границы, откуда его не достать.
Решил проблему, прицепил эдитор во вкладки панелей.
Собственно есть ли возможность у луча определить пересекается ли он с конкретным объектом или, хотя бы, выдать все объекты, которые он пересекает. Если есть, то как сделать? Если нет, то что можете посоветовать?
>>48234
https://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html
Casts a ray through the scene and returns all hits. Note that order is not guaranteed.
https://www.youtube.com/watch?v=HrDxnMI7pCc
не благодари.
если сам уже не нашёл
GetComponent<Renderer>().material.mainTextureOffset = offset; для унити 5
Старт при первом фрейме, авейк при первом фрейме после создания обекта.
> почему не надо делать паблик
Кто то делает игры, а кто то занимается анальным фистингом называя это инкапсуляцией.
Ты в любом случае рейкастишь, но в случае без слоёв используешь свой собственный фильтр. Если несколько миллиардов подсчётов в апдейт не суёшь, то даже не заметишь, что что-то там подсчитывается
этот дело говорит. повылезают из каменного века со своим программированием, какими-то модификаторами доступа. в 2к18, лол.
качаешь ассеты, хуяришь их на сцену и заебись. ну можно ещё тумана пиздануть чтоб края замылить. и всё, готово.
в следующий раз ещё схему нарисуй в пэйнте. почти всегда помогает.
https://en.wikipedia.org/wiki/Rubber_duck_debugging
у меня вот на столе аниме-фигурка для таких целей!
ти так говоришь будто это не так
эти охуевшие потом своё говно на фуллассетах на сторы льют, потом говорят что они начинающие инди игродел каманды
нет, серьёзно, пока ты, я, анон, кирилл, серега, вот мы все — пока мы сидим на дваче в юнетитреде беспокоиться о чистоте кода, да и вообще качестве своих поделий мягко говоря рановато. делай хуяк хуяк, чтобы было хоть что-то, выдумывают тут блять себе проблемы.
Я вот не могу спокойно программировать, если код мне не нравится.
>This function is called on Colliders marked as Trigger if and only if Physics.queriesHitTriggers is true.
Пригорает с хуйни, что в двух строчках кода ничего не робит.
Если увеличить коллайдер на плитке то всё работает, но это какая-то хуйня и смахивает на костыль.
Через булеаны и если?
> OnTriggerEnter
> Notes: Trigger events are only sent if one of the Colliders also has a Rigidbody attached
Есть риджидбади на плитках?
Не слушай этого, ригидбоди только на игроке должен быть (если конечно они неподвижны)
> ригидбоди только на игроке должен быть
Схуяли? Риджидбади должен быть на любом из объектов, которые будут реагировать на OnTriggerEnter, OnTriggerExit и т.д. На каком именно — вообще похуй.
А так как на игроке, судя по скрину, риджидбади нет, то я потому и спросил есть ли он на плитках.
выдает пустой массив.
Как правильно искать объекты не в сцене?
Или лист со скриптабл обжектами лучше сразу дополнять при инициализации каждого экземпляра?
Лучше положи эти объекты на сцену.
=ДА-ДА, НЕ НАДО УДИВЛЯТЬСЯ!!!=
Хочешь научу класть любой объект на сцену? Просто впихни ссылку и сериализуй её в сцене и хуяк, юнити САМА ВСЁ ЗАГРУЗИТ!!!11111111
РАЗБЕРЁМ НА ПРИМЕРЕ:::
Сначала ПИШЕМ РУКАМИ, ВОТ ЭТА::
class SerGAYsexSIMONOV : MonoBehaviour
{
[SerializeField]
myScriptableObject my33cmDIeCK;
void Awake()
{
my33cmDIeCK.Suck();
}
}
Потом СОЗДАЁМ НА СЦЕНЕ GAYmObject, вешаем скрипт SerGAYsexSIMONOV и в инспекторе просто перетягиваем наш ScriptableObject в поле скрипта SerGAYsexSIMONOV.
ГОТОВО!!!!!11111111)))))
И такое можно проворачивать с ЛЮБЫМ ОБЪЕКТОМ. Все ссылки, которые видит юнити на сцене, она автоматом загрузит.
Только долбоёбы в 2017 году пишут свои загрузчики ассетов. Ровные пацаны ебашут референсы.
На самом деле можно ещё через ассетбандлы, но для тебя сложно будет скорей всего.
======ДОБРА И СВЕТА, ВАШЕМУ ДОМУ!!!======
Какой же я уебан.
Лучше положи эти объекты на сцену.
=ДА-ДА, НЕ НАДО УДИВЛЯТЬСЯ!!!=
Хочешь научу класть любой объект на сцену? Просто впихни ссылку и сериализуй её в сцене и хуяк, юнити САМА ВСЁ ЗАГРУЗИТ!!!11111111
РАЗБЕРЁМ НА ПРИМЕРЕ:::
Сначала ПИШЕМ РУКАМИ, ВОТ ЭТА::
class SerGAYsexSIMONOV : MonoBehaviour
{
[SerializeField]
myScriptableObject my33cmDIeCK;
void Awake()
{
my33cmDIeCK.Suck();
}
}
Потом СОЗДАЁМ НА СЦЕНЕ GAYmObject, вешаем скрипт SerGAYsexSIMONOV и в инспекторе просто перетягиваем наш ScriptableObject в поле скрипта SerGAYsexSIMONOV.
ГОТОВО!!!!!11111111)))))
И такое можно проворачивать с ЛЮБЫМ ОБЪЕКТОМ. Все ссылки, которые видит юнити на сцене, она автоматом загрузит.
Только долбоёбы в 2017 году пишут свои загрузчики ассетов. Ровные пацаны ебашут референсы.
На самом деле можно ещё через ассетбандлы, но для тебя сложно будет скорей всего.
======ДОБРА И СВЕТА, ВАШЕМУ ДОМУ!!!======
Какой же я уебан.
Ну начинай отлавливать где что не так.
Попробуй повесить в тот же скрипт
void OnMouseDown () {
print ("yoba");
}
Если по клику мышкой тебе в консоле что-то выдаст - уже хорошо. Если нет, то проблема не в тех твоих двух строчках.
Не понимаю почему выдает NullReferenceException, если я добавил Laser в инспекторе. Поиск по тэгу приводит к тому же результату. Где я проебался?
Собери своё говно для определения, зажата ли кнопка мыши. Если мышка двигается во время зажатия, то двигай это говно.
А если вместо
> laserWeapon.SetActive(true);
влепить
this.transform.GetChild (3).gameObject.SetActive(true);
тогда норм?
Ну если у тебя даже OnMouseDown не прокатывает, то тут одно из следующего (переводить впадлу):
Make sure the script is attached to the game object you want to be clickable.
Make sure you have an enabled collider
Make sure you have not resized or changed the position of the collider
Make sure there are no other colliders in the way. OnMouseDown() works just like a Raycast()...the first thing hit is what gets the OnMouseDown().
If everything looks okay and it still does not work, delete the object and start over by adding the new object, adding the script...
Тоже самое :(
Потому что игрок будет двигаться, а плитки скорее всего нет (но если да, то и на них надо). А на статичных объектах ригидбоди лишний
Судя по ошибке, он у тебя жалуется на LaserWeapon.Shot (shotSpawn), а не на сам laserWeapon. в ту сторону ковыряй. Может он shotSpawn и не видит.
В принципе поебать, если на префаб плиток повесить риджидбади и хуйнуть isKinematic.
Но по-хорошему да, лучше вешать на игрока. Только вот там висит CharacterController, так что на игроке риджидбади будет так же лишним.
В данном случае shotSpawn мне не нужен и я его не использую. Я не могу понять что с ним нужно сделать что бы он мне мозг не ебал.
Первое делает метод не рабочим, второе тоже не работает. Блятьчтозанахуйсукаятупойблять.
Наговнокодил, чо. Бывает.
Мне вообще кажется странным, как у тебя это устроено. В курсе, что если скрипт прикреплён к объекту, то геймобжект можно по gameObject вызывать?
Как варианты: ты забыл сохранить скрип, нужно перезагрузить юнити, возможно, ты всунул не тот лазер.
так, падажжи, емана
то есть я не смогу собрать себе лист ассетов, если на них нес ссылки из сцены чтоли?
>>В курсе, что если скрипт прикреплён к объекту, то геймобжект можно по gameObject вызывать?
Как это правильно загуглить?
А похуй. Просто поменяю логику игры. Будет у меня спецабилка на Q.
http://docs.unity3d.ru/ScriptReference/GameObject.html
https://docs.unity3d.com/ScriptReference/Component-gameObject.html
Если у тебя есть объект на сцене, и ты лепишь к нему скрипт (через AddComponent, например, или же если скрипт заранее прикреплён), то через transform и gameObject можно вызвать те Transform и GameObject, к которым прикреплён скрипт.
Благодарочка
Получаю ошибку
>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;
void Start () {
spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sprite = icons[Random.Range(0, icons.Length)];
}
public float GetHeight() {
float height = spriteRenderer.bounds.size.y;
return height;
}
ЧЯДНТ?
Получаю ошибку
>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;
void Start () {
spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sprite = icons[Random.Range(0, icons.Length)];
}
public float GetHeight() {
float height = spriteRenderer.bounds.size.y;
return height;
}
ЧЯДНТ?
Засунь детёнышу в Start() print или Debug.Log и посмотри, когда он будет выполняться
>>48637
Риджидбади нет нигде, на персе висит чар контроллер я нуфак и читаю unity in action, не бейте лучше обоссыте. Пробовал вешать и туда и сюда, ничего не меняется.
Суть-то в том что плитки все одинаковые, но на одной триггер не срабатывает, а на другой которая расположена например на 10 пикселей выше - срабатывает, хотя коллайдеры должны пересекаться в обоих случаях.
Да, видимо не успевало создать там че-то.
Вот есть у меня класс Pushka, в котором есть поле (или свойство?) private damage. И вот создаю я класс OhuennayaPushka и наследую его от Pushka, а не от MonoBehaviour. Правильно ли я понимаю, что пока я не сделаю damage публичным (а не приватным, как он сейчас) моя OhuennayaPushka не будет знать что это за дамаг такой?
protected будет "видно" в наследуемых классах, public видно отовсюду, private только из самого класса.
Чмо, пацаны, аниме.
У меня есть карта, состоящая из отдельных гексов, которые сами из чего-то состоят. Как мне весь размер карты найти, чтобы камера не могла сбежать из определённого радиуса от ближайшего гекса?
что за странный вопрос. ты же сам свою карту генерировал, сам и знаешь как из неё извлекать что-то.
Что странного-то? Мне нужно как-то слепить все гексы на карте в одну фигуру и забрать из этой фигуры габариты. Это вообще возможно? Можно, конечно, искать ближайший гекс к текущей позиции камеры, но как-то по-нубски это выглядит.
сам факт вопроса. как будто твой генератор генерирует пустоту, или белиберду в которой ты сам ничего понять не можешь. просто взять минимальные и максимальные позиции вертексов по нужным тебе осям тебе не нравится что-ли?
Это предполагает, что карта прямоугольная. В общем-то так сделать тоже вариант, но я много в каких играх видел, как камера привязана к ближайшей "твёрдой" точке, а не к минимуму и максимуму.
Та не, один-одинёшенек.
Ой, иди на хуй отседова.
Сегодня ты не позаботился о чистоте кода, а завтра городишь проект из костылей, которыми управлять становится невозможно.
https://ru.wikipedia.org/wiki/Технический_долг
Каким образом private или protected чище, чем public? Я-то думал, они разное количество байтов занимают или что-то вроде.
Мать твою ебал.
> Я-то думал, они разное количество байтов занимают или что-то вроде
Велики познания твои, странник.
> Так что, это всё просто затем, что великие умы постановили так делать?
Тебе выше уже давали ссылку на статью про инкапсуляцию. Если ты не можешь её осилить, то у меня для тебя плохие новости.
Ты сам-то понимаешь, нахуя это нужно, ммм? А то сдаётся мне, что ты просто как все делаешь без понимания сути.
> Ты сам-то понимаешь, нахуя это нужно, ммм?
Для защиты данных, прикинь.
Но ты не задумывайся об этом, смотри дальше уроки на ютубчике и двигай ассетики по сцене.
>Для защиты данных, прикинь.
Для защиты от кого, от тебя самого? Ты что, настолько себе не доверяешь, что тебе нужна инкапсуляция, чтобы по соседним классам методы для работы с этим классом не распихивать? Серьёзно?
Ты небось оголённую проводку изоляцией тоже не обматываешь, да? Ну а чё, не доверяешь себе что ли?
Ну ты и кретин. Тебя носом ткнули куда пойти почитать чтобы не завадавать дебильных вопросов. Твое предположение про байтики - вообще оскара стоит. Можно ради лулзов в шапку добавить. Модификаторы доступа нужны для (внезапно) модифицирования доступа. Если ты хочешь унаследовать свойство - protected, если свойство нужно только этому классу или на нем завязано поведение класса - private, если тебе нужно использовать свойство из других классов - public. Место в памяти занимает само свойство, а не модификатор доступа к нему. Опять таки, я описал очень поверхностно и не совсем правильно, пиздуй читать основы блядь программирования, а не строй из себя идиота, но можешь и построить, это-же двач.
Да он тралит просто.
Ооо, мемасы пошли.
>>49224
Тут вопрос не в том, уебёшь ли себя током, а в том, не пойдёт ли ток не по тому проводу. Даже с изоляцией риск будет, так-то.
>>49225
То есть это разделение не несёт прямой практической пользы, а только косвенную (и весьма сомнительную). Всё ясно с вами. А сколько гонору-то, спрашиваешь, тут же начинают "ыыы бля да у нас на раёне за такое убивают!" Вообще охуеть. Лепят и не задумываются, нахуя оно надо.
Но можно ли как-то сделать, чтобы если ты редактируешь объект в кастомном эдиторе, при изменении одного значения, можно было бы автоматом менять и другие, не выходя в плей мод? Пока что я вижу вариант только через кнопку, типа ApplyChanges, нельзя ли как-то на лету? Например я добавляю элемент в лист, и в другом листе у этого-же объекта добавляется определенный другой элемент.
есть там что нибудь типа OnValueChanges() или подобная хурма?
Ага, не признаёт авторитет стариков непререкаемым - значит, ассетики двигает. Да ты совсем тут зажрался. Небось, по 300к в секунду зарабатываешь, да? Молодой успешный специалист в молодой динамично развивающейся компании?
Что ты мне тут своей библией размахиваешь. Лучше прочитай как люди делают игры на самом деле.
https://godotengine.org/article/how-actually-make-your-dream-game
Наоборот, вопрос в том, насколько бы всё было проще. Ты пробовал нормальные кнопки в юнити сделать? Это же кошмар просто. Или эти рейкасты, которые просвечивают сквозь УИ всё под УИ? Вот и лепишь велосипеды с костылями, только бы подальше от стандартного набора фич отбрехаться.
> Вот и лепишь велосипеды с костылями
А ты не лепи, а документацию читай. Методы есть на любой случай жизни, просто о них не знают даже те светлые умы, что на ютубах свои "уроки" ебошат, а сами кроме трансформ и ротейт нихуя не знают.
>А ты не лепи, а документацию читай.
В соседнем треде (или вообще на политаче) про собеседования программистов было такое. Мол, не знаешь хуйни, которой в жизни вообще ни разу не пользовался и не воспользуешься, ведь другие способы и роднее, и лучше - значит, плохой, плохой программист! Зазнались вы, батенька. Вот объективно - плохие ли стандартные фичи юнити? Ну, понятно, что хоть что-то лучше, чем ничего, но всё же.
>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.
> плохие ли стандартные фичи юнити?
А я только про стандартные и говорил. Их до сраки, просто не на поверхности лежат.
> про собеседования программистов было такое. Мол, не знаешь хуйни, которой в жизни вообще ни разу не пользовался и не воспользуешься, ведь другие способы и роднее, и лучше - значит, плохой, плохой программист
Ну собеседования — то отдельная тема. Тут смотря на кого попадёшь. Бывший одногруппник говорил что ему замечание сделали из-за того, что он фигурную скобку с новой строки в коде открывает.
>А я только про стандартные и говорил.
А что, ещё и продвинутые есть? Я как бы про не модифицированные самим пользователем (или велосипеды) фичи говорил.
>Их до сраки, просто не на поверхности лежат.
Например?
Разве НИИ пердуны в 90-х придумавшие анально огораживаться от всего мира инкапсуляцией богатые?
Гора денег на твоем творении никак не выставляет тебя как опытного разработчика а во времена говностартапов это должно быть особенно очевидно. Автор статьи создал опенсорс движок, создал вокруг него сообщество, сделал десяток игр и имеет огромный опыт в игровой индустрии и смежных направлениях. Но для кириллов итт критерием профессионализма программиста конечно являются деньги.
> плохие ли стандартные фичи юнити?
> А что, ещё и продвинутые есть?
Тебе виднее, ты же спрашивал.
> Например?
Недавно вон кто-то (может ты, лол?) лепил здесь велосипед, чтобы обработчик клика мышки срабатывал только тогда, когда курсор не перекрывает UI. Пердолился с рейкастом, определял во что рейкаст упрается, пыхтел и пыжился, а мог бы всего лишь прописать EventSystem.current.IsPointerOverGameObject () и готово. Узнал он об этом слишком поздно, велосипед выбрасывать было уже жалко.
Или вот ещё один тут целый трактор изобрёл для сортировки геймобджектов по расстоянию относительно объекта. Там такое нахуевертил, что глаза болели.
А можно было сделать
IOrderedEnumerable<T> OrderByDistance<T>(T[] array, Vector3 point) where T:Component { return array.OrderBy (x => (x.transform.position - point).sqrMagnitude); }
и пиздец.
Много чего удобного зарыто.
>сделал десяток игр
Если ты не поленишься и решишь загуглить, что он сделал, то увидишь, что он по сути был КОНСУЛЬТАНТОМ ПО ТЕХНОЛОГИИ, а не разработчиком какого-нибудь говна.
МАМ, Я АПИ НАИЗУСТЬ ЗНАЮ, МАМ
Если ты сможешь в пару глав статьи, то будешь менее похож на умственно отсталого.
>обработчик клика мышки срабатывал только тогда, когда курсор не перекрывает UI
Я такой велосипед собрал ещё полгода назад и очень счастлив, что сделал его. Никакой ёбли с юньковским сумасшествием. И весь пердолинг заключался в гугле - и это для меня, который в жизни раньше не программировал. Предпочитать своё удобство юньковским заводским костылям - ну уж извините.
https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html
Посмотри внимательно на это и скажи, кто и в каких условиях мог придумать такой дизайн для определения, UI это или нет под мышкой.
Ну, может быть и не жёсткая, но в целом удобнее воспринимать и УИ, и объекты на сцене, как предметы одного класса.
Ну то уже такое. Ты просил пример, я его привёл. То, что оно тебе не нужно и не привычно — это уже твоё дело.
Кастомный инспектор пиши.
https://unity3d.com/ru/learn/tutorials/topics/interface-essentials/building-custom-inspector
Делаю простые вроде бы вещи:
Есть некий 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 элемента) и делаю на него ссылку еще в одном моно. И вот к моменту ссылки на этот ресурс он УЖЕ может стать каким-то "поломанным"/не валидным и ссылку на него дать нельзя. Возвращаешься к нему в ресурсах, а инспектор при его выделении ничего не показывает. А может и все будет работать пока не запустишь игру и только тогда все слетит. Какой-то полный рандом в этом отношении.
Есть предположения что за..?
это понятно, а как в кастомном инспекторе подхватывать изменения на лету?
Там же только OnEnable есть. Для того, чтобы запустить метод какой нибдуь, надо или туда пихать, или кнопки городить.
можно ли как-то свойство или индексатор сериализовать в кастомном инспекторе?
Нуу всё, можно вкатываться. Наконец-то хоть что-то нормальное добавили
https://youtu.be/Fi9dHD7TTpY
Обновился, пошёл обмазываться.
Ручками для каждого предмета делать не хочу, хочу программно.
Есть инспектор скриптабл обжекта с предметом, есть два спрайта, начальный(для анимации персонажа, то что пойдет ему в руку) и тот, который хочу получить, на него в инспектроре превью прилеплено.
Пытаюсь создать второй спрайт от первого так:
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));
непонятные переменные задаю ползунками пока для наглядности. Ничего не выходит, как обрезать сраный спрайт?
все
Сделай отдельный спрайт-превьюшку и не еби сам себе мозг.
>>49052
А вот и смежный вопрос подъехал.
Допустим, я хочу подсветить границы какого-то поля из гексов, причём только внешние. Как взрослые дядьки это делают? Первая мысль - разделить гекс на 6 "стенок", собрать подсвечиватель, который будет высчитывать, граничит ли гекс стенками с другими гексами из группы, и если нет, то подсвечивать не граничащие стенки.
>хуюнити
>лучший
У моего друга Шалфея есть возражения
Делаю мобильную игру по классической схеме с выбором уровней, которые различаются лишь декорациями/набором противников/доступным оружием (примерно как Angry Birds).
Разумеется нелогично было бы на каждый уровень делать отдельную сцену.
Как лучше организовать сам проект? Я так понимаю, что у меня будет 3 основных сцены: стартовый экран, экран с выбором уровня и сам уровень.
Соответственно, в сцену с уровнем мне нужно будет подгружать параметры: доступное оружие, фоновый спрайт, время и место появления врагов. Как это правильно сделать? Можно ли хранить набор параметров в отдельном массиве в контроллере (или в файле конфига) и при клике передавать в загружаемую сцену? Есть в Юнити какие-то нативные возможности?
Это копия, сохраненная 17 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.