Gamedev

Ответить в тред Ответить в тред
Check this out!
Unity thread #13 Аноним 18/02/21 Чтв 23:12:19 7285041
08400700-c2e3-1[...].jpg 42Кб, 1680x872
1680x872
Unity-Editor.jpg 327Кб, 1910x1152
1910x1152
16134286293750.mp4 2984Кб, 1280x720, 00:00:11
1280x720
16122882823372.webm 34279Кб, 1140x950, 00:01:05
1140x950
Добро пожаловать в тред Unity - лучшего 3D и 2D игрового движка современности!

Прошлый тред: https://2ch.hk/gd/res/698843.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
Аноним 18/02/21 Чтв 23:23:54 7285072
Что следует обработать и обновить в шапке? Мои мысли:
- выпилить упоминание UnityScript, раз его закопали сами разрабы.
- вместо него добавить упоминание Bolt https://unity.com/ru/products/unity-visual-scripting
- почистить список туториалов, добавить новые, убрать устаревшие
- убрать упоминание стартер-китов
- добавить ссылки на сайты с бесплатными ассетами
Аноним 18/02/21 Чтв 23:47:50 7285133
WiNDUP Award-wi[...].mp4 31260Кб, 640x360, 00:09:55
640x360
>>728507
Да можно все убрать и оставить только ссылку на офф.сайт.
Аноним 19/02/21 Птн 01:36:31 7285324
>>728513
Перед УЕчерами стыдно. У них то полноформатная шапка, а у нас огрызок будет. Надо хоть базовую инфу.
Аноним 19/02/21 Птн 09:25:20 7285525
7a30ac17ae53ef3[...].jpg 23Кб, 564x460
564x460
Как делать архитектуру пошаговых игр?
Есть ли альтернатива корутинам?
Аноним 19/02/21 Птн 10:11:58 7285586
>>728552
Я прямо сейчас делаю онлайн пошаговую хрень, использую курутины только для кеширования элементов и эффектов при загрузке сцены.
Если расскажешь более подробно что собираешься делать, обсудим
Аноним 19/02/21 Птн 11:13:02 7285637
>>728552
Машины состояний (у юнитов и контроллера ходов) с обработкой поведения в Update как вариант?
Аноним 19/02/21 Птн 11:47:57 7285678
>>728558
Просто пошаговая игра, надо выполнять произвольные действия по очереди. Например как в JRPG.
Я думаю все на корутинах делать. А у тебя как сделан цикл хода?
у меня как-то так.
while (true) {
var unit = NextUnit();
yield return Turn(unit);
if (GameOver()) yield break;
}
Аноним 19/02/21 Птн 12:25:54 7285769
>>728552
У тебя механика на них? Или просто используешь для прогрузки ресурсов?
В пошаговой игре, где нет риал тайм механик, они практически не нужны. У тебя архитектура должна строиться на последовательном выполнение нужных скриптов, всё другое излишне.
Аноним 19/02/21 Птн 13:02:29 72859610
>>728567
Т.к. у меня работа с сетью то у меня есть центральная точка со всей инфой по игре (грубо говоря GameState) и я в своем GameManager-е подписываюсь на GameStateChange.
На клиентах локально сохраняю чей сейчас ход и когда стейт меняется проверяю что "владелец хода" тоже поменялся.
А разные события через broadcast работают (без сети просто вызываешь какой-нибудь метод с действием).
> if (GameOver()) yield break;
При смене состояния игры прохожусь по условиям победы/поражения и если одно из них подходит - забираю у игроков управление и показываю им окно "поздравляю".
Аноним 19/02/21 Птн 13:52:49 72861311
А кто нить async юзает, заместо корутин? Выглядит не так говнокодисто +манябехевиор не нужен.
Аноним 19/02/21 Птн 13:55:18 72861412
>>728563
>Машины состояний (у юнитов и контроллера ходов) с обработкой поведения в Update как вариант?
кстати, у меня такая реализация - через статик переменные, собранные в одном скрипте - штук 400-500 разных, с проверками в апдейте у каждой карточки.
типа такого
// проверка на сплеш-атаку от огра, смотрим не находится ли этот герой на линии огня
if (MenuBattle.splash_2 == false) { splashTarget_2 = true; } // взводим триггер этого героя, для последующих проверок на доступность сплеш-атаке
if (MenuBattle.splash_2 == true && splashTarget_2 == true) // огр атакует, проверяем положение данного героя, относительно линии огня
{
if ((MenuBattle.p == 1 || MenuBattle.p == 2) && (PosBattle_1.s_1 == 7 || PosBattle_1.s_1 == 8)) { splashTarget_2 = false; AxeSwing(); }
if ((MenuBattle.p == 3 || MenuBattle.p == 4) && (PosBattle_1.s_1 == 9 || PosBattle_1.s_1 == 10)) { splashTarget_2 = false; AxeSwing(); }
if ((MenuBattle.p == 5 || MenuBattle.p == 6) && (PosBattle_1.s_1 == 11 || PosBattle_1.s_1 == 12)) { splashTarget_2 = false; AxeSwing(); }
if ((MenuBattle.p == 7 || MenuBattle.p == 8) && (PosBattle_1.s_1 == 1 || PosBattle_1.s_1 == 2)) { splashTarget_2 = false; AxeSwing(); }
if ((MenuBattle.p == 9 || MenuBattle.p == 10) && (PosBattle_1.s_1 == 3 || PosBattle_1.s_1 == 4)) { splashTarget_2 = false; AxeSwing(); }
if ((MenuBattle.p == 11 || MenuBattle.p == 12) && (PosBattle_1.s_1 == 5 || PosBattle_1.s_1 == 6)) { splashTarget_2 = false; AxeSwing(); }
}
// проверка на сплеш-атаку от гиганта, смотрим не находится ли этот герой на линии огня
if (MenuBattle.splash_3 == false) { splashTarget_3 = true; } // взводим триггер этого героя, для последующих проверок на доступность сплеш-атаке
if (MenuBattle.splash_3 == true && splashTarget_3 == true) // гигант атакует, проверяем положение данного героя, относительно линии огня
{
if (MenuBattle.p == 2 || MenuBattle.p == 4 || MenuBattle.p == 6)
{
if (PosBattle_1.s_1 == 8 || PosBattle_1.s_1 == 10 || PosBattle_1.s_1 == 12)
{ splashTarget_3 = false; SwordSwing(); }
if ((MenuSquad.a8 == 0 && MenuSquad.a10 == 0 && MenuSquad.a12 == 0) && (PosBattle_1.s_1 == 7 || PosBattle_1.s_1 == 9 || PosBattle_1.s_1 == 11))
{ splashTarget_3 = false; SwordSwing(); }
}
if (MenuBattle.p == 8 || MenuBattle.p == 10 || MenuBattle.p == 12)
{
if (PosBattle_1.s_1 == 2 || PosBattle_1.s_1 == 4 || PosBattle_1.s_1 == 6)
{ splashTarget_3 = false; SwordSwing(); }
if ((MenuSquad.a2 == 0 && MenuSquad.a4 == 0 && MenuSquad.a6 == 0) && (PosBattle_1.s_1 == 1 || PosBattle_1.s_1 == 3 || PosBattle_1.s_1 == 5))
{ splashTarget_3 = false; SwordSwing(); }
}
}
// проверка на сплеш-атаку от дракона, смотрим не находится ли этот герой на линии огня
if (MenuBattle.splash_4 == false) { splashTarget_4 = true; } // взводим триггер этого героя, для последующих проверок на доступность сплеш-атаке
if (MenuBattle.splash_4 == true && splashTarget_4 == true) // дракон атакует, проверяем положение данного героя, относительно линии огня
{
if (MenuBattle.p <= 6 && PosBattle_1.s_1 > 6) { splashTarget_4 = false; FireWind(); }
if (MenuBattle.p > 6 && PosBattle_1.s_1 <= 6) { splashTarget_4 = false; FireWind(); }
}
и таких штук проверок 30-40 в каждой карте


вопрос насколько сильно нагружают систему постоянные прогоны по условиям в апдейтах 30 объектов?
Аноним 19/02/21 Птн 15:14:06 72864113
Аноним 19/02/21 Птн 15:29:31 72864514
Аноним 19/02/21 Птн 15:36:05 72864915
>>728614
Если ты не делаешь GetComponents в каждом кадре, то это вообще фигня, 30 юнитов? твой телефон миллионы операций в секунду делает, 30 юнитов для пк меньше мухи.
Я бы посоветовал тебе комменты ставить или описывать что такое ==1, а что такое .p или _3 т.к. если возмешь паузу на месяц в разработке, потом сложно вспомнить что это за секретные названия и цифры.

>>728613
Я юзаю, очень счастлив, только для WebGL пришлось немного потанцевать
Аноним 19/02/21 Птн 15:50:45 72865416
>>728649
>Я юзаю, очень счастлив
Покажи какой-нибудь минимальный пример.
Аноним 19/02/21 Птн 16:01:53 72865917
>>728576
>В пошаговой игре, где нет риал тайм механик, они практически не нужны
>У тебя архитектура должна строиться на последовательном выполнение нужных скриптов
Как ты поймешь когда надо выполнять следующий скрипт-то?
В корутинах это из коробки все есть. Когда yield return закончился, значит закончилось старое действие, можно выполнять новое.
Аноним 19/02/21 Птн 16:10:40 72866218
Аноним 19/02/21 Птн 16:17:06 72866419
external-conten[...].jpg 62Кб, 1280x720
1280x720
>>728614
>if ((MenuBattle.p == 1 || MenuBattle.p == 2) && (PosBattle_1.s_1 == 7 || PosBattle_1.s_1 == 8)) { splashTarget_2 = false; AxeSwing(); }
это у тебя обработка интерфейса?
Аноним 19/02/21 Птн 16:21:05 72866620
20210219160207.jpg 10Кб, 360x74
360x74
WQXl9ufeViE.jpg 8Кб, 283x34
283x34
D5vo-7Vqqk.jpg 18Кб, 691x35
691x35
Мб тут кто-то поможет. Только начал вкатываться в юнити и столкнулся с тем, что за гранью моего понимания.
Нахожу GameObject на сцене (1 строчка на 1 скрине). И проблема в том, что у меня это происходит в Update. Соответственно чтобы каждый кадр не искать его, я закинул это в If. В следствие чего GameObject стал локальным. То есть за пределами If не получится использовать. Тогда я в классе, в самом начале добавил строчки как на втором скрине, то есть объявил глобальные. В итоге мне Юнити выдал кучу ошибок (3 скрин). Я понимаю что там говорят прописать объявление в Start. Но когда я их туда вставляю, ошибки остаются.
Мб кто знает что я не так делаю, потому что я уже даже хз что гуглить. Буду благодарен за помощь
Аноним 19/02/21 Птн 16:24:16 72866721
>>728666
Вставь строчки на втором скрине внуть класса.
Аноним 19/02/21 Птн 16:24:46 72866822
>>728613
async не пойдет для написания игровой логики, т.к. таски по умолчанию выполняется в пуле тредов. это нужно люто велосипедить чтобы сделать из асинка аналог корутин
Аноним 19/02/21 Птн 16:27:39 72867223
>>728666
А зачем создаешь их ?
оставь просто
GameObject One;
GameObject Two;
Аноним 19/02/21 Птн 16:27:51 72867324
>>728667
>>728666
То есть, сделай так
public class TvoiClass : MonoBehaviour{

public GameObject One;
public GameObject Two;

Не пиши у них = new.
Аноним 19/02/21 Птн 16:29:07 72867425
>>728666
Зачем ты пытаешься создать новый GameObject, если тебе надо найти уже существующий?
вставь GameObject.Find в Start(), а переменную объяви как поле класса
Аноним 19/02/21 Птн 16:36:34 72868126
>>728668
>таски по умолчанию выполняется в пуле тредов
Можно поподробнее плиз, в чем подводные камни этого?
Юнити зажует?
Аноним 19/02/21 Птн 16:41:17 72868727
>>728659
>Как ты поймешь когда надо выполнять следующий скрипт-то?
Не знаю как у тебя реализовано, но если это что-то пошаговое, то у тебя в мэйн скрипте битвы/карты/или чего-угодно, есть список объектов которые вызываются. У каждого объекта также есть свои функции, в том числе по нажатию действия связанного с ним, которые вызывают след функции, к примеру проверку не изменилась ли последовательность объектов в списке из-за изменения какой-нибудь характеристики.
Бля тут можно целое полотно писать как устраивать архитектуру чего-то пошагово.

>В корутинах это из коробки все есть. Когда yield return закончился, значит закончилось старое действие, можно выполнять новое.
Реализовывай как ты хочешь, но держи в уме, что это не правильная и не оптимальная реализация пошаговой игры(либо той где нет риалтайм механик).
Аноним 19/02/21 Птн 16:45:46 72869128
>>728681
юнити однопоточный и все изменения объектов надо производить из одного треда, из того, в котором выполняются Start(), Update(), корутины и т.д.

после await в async методе ты можешь внезапно обнаружить, что метод продолжается уже в другом треде.
там очень геморройно это все, надо знать внутреннее устройство асинка, чтобы не выстрелить себе в ногу. лучше корутины.
Аноним 19/02/21 Птн 16:45:50 72869229
welp.png 25Кб, 1000x420
1000x420
>>728654
Ну ок, смотри..
Еще можно написать свой или взять готовый авейтер фреймов, делаю так в "тяжелой" логике, чтобы код выполнялся не в 1 тик, а за 5, так не заметно просадок фпс-а, аналог yield return null;

>>728681
Если неправильно сконфигуришь таску, то начнешь получать ошибки "you can't move object from different threads".
Эту же ошибку получишь если создашь сам новый тредик и попытаешься взаимодействовать с юнити апи
Аноним 19/02/21 Птн 16:59:14 72869930
>>728691
>>728692
ну ясно спс, не то чтобы я использовал корутины в игровой логике, предпочитаю апдейт корутине всегда
Аноним 19/02/21 Птн 16:59:58 72870031
>>728692
>Ну ок, смотри..
Спс
Аноним 19/02/21 Птн 17:09:01 72870432
>>728673
>>728672
Я так делал, ошибки не исчезают. Подумал что неправильно объявляю, решил создать пустой. В общем так же остается все, не помогает
>>728674
Да у меня там после каждого клика перемещается по иерархии объект, в итоге каждый раз надо искать в разных местах.
Аноним 19/02/21 Птн 17:16:10 72870733
>>728704
>Да у меня там после каждого клика перемещается по иерархии объект, в итоге каждый раз надо искать в разных местах.
ты его удаляешь и создаёшь новый чтоль? можно же просто перемещать и при этом в коде ссылка на него будет та же самая
Аноним 19/02/21 Птн 17:20:02 72871034
>>728704
??
выложи скрипт весь тогда, чето ты мутишь там
Аноним 19/02/21 Птн 17:34:43 72871435
>>728667
>>728672
>>728673
>>728674
>>728707
>>728710
Все спасибо. Все починилось простым перезапуском компа. Хотя до этого юнити писал что даже запустить нельзя игру, потому что ошибки компиляции.
Аноним 19/02/21 Птн 17:37:19 72871536
>>728699
>предпочитаю апдейт корутине всегда
просто ты не делал пошаговые игры.
Аноним 19/02/21 Птн 17:39:03 72871637
А с помощью async как реализовать Update, чтобы выполнялось каждый фрейм?
Аноним 19/02/21 Птн 17:39:46 72871738
>>728715
при чем здесь пошаговые игры?
Аноним 19/02/21 Птн 17:47:58 72871839
>>728716
через кастомный awaiter только.
итераторы (корутины) и асинк внутри по разному устроены. чтобы продолжить итератор, надо просто вызвать MoveNext(). в асинк на месте await генерируется callback с продолжением, который передается в awaiter и это уже обязанность awaiter'а вызвать этот каллбек и продолжить функцию.
Аноним 19/02/21 Птн 17:57:40 72871940
>>728649
> то это вообще фигня
отлично, а то это немного беспокоило
> комменты ставить или описывать что такое ==1, а что такое .p или _3
это просто номера позиций на поле от 1 до 12, но комменты нужны это да..
>>728664
>это у тебя обработка интерфейса?
сначала проверка, не находится ли атакуемый юнит PosBattle_1.s_1 в ячейке 7 или 8 напротив выбранной(атакующей) карты MenuBattle.p в ячейке 1 или 2, если да - то сразу отрубаем триггер splashTarget_2 чтобы отсечь повторный вызов кода и выписываем этой карте урон в методе AxeSwing()
Аноним 19/02/21 Птн 19:51:57 72872441
А что, корутины есть только в юнити, в ванильном шарпе их нет?
Аноним 19/02/21 Птн 22:00:46 72874842
Otori.Kohaku.fu[...].png 1447Кб, 2000x2865
2000x2865
>>728507
В шапку следует добавить аниме-девочку Unity-chan. Без аниме-девочки тред не тред, игры не игры, движок не движок. Как у тебя вообще рука поднялась убрать её из шапки? Зато гадости какие-то добавил. Зачем?
Аноним 20/02/21 Суб 00:30:03 72878143
Сап геймдевы
Начал читать книгу Юнити в действии, там начинают рассматривать проект Unity Car Example, который несовместим с новой версией. Подскажите похожий проект чтоб по нему учить, или более новую книгу что ли...
Аноним 20/02/21 Суб 00:31:11 72878244
>>728781
Какой год издания книги?
Аноним 20/02/21 Суб 00:31:47 72878345
>>728782
2019
хотя в книге какого то хера используется юнити 2017 года
Аноним 20/02/21 Суб 00:37:17 72878446
unity Learn - годная тема? Можно обойтись только ею?
Аноним 20/02/21 Суб 00:47:39 72878547
>>728781
>>728784
Смотри - сейчас идёшь на https://www.youtube.com/playlist?list=PLX-uZVK_0K_6JEecbu3Y-nVnANJznCzix и смотришь все видео по порядку. Там всё подробно разжёвывается с самых основ, плюс работает на современной версии юнити. Если не знаешь английского - похуй, код и действия в редакторе юнити всё равно говорят больше, чем трындёж на фоне. Или можешь любой другой его плейлист взять - https://www.youtube.com/c/inScopeStudios/playlists
Аноним 20/02/21 Суб 00:51:15 72878648
Otori.Kohaku.fu[...].png 392Кб, 1026x801
1026x801
>>728748
Вот самый лучший и ламповый её арт.
Аноним 20/02/21 Суб 01:29:37 72879049
>>728504 (OP)
заметил, что если не присваивать переменным значения, а оставлять в виде
int a;
bool y;
то по умолчанию будет считаться, что а == 0, y == false
сейчас прочитал, что так делать нежелательно и надо самому присваивать значения, вопрос нахуя, раз программа сама предусматривает такой вариант?
Аноним 20/02/21 Суб 04:25:08 72880450
>>728790
>заметил
Ты новичок в программировании, да?

>то по умолчанию будет считаться, что а == 0, y == false
Не всегда, только если произошла правильная инициализация нулями (false == 0).

>так делать нежелательно и надо самому присваивать значения
Именно так. Тому несколько причин:
1. Ты не можешь знать наверняка, какие значения будут в не инициализированных переменных. Это зависит от множества причин, и лучше подстраховаться, чтобы потом не ловить неуловимые и непонятные баги.
2. Для читабельности кода лучше явно написать, что y = false, это будет понятнее и проще для чтения, чем просто объявление переменной. Ты явно говоришь: здесь точно false, а не какое-то другое значение.
3. Если ты в будущем будешь править код и ВНЕЗАПНО потребуется поменять начальное значение переменной на любое другое, тебе придётся ввести присваивание значения. Если оно у тебя уже есть, ты только поменяешь число и всё.

Может ещё что-то есть, не знаю.

В общем, нет смысла экономить символы. Ты ведь быстро печатаешь? Вот и печатай, полезно будет.
Аноним 20/02/21 Суб 08:55:58 72881451
>>728659
Поставь в сцену пустой геймобжект. Прикрепи к нему скрипт с названием GameManager. Управляй последовательностью вызовов методов внутри этого класса. Например, будет функция MakeNextTurn(), которая вызывает свои MakeNextTurn () для всего списка активных игровых персонажей. Если персонаж должен узнать, может ли он идти вверх, он запрашивает функцию IsTyleFree(x, y) у GameManager-a.
Можно либо у каждого персонажа прописывать ссылку на объект GameManager, либо внутри класса GameManager создать static переменную instance и хранить там ссылку на this. Внутри любых классов можно получить доступ к публичным методам геймменеджера через запросы вроде GameManager.instance.IsTyleFree(x, y). Да, так у тебя получается глобальный суперкласс и лучше при любой возможности выбирать альтернативу запросам вида GameManager.instance.Blablabla(), но в большинстве случаев будет получаться самый простой и понятный код. В целом этот правильно все пояснил >>728687. Нахуй всякие короутины.
Альтернативно можно использовать события, обработчики событий с делегатами и прочим. В Юнити это не очень удобно, требует много дополнительного кода. Но для сложной надёжной системы лучше использовать их. У тебя же вряд ли суперсложная система. Поэтому пихай глобальную игровую логику в GameManager и не еби мозг.
Аноним 20/02/21 Суб 09:33:30 72881852
>>728804
На самом деле все проще. Иницилиазируются нулями только поля класса, но не локальные переменные. C# просто не скомпилируется, если попытаться прочитать неиниц. локальную переменную
Аноним 20/02/21 Суб 09:57:01 72882153
>>728818
чего...
все он запустит, тут отличие в разных типах (классы и структуры).
Классы хронятся в куче и если ты сделал YourClass well; внутри метода
то тогда будет ошибка компилятора т.к. объекта по факту еще нет, а YourClass well = null; будет работать, просто получишь ошибку в игре.
С другой стороны есть структуры, они хранятся в стеке и когда ты создаешь переменную YourStruct woo; то объект уже будет создан в стеке, но все значения будут дефолтными (например int дефолтный = 0).

>>728790
Всегда все нужно прописывать чтобы тебе самому было проще понять читая код и именно так, чтобы ты смог понять этот код спустя годы.
Аноним 20/02/21 Суб 10:30:54 72882754
finalfantasy1nes.jpg 138Кб, 1234x1080
1234x1080
>>728814
Ты видимо не понимаешь проблемы. Проблема пошаговых игр в синхронизации действий.
Например, в самом простейшем случае есть цикл из таких действий: выбрать действие из меню, выбрать цель для этого действия, показать анимацию атаки. Как ты определишь какое сейчас действие, и что именно сейчас нужно показать меню и обновлять интерфейс меню.

Классический способ это делать через машины состояний. Получается запутанный код. Корутинами можно писать код просто последовательно.
Аноним 20/02/21 Суб 10:32:56 72882855
>>728827
Просто каллбеками это не сделаешь. Каллбек выполняется сразу в одном фрейме, а действие может длиться несколько кадров.
Аноним 20/02/21 Суб 10:35:48 72882956
>>728828
Почему нет? Сохраняешь ссылку на коллбек и когда условие подходит выполняешь его. Так весь мир веба живет уже 20 лет
Аноним 20/02/21 Суб 10:38:11 72883157
>>728804
>потом не ловить неуловимые и непонятные баги.
>>728821
>Всегда все нужно прописывать
тут вопрос - почему компилятор сразу не выдает ошибку и игра продолжает работать на этих дефолтных значениях без вылетов. чтобы потом при каком-то неочевидном событии внезапно навернуться? Зачем вообще оставлять возможность запуска кода с переменными без значений? Ладно еще у меня проект небольшой и ясейчас все переназначу
Аноним 20/02/21 Суб 10:52:14 72883358
>>728831
>почему компилятор сразу не выдает ошибку
потому что он выдает
Аноним 20/02/21 Суб 10:55:01 72883459
>>728829
потому что условно говоря для одного действия нужно вызывать UpdateAction1() каждый кадр, а для другого действия UpdateAction2()
Аноним 20/02/21 Суб 11:01:53 72883560
>>728821
Еще вопрос по статик переменным - пишут, что нежелательно их повсеместно использовать. Типа к ним доступ отовсюду и кто-угодно может их изменять.
Ну, дык я поэтому их и использую, блять! Есть им хоть какая-то адекватная альтернатива, хотя бы наполовину такая же простая? Чтобы из скрипта любого объекта можно было мгновенно получать значение нужной переменной?
Вообще прихуел, как сложно в юнити запустить метод в скрипте, висящем на другом объекте или получить из него значение переменной. Типа создайте public GameObject x; и добавьте в инспекторе нужный объект к скрипту которого нужен доступ..Пиздец. У меня 60 объектов которые друг с другом взаимодействуют, мне их все друг к другу добавлять? И часть из них будет удаляться с поля в процессе игры, при этом оставаясь в ссылках других объектов и в перспективе приводя к внезапным вылетам. Охуеть просто
Аноним 20/02/21 Суб 11:06:53 72883661
>>728833
нет, не выдает. например, у меня в коде
private bool bonusDefense;
прекрасно работает даже если ее не присвоить, нет никаких вылетов или ошибок - просто считает что bonusDefense == false
Аноним 20/02/21 Суб 11:08:51 72883762
>>728836
не инициализируются только локальные переменные функций. попробуй использовать переменную без значения в функции.
Аноним 20/02/21 Суб 11:12:36 72883863
>>728835
это советы для продвинутых. если ты не понимаешь почему это плохо, то и не поймешь преимущества от неиспользования глобальных переменных.
используй не бойся!
Аноним 20/02/21 Суб 11:20:15 72884064
>>728837
Ну, вот в исполняемом скрипте:

private int SSS;

public void PressButton()
{ SSS += 1; Debug.Log("SSS"); }

создал переменную без значения, нажатием кнопки вызываю метод - все работает
как надо, чтобы выдало ошибку?
Аноним 20/02/21 Суб 11:23:59 72884165
>>728840
ты вообще знаешь что такое локальная переменная
когда создается новый объект в C# память под него заполняется нулями. поэтому все поля класса инициализированы нулями.
Аноним 20/02/21 Суб 11:25:19 72884266
>>728838
не, я понимаю, что в большом проекте, над которым работает много людей это приведет к пиздецу, т.к. статик переменные может случайно и очень просто поменять любой. кто имеет доступ к проекту и все навернется.
Аноним 20/02/21 Суб 11:28:16 72884567
>>728841
>локальная переменная
все понял, у меня нет локальных переменных - все задается в самом верху скрипта и работает без проблем. но учту на будущее, где тут засада
Аноним 20/02/21 Суб 11:36:31 72884768
>>728835
В интырпрайзе очень любят делить ответственность и чтобы разные мелкие куски кода взаимодействовали используют инъекцию зависимостей привет солид.
Допустим сейчас ты делаешь YourClass.staticInstance.YourMethod();
А якобы по правильному в методе Start или Awake вызвать FindObjectOfType<YourClass> и сохранить ссылку, потом напрямую дергать методы. Еще юнити дает тебе возможность соединять их через инспектор, но это как-то рутинно.
якобы т.к. в твоем проекте это может быть усложнением, а не правильным решением.
>>728831
> почему компилятор сразу не выдает ошибку
Внутренние тонкости шарпа, в каких-нибудь плюсах ты бы сделал int* const myIntVal = malloc(32); или какая-то такая херь, тут просто делаешь int myIntVal;
Если тебя это беспокоит то можешь поставить себе styleCop (или другой аналог), он будет подчеркивать все места и говорить "ой, а проставьте значение, а то рискуете ошибку получить".
>>728834
Можно же на кастрюлить чтоб действия не вызывались пока калл-бек не дернули, но с другой стороны это опасно т.к. если этот калл-бек где-нибудь потеряешь - вся логика игры обрушится.
Аноним 20/02/21 Суб 11:48:04 72884869
image.png 61Кб, 540x129
540x129
Мб кто знает в чем дело. Делаю лего игру. Написал в Update все со скрина. В итоге объект не двигается, а просто на месте трясется. Чекал через Лог, все норм, каждый кадр выдает, но при этом координата рандомно меняется от-0.1 до +0.1. то есть просто сотые рандомно прибавляются и вычитаются, в следствие этого кубик просто прыгает. Мб это из-за того что лего игра и там у кубиков что-то не так рабоатет
Аноним 20/02/21 Суб 11:49:22 72884970
>>728827
Приведу самую грубую и простую реализацию для твоего скрина.
При старте геймменеджера создаются игровые персонажи или передаются на них ссылки, если они созданы ранее в другом месте. У тебя получается список героев List<Hero> heroes. Создаешь переменную currentHeroId = -1. В конце инициализации геймменеджера запускаешь функцию:
MakeNextHeroTurn() {
currentHeroId++;
if (currentHeroId >= heroes.Count)
FinishHeroesTurn();
else
heroes[currentHeroId].MakeTurn();
}

Допустим действие хиро заключается в выборе игрока из предложенного меню.
Тогда в классе Hero функция MakeTurn() будет выглядеть в виде вызова ShowActionMenu(). К кнопкам в меню прикреплены обработчики событий OnClick(). На выбор атаки, например, будет вызываться GameManager.AttackClick() {
ShowTargetMenu();
}

К кнопкам в меню цели также прикреплены обработчики и вызывается функция:
GameManager.ChooseTargetAndAttack(int targetId) {
int dmg = heroes[currentHeroId].CalcAttackDmg(enemies[targetId]);
heroes[currentHeroId].AnimateAttack();
enemies[targetId].TakeDamage(dmg);
enemies[targetId].AnimatePain();
}

Тебе надо обновить UI после завершения анимации атаки и переключиться на следующего героя. Внутри класса Hero при завершении анимации запускается обработчик:

Hero.OnAnimationFinish() {
GameManager.instance.UpdateUI();
GameManager.instance.MakeNextTurn();
}
Аноним 20/02/21 Суб 11:53:22 72885171
>>728842
>статик переменные может случайно
нет, это глобальная переменная это лишняя зависимость. если потом условия поменяются и надо будет переписывать код, то это будет непросто, потому что у тебя по всему коду зависимости от глобальной переменной. это делает архитектуру кода негибкой.
поэтому хорошей практикой является инкапсулировать все состояние внутри компонентов, чтобы можно было просто заменить компонент.
Аноним 20/02/21 Суб 11:53:34 72885272
>>728848
а что за условие ii == 0?
а чему равно t?
может твой куб уже на месте?
вот тебе пример по проще как двигать куб прямо:
One.transform.position = One.transform.position + One.transform.forward * Time.deltaTime;
Аноним 20/02/21 Суб 11:58:45 72885473
>>728847
>в твоем проекте это может быть усложнением, а не правильным решением.
Да, спасибо. Я к этому в итоге и пришел - пусть немного через жопу, но в случае маленького проекта вполне допустимо, поэтому делаю как проще пока. К тому же я один и могу более-менее контролировать процесс
>Если тебя это беспокоит то можешь поставить себе styleCop (или другой аналог),
Просто у меня были переменные, которые должны были получать значение в процессе игры, а до этого оставаться "пустыми" - без значений. Но в один неприятный момент, я заметил, что у них уже есть значение по умолчанию - 0 и false. Подумал, что это такая удобная фишка для экономии времени и начал ей пользоваться, лол. В общем, оказалось, что это не фишка..
Аноним 20/02/21 Суб 12:09:00 72885574
>>728851
>коду зависимости от глобальной переменной. это делает архитектуру кода негибкой.
Да, буквально вчера это заметил, когда сделал переход в главное меню после окончания игры. При заходе на уровень все объекты уже занимали прописанное в статик переменных места с прошлой игры.
Но это побочный эффект удобства статических переменных и я пока готов с ним мериться - могу присваивать им стартовые значения при выходе в меню.
Хотя хотелось бы иметь волшебную команду, которая возвращала бы все исходные значения статических переменных к начальным, одной строчкой кода. Такая возможность существует или придется делать откат вручную по каждой отдельно?
Аноним 20/02/21 Суб 12:16:07 72885675
>>728855
>волшебную команду, которая возвращала бы все исходные значения статических переменных к начальным,
т.е. как бы рестарт игры, но без фактического перезапуска , а просто сбросом параметров на начальные
Аноним 20/02/21 Суб 12:25:19 72885776
>>728848
ты b присваиваешь значение, он прыгает в него и скачет на месте. отклонения +0.1 -0.1 из-за того что координаты задаются через float. если бы координаты задавались через int - он бы стоял без дерганий
в общем тебе надо что -то вроде b += new Vector3(0,5,0)
тогда будет постоянный прирост величины, а не разовый скачек в одну точку
Аноним 20/02/21 Суб 12:28:36 72885877
>>728852
>а что за условие ii == 0?
Условие нужно чтобы когда он дойдет до нужной точки, я переменной другое значение присвоил бы и пошел бы в другой цикл, но из-за того что он не двигается, ничего не получается

>а чему равно t?
Просто скорость 1f, я пытался до этого через Lerp делать, там он тоже трясся, но телепортировался сразу на значение скорости, хотя все в update

>может твой куб уже на месте?
Не, я через дебаг координаты сверял каждый кадр, он вообще не двигается почти, только на сотые туда сюда
>One.transform.position = One.transform.position + >One.transform.forward * Time.deltaTime;
Мне не совсем подходит команда мне нужно до конкретной точки
Аноним 20/02/21 Суб 13:14:53 72886178
>>728857
Инт не помог, все равно дергается и не перемещается.
>тогда будет постоянный прирост величины, а не разовый скачек в одну точку
Так я же не просто позишн новый задаю, я использую MoveTowards. Там как раз таки должно в update покадрово из точки А в точку Б идти.
Аноним 20/02/21 Суб 14:02:32 72887379
>>728861
с плавным перемещением из точки в точку достаточно большой гемор, я нашел для своей 2д игры два способа: один только для перемещения строго по осям. у второго тоже какой-то косяк, уже не помню.
вот тут мои заметки для себя, может помогут

плавное перемещение в точку координат

для UI

if (Vector3.Distance(new Vector3(10f, 0f, 0),GetComponent<RectTransform>().localPosition) > 0.1f) // изначально объект не должен иметь смещения по y, z. иначе условие не будет выполнено
// и объект не остановится, из за наличия дистанции по y или z!
GetComponent<RectTransform>().localPosition += (new Vector3(0.1f, 0f, 0) 30 Time.deltaTime);

-----
для объекта: https://forum.unity.com/threads/c-how-to-use-time-deltatime-to-move-object-smoothly.307197/

public Vector3 increaseValues = new Vector3(0.1f, 0.1f,0);
public Vector3 targetPosition = new Vector3(0.26f, 0.35f,0);

void Update()
{

if(Input.GetKey(KeyCode.Mouse1))
{
if(Vector3.Distance(targetPosition, transform.position) > 0.2f)
transform.localPosition += increaseValues Time.deltaTime;
}
else
{
if(Vector3.Distance(new Vector3(0,0,0), transform.position > 0.1f)
transform.localPosition -= increaseValues
Time.deltaTime;
}
}

---
через Lerp

public Vector3 targetPosition = new Vector3(0.26f, 0.35f,0);
public float speed;

void Update()
{
if(Input.GetKey(KeyCode.Mouse1))
{
transform.localPosition = Vector3.Lerp(transform.localPosition, targetPosition, Time.deltaTime speed);
}
else{
transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0,0,0), Time.deltaTime
speed);
}
}

пример
if (MenuSquad.a5 == 1 && (Vector3.Distance(new Vector3(-300f, -100f, 0f), GetComponent<RectTransform>().localPosition) > 1.0f))
{ GetComponent<RectTransform>().localPosition = Vector3.Lerp(GetComponent<RectTransform>().localPosition, new Vector3(-300f, -100f, 0f), Time.deltaTime 1.3f ); s = 5; }
//Vector3.Lerp(transform.localPosition, targetPosition, Time.deltaTime
speed);
Аноним 20/02/21 Суб 14:05:19 72887480
>>728873
чет знаки умножения везде проебались, что за дичь?
Аноним 20/02/21 Суб 14:07:22 72887681
>>728874
еще раз

плавное перемещение в точку координат

для UI

if (Vector3.Distance(new Vector3(10f, 0f, 0),GetComponent<RectTransform>().localPosition) > 0.1f) // изначально объект не должен иметь смещения по y, z. иначе условие не будет выполнено
// и объект не остановится, из за наличия дистанции по y или z!
GetComponent<RectTransform>().localPosition += (new Vector3(0.1f, 0f, 0) 30 Time.deltaTime);

-----
для объекта: https://forum.unity.com/threads/c-how-to-use-time-deltatime-to-move-object-smoothly.307197/

public Vector3 increaseValues = new Vector3(0.1f, 0.1f,0);
public Vector3 targetPosition = new Vector3(0.26f, 0.35f,0);

void Update()
{

if(Input.GetKey(KeyCode.Mouse1))
{
if(Vector3.Distance(targetPosition, transform.position) > 0.2f)
transform.localPosition += increaseValues Time.deltaTime;
}
else
{
if(Vector3.Distance(new Vector3(0,0,0), transform.position > 0.1f)
transform.localPosition -= increaseValues
Time.deltaTime;
}
}

---
через Lerp

public Vector3 targetPosition = new Vector3(0.26f, 0.35f,0);
public float speed;

void Update()
{
if(Input.GetKey(KeyCode.Mouse1))
{
transform.localPosition = Vector3.Lerp(transform.localPosition, targetPosition, Time.deltaTime speed);
}
else{
transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0,0,0), Time.deltaTime
speed);
}
}

пример
if (MenuSquad.a5 == 1 && (Vector3.Distance(new Vector3(-300f, -100f, 0f), GetComponent<RectTransform>().localPosition) > 1.0f))
{ GetComponent<RectTransform>().localPosition = Vector3.Lerp(GetComponent<RectTransform>().localPosition, new Vector3(-300f, -100f, 0f), Time.deltaTime 1.3f ); s = 5; }
//Vector3.Lerp(transform.localPosition, targetPosition, Time.deltaTime
speed);
Аноним 20/02/21 Суб 14:10:37 72887882
>>728876
блеать, куда знаки умножения исчезают? пиздец какой-то
в общем между Time.deltaTime и speed, Time.deltaTime и числами нужно умножение вставить.
Аноним 20/02/21 Суб 14:26:34 72888183
Аноним 20/02/21 Суб 14:29:50 72888384
>>728504 (OP)
Есть аниматор контроллер с кучей состояний idle-walk-run-jump-fall и т.д. Как этот уже готовый автомат использовать для создания контроллера персонажа? В сети есть пара статей на эту тему, но без конкретного примера мне сложно сообразить.
Аноним 20/02/21 Суб 14:34:14 72888685
>>728881
да, вспомнил:
в первом примере, который по осям - возможен проскок конечной точки, если скорость очень большая (можно прописать страховку - если координаты начинают уходить дальше - сразу перемещать объект назад в конечную точку)
во втором примере, движение нелинейное. быстрое вначале, замедление к концу
оба варианта ебанутые, не понимаю почему в движке нет вшитой функции для таких распространенных задач
Аноним 20/02/21 Суб 14:40:28 72888986
>>728886
>во втором примере, движение нелинейное. быстрое вначале, замедление к концу
Да я уже тут про сравнение MoveTowards и Lerp все прочитал.

>оба варианта ебанутые, не понимаю почему в движке нет вшитой функции для таких распространенных задач
Согласен, точнее функции есть, но почему то работают так криво
Аноним 20/02/21 Суб 15:36:23 72890487
>>728827
У меня появилась гениальная идея как сделать машину состояния на юнити-объектах.
У них же есть сообщения OnEnable(), OnDisable(), которые можно использовать для входа и выхода из состояния и они обновляются только когда активны.

Объявляем массив GameObject-ов и добавляем в него объекты со своими состояниями. На объекты добавляем компонент, в котором пишет логику состояния.
Храним ссылку на текущий объект-состояние и выключаем его при переходе на новое состояние. Ищем объект по имени состояния и включаем его.

Гениальное в своей простоте решение! Бонусом получаем возможность указывать свойства состояния в инспекторе.

Дарю вам эту идею. Не благодарите.
Аноним 20/02/21 Суб 16:15:14 72891688
ну вот, перекатили тред, тред вылез на главную из днища, и за пару дней уже целое полотно постов
Аноним 20/02/21 Суб 18:11:19 72895989
>>728748
У неё хотя бы хуец есть?
Аноним 20/02/21 Суб 18:43:57 72896790
>>728916
Так тред не видят 90% людей, когда он утонул, и никакого обсуждения из-за этого.
Аноним 20/02/21 Суб 18:46:55 72896891
>>728967
а что тут обсуждать? тут одни ньюфаги. ювелиров юнити не осталось.
Аноним 20/02/21 Суб 18:48:17 72896992
>>728968
Пф.. вот я не ньюфаг, но треда не вижу и не захожу, а сейчас увидел на странице, и зашёл.
Аноним 20/02/21 Суб 18:52:45 72897093
>>728969
>вот я не ньюфаг
Чем докажешь?
Аноним 20/02/21 Суб 19:53:22 72897794
>>728959
private Transform hui;

hui.transform.scale = Vector3(18, 18, 18);
Аноним 21/02/21 Вск 06:27:01 72904395
У вас вообще секс есть или вы сидите и круглыми сутками дрочите векторы свои?
Аноним 21/02/21 Вск 07:09:49 72904596
>>728904
Не забудь их все связать друг с другом и проверять что только 1 состояние работает, а то багов будет куча.
>>729043
У меня вчера вечером был, держу в курсе
Аноним 21/02/21 Вск 10:33:34 72905997
Адепты Единства!
Спрошу глупость, но как ни искал гайдосы по RTS на unity, так ничего дельного и не нашел, кроме как заикающихся руснявых "инди-разрабов-300ккк/с", либо постоянно тупящих пендосов.
Может подскажете чего годного можно заточить в этом направлении?
Аноним 21/02/21 Вск 11:01:34 72906498
>>729059
>руснявых
Ехай в порашу с такой терминологией.
Аноним 21/02/21 Вск 12:32:47 72908099
>>729059
нет такой инфы, даже в англоязычном интернете.
это сакральные знания, которые можно только постичь самому.
Аноним 21/02/21 Вск 13:23:47 729082100
Аноним 21/02/21 Вск 13:42:01 729084101
image.png 176Кб, 1920x1040
1920x1040
Что за? Игра работает так как нужно, но в консоли пиздец.

The object of type 'GameObject' has been destroyed but you are still trying to access it
Аноним 21/02/21 Вск 14:01:29 729086102
>>729084
ты где-то сделал
Destroy(_myGameObject);
а в другом месте
_myGameObject.transform.position = Vector3.zero;
Тут может быть что угодно, но по сути пытаешься работать с объектом, который удалил.
Аноним 21/02/21 Вск 21:32:10 729155103
>>728854
>оставаться "пустыми" - без значений
Для этого в некоторых языках есть специальное значение, например, "undefined" в JS. Но на любом ЯП можно реализовать такое "пустое значение", просто рассматривая 0 как пустоту. А вообще, по-моему у тебя где-то с логикой игры проблемы, раз тебе обязательно нужно "пустое" значение.
>Подумал, что это такая удобная фишка для экономии времени
Переменные обычно обнуляются компилятором, чтобы там не оставалось "мусора" - старых данных, которые располагались в том же участке памяти, в котором разместилась новая переменная/объект. В языках, где возможен прямой доступ к памяти, можно "уничтожить" объект, а потом пройтись по участку памяти, в котором этот объект находился, и обнаружить, что данные там по-прежнему лежат... Вот чтобы эти данные не попадали в новые объекты, переменные/поля должны обнуляться (компилятором или программистом). В скриптовых ЯП такой проблемы, кажется, нет, там виртуальная машина/интерпретатор делает всю грязную работу за программиста скриптера.

>>728838
>используй не бойся!
Это такой троллинг или попытка бросить неумеющего плавать человека на середину реки, чтобы сам научился плавать или утонул? Ты же понимаешь, к чему ведёт обмазывание глобальными сущностями?

>>728835
>Еще вопрос по статик переменным - пишут, что нежелательно их повсеместно использовать.
И правильно пишут. Впервые столкнувшись лапшой в коде ты и сам поймёшь, почему они это пишут. Лапша - это когда у тебя из одного маленького участка кода идут обращения к десяткам других мест в коде, из которых ещё в десять других разных мест, и так очень много раз, что невозможно уследить за всеми взаимосвязями. Пытаясь разобраться в этой лапше (чтобы починить, изменить или добавить что-то новое), ты понимаешь, что ничего не понимаешь, и чем распутывать лапшу, проще и быстрее будет всё с нуля переписать. И - внимание - это касается не только переменных, но и вообще любых глобальных сущностей.

В идеале программа должна быть устроена как дерево: есть корень, от корня ствол, от ствола ветки, на ветках листья. Листья ничего не о ком не знают, ветки знают только о своих, сидящих на них листьях (и ничего не знают о чужих), ствол ничего не знает про корень и листья, но знает про ветки, а корень знает только про ствол и не знает ничего про всё остальное. Данные могут переходить из листьев в ветки, из веток в ствол, из ствола в соседние ветки и из них - в другие листья, но они не должны перескакивать с листика на листик и с ветки на ветку, потому что ни листья, ни ветки друг о друге ничего не знают. Команды отдаются листикам только от веток, к которым они прикреплены, а сами листики никем не командуют; ветками командует ствол, а сами ветки командуют только своими листиками. И так далее. Но это в идеале, конечно, на практике трудно соблюдать такую древовидную структуру, всегда хочется срезать длинный путь листик - ветка - ствол - ветка - листик и сразу обратиться к соседнему листику или пропихнуть данные с листика прямо в корень, минуя маршрут листик - ветка - ствол - корень... Так вот чем больше ты соблазняешься доступом к тому, к чему доступа быть не должно - тем более запутанной становится твоя программа. И чем больше запутанность программы - тем вероятнее, что ты её забросишь или будешь вынужден переписывать с нуля/долго и трудно рефакторить.

>Чтобы из скрипта любого объекта можно было мгновенно получать значение нужной переменной?
У тебя неправильная архитектура, правильную я описал в предыдущем абзаце.
Аноним 21/02/21 Вск 22:23:30 729174104
>>729155
> где-то с логикой игры проблемы, раз тебе обязательно нужно "пустое" значение.
Оно и не нужно, просто я считал, что значение не присвоено и писал условия типа: если p <= 6 , где p могло быть 1...6 и условие срабатывало, т.к. 0 тоже меньше 6. Срабатывало еще до присвоения значения p, поэтому я добавил ограничение для 0.
>Впервые столкнувшись лапшой в коде ты и сам поймёшь, почему они это пишут. Лапша - это когда у тебя из одного маленького участка кода идут обращения к десяткам других мест в коде
В моем коде нет лапши, он достаточно четко структурирован по крайней мере для меня и закомментирован. Да, у меня нет большого опыта в программировании, но я профессиональный инженер и к любому проекту подхожу системно. Поэтому код основательно продрочен на предмет надежности и не один раз
В общем, проект небольшой, не предполагает значительного расширения и его архитектура меня вполне устраивает.
Для следующего проекта, начну обмазываться ООПом основательнее
Аноним 21/02/21 Вск 22:33:04 729178105
>>729155
>У тебя неправильная архитектура, правильную я описал в предыдущем абзаце.
Ты говоришь как хорошо натасканная галерная макака как про программист, работающий над крупными проектами. И это все верно.
Но я делаю проект в одиночку и на мне висит множество задач, от арта до геймплея и маркетинга. Поэтому мне нужен просто надежный, понятный для меня, работающий код. Даже если он местами написан коряво с точки зрения тру программиста.
Для примера: случай как обоссали создателя игры VVVVVV, когда он выложил исходники игры. Да, там в коде был такой пиздец, что можно охуеть. Но он сделал рабочий продукт и заработал на нем. Теперь может нанимать тру программистов на работу и раздавать им пинки
Аноним 22/02/21 Пнд 00:21:27 729195106
Да, забыл сказать: переменная - это ячейка памяти, кусочек микросхемы на плашке RAM или диске. Очевидно, она должна иметь какое-то значение. Будет ли оно мусорным, нулевым или специальным - зависит от компилятора, но оно должно быть. Хотя в языках высокого уровня может быть концепция "пустая ячейка (без значения)"... Ой, ладно, с этими пирогами из слоёв абстракции уже не поймёшь, что должно быть. Те же "пустые ячейки" можно было бы реализовать на уровне ОС, если бы это было кому-то нужно...

>>729174
>если p <= 6 , где p могло быть 1...6
Берёшь и без задней мысли делаешь (1 <= p) && (p <= 6), или ты байты/такты экономишь?
Алсо в строго типизированном языке (типа Ada) ты мог бы создать тип, который может принимать значения от 1 до 6:
>type Type_Name is range 1 .. 6;
На все остальные значения выбрасывалось бы runtime-исключение. Это было бы правильно в твоём случае, где любые значения кроме 1..6 являются некорректными. Однако для данного типа компилятор должен был бы, наверное, подставить значение 1 в качестве начального, что опять же привело бы к логической ошибке в твоём коде (конкретное значение там, где ты ожидаешь "отсутствие" значения).

>он достаточно четко структурирован по крайней мере для меня
Каждый так говорит, пока не пройдёт пара месяцев и не появится необходимость разобраться в старом коде))))

>>729178
>Ты говоришь как хорошо натасканная галерная макака как про программист, работающий над крупными проектами
Не, я хикка-ниасилятор, программирование только моё хобби, в котором я хоть что-то могу.

>Но я делаю проект в одиночку
Проблема "кода-лапши" касается в том числе одиночек. Пройдёт немного времени - и свой код будешь видеть как чужой, даже если что-то ещё можешь про него вспомнить. Поэтому писать код лучше как для другого человека, даже если читать будешь только ты. Да, и комментарии должны описывать не "что код делает", а для чего он нужен и почему он такой, какой есть. Потому что работу кода можно понять из самого кода, а вот причины его написания и смысл существования так сразу и не поймёшь (и следовательно можешь случайно выпилить/неправильно изменить, а потом ловить баги из-за поломанной логики).

>Поэтому мне нужен просто надежный, понятный для меня, работающий код
Вот поэтому и не нужно смешивать всё в один тугой клубок через глобальные сущности. Сегодня ты дёргаешь из одного объекта данные совершенно отдельного от него другого объекта, через неделю немножечко меняешь тот другой объект, и ВНЕЗАПНО вся игра идёт наперекосяк, баги появляются в неожиданных местах и ты не успеваешь закрывать их костылями. А через пять часов дебаггинга и приделывания костылей ты ВНЕЗАПНО понимаешь, что костыли сделали только хуже и вообще ошибка вон в том объекте, который ожидает определённые данные в определённом месте, а ты изменил поведение того места, в котором эти данные ожидаются. Работает? Пока - да. Понятно? Сегодня - да. Надёжно ли? Ну, как сказать...

Говорю по опыту, хоть и до сих пор страдаю от лапши в коде, но раньше было намного хуже, страшно вспоминать.

Кстати, вот небольшой пример:
>let somethingGlobal;
>function doSomething(times) {
>for (let i = 0; i < times; i++) { блаблабла ...somethingGlobal... блаблабла; }
>}
>doSomething(5); // что произойдёт с системой после вызова этой функции? - а хрен знает, нужно лезть в реализацию
Как это можно исправить?
>function doSomething(target, times) {}
>for (let i = 0; i < times; i++) { блаблабла ...target... блаблабла; }
>return result;
>}
>let result = doSomething(target, 5); // теперь что бы не произошло внутри функции, оно у нас в руках, далеко ходить не надо
Т.е. вместо обращения к глобальной хреновине из функции мы передаём все необходимые данные прямо в функцию, принимаем результат работы и дальше используем как положено. А иначе когда-нибудь настанет момент, что одно маленькое изменение в глобальной переменной или одной из функций, к ней обращающейся, перекорёжит всю логику программы, и придётся долго разбираться, кто виновник этой проблемы (помимо самого последнего изменения, которое хотелось бы сохранить). Прекрасно понимаю, что вставлять дополнительный аргумент и сохранять промежуточный результат - дополнительный труд и нагромождение символов на экране, но от неявных обращений к каким-либо внешним/глобальным сущностям намного хуже в перспективе (для кода "на один раз" сойдёт, написал - запустил - удалил).

Я не знаю, насколько это применимо к геймдеву и объектам Unity (поверхностно знаком), но там тоже не стоит дёргать напрямую какие-либо данные, нужно явным образом запрашивать/отправлять их через внешние структуры. Ну, типа, так надёжнее. Должно быть)
Аноним 22/02/21 Пнд 01:14:54 729205107
>>729195
Я писал про системный подход - у меня в проекте нет ни лапши, ни костылей. Код максимально компактный и четко структурированный, пусть и по моим собственным стандартам. Я четко знаю что где активируется, в какой момент и где и когда отключается.
Статические переменные только для задания состояний и простоты передачи переменных чтобы не ебаться со всеми этими get/set и прочим, опять же они четко прописаны и лежат в одном отдельном месте.
Просто пойми, что я технарь по натуре и всегда контролирую, что где происходит в моем проекте любом проекте, тем более он небольшой. Я не леплю костыли на ровном месте, о которых забуду через неделю, а периодически переписываю написанное в сторону упрощения и уменьшения элементов. Меня не пинает в под зад проект менеджер и я могу этим спокойно заниматься.
Аноним 22/02/21 Пнд 10:56:34 729221108
Как сделать лодку блядь чтобы плавать на ней? Есть условный платформер, и есть условная лодка, по сути просто платформа, в которую можно "зайти" на E и плыть взад-вперёд.
Аноним 22/02/21 Пнд 11:43:27 729229109
Никто не подскажет, как через код перебирать объекты определнного parent'а. Допустим у меня в иерархии два пустых объект, в каждом из которых по 5 разных с названиями 1,2,3,4,5. Мне нужно сделать из них массивы. Я сделал через find цикл, но он перебирает из первого пустого объекта. Как сделать выбор, откуда перебирать?
Аноним 22/02/21 Пнд 12:24:59 729238110
>>729229
Не совсем понял что ты хочешь, но попробую помочь.
У тебя есть кщмпонент №1 - условно gameObject1
Ты можешь сделать foreach(var child of gameObject1.transform) { / тут child это дочерний объект к gameObject1, можешь добавить какие-то свои проверки / }
Перед этим как вариант создать массив var yourData = new YourType[gameObject1.childsCount];
>>729221
Лодка должна физику использовать?
Если нет, волны на воде нет?
Если нет то совсем легко, нужно задать minX, maxX, curX и вызывать примерно такой код:
offset = Input.GetKey(KeyCode.rightArrow) ? 1 (Input.GetKey(KeyCode.leftArrow) ? -1 : 0);
curX = Mathf.Clamp(minX, maxX, curX + offset * Time.deltaTime);
Аноним 22/02/21 Пнд 19:47:29 729303111
Кто-то имел дело с новым input? PlayerInput ориентирован на сообщения.
Непонятно как опрашивать новую систему ввода по типу GetButtonDown()?
Аноним 23/02/21 Втр 00:18:30 729349112
Могу ли я на юнити забилдить приложуху и выложить ее в апп стор?
Аноним 23/02/21 Втр 00:18:50 729350113
Чтоб не учить всякие там обжектив це и тд
Аноним 23/02/21 Втр 00:20:32 729351114
Не игра, а к примеру скролилка новостей.
Аноним 23/02/21 Втр 02:44:10 729357115
В чём разница между
>public int Age { get; set; }
и просто
>public int Age;
?
Аноним 23/02/21 Втр 02:52:48 729358116
Аноним 23/02/21 Втр 03:00:14 729359117
>>729357
Первое в инспекторе не меняется.
Аноним 23/02/21 Втр 03:12:36 729360118
Аноним 23/02/21 Втр 05:48:55 729364119
>>729349
Если я не ошибаюсь, потребуется яблочное устройство для билда. Но вообще да, сможешь.
Аноним 23/02/21 Втр 12:03:08 729393120
>>729238
Про поиск child. Это почти то, но мне нужно находить именно другие gameobject дочерние, а этот цикл находит трансформ
Аноним 23/02/21 Втр 16:29:27 729428121
>>729393
Можно проще, gameObject1.GetComponentsInChildren<YouComponentType>()
вернет массив дочерних компонентов
Аноним 23/02/21 Втр 16:55:16 729430122
Аноним 24/02/21 Срд 11:25:11 729550123
>>729238
>>729428
Спасибо за помощь, у меня не особо получилось так сделать. Сделал через Find. Просто parent объекту к имени добавил цифру, каждому свою. И через команду Find("parent.name" + id + "/" + object.name ) все сделал. Задал еще все дояерние цифрами, и через цикл их тоже перебрал. Мб кому пригодитсч
Аноним 24/02/21 Срд 13:15:38 729561124
Аноны!
Как думаете, как люди обычно комбинируют эффекты на персонажах?
Например прозрачность + аутлайн + еще что-нибудь (например с изменением позиции вертексов)

Я вижу только 2 варианта:
1 - шейдер который умеет все (сложно, дорого, болезненно)
2 - дублировать меши и писать шейдеры так, чтобы небыло заметно что у нас тут 3 модельки с разными материалами, но отсюда идет проблема совместимости (если шейдер с вертексами меняет позицию, то шейдер аутлайна этого делать не будет)

Подскажите как еще можно?
Аноним 24/02/21 Срд 13:46:55 729570125
>>729561
Скопировать кусок чужого шейдера и подправить, займёт максимум пару часиков.
Аноним 24/02/21 Срд 14:52:25 729575126
Я правильно понимаю, что покадрово переместить объект из одной точки в другую не получится, всегда образуется погрешность из-за float? Но этого же можно как-то избежать, ведь допустим если те же шахматы делать, они однажды проебутся и выйдут за клетки. Кто-нибудь мб знает? А то везде говорят, что просто нужно проверять Distance<0.1f, но мне нужно точно в координату.
Аноним 24/02/21 Срд 17:28:59 729598127
>>729575
Ты не туда воюешь анон. Тебе следует подумать о том как у тебя реализовано перемещение и для чего оно нужно.
Скорее всего ты пытаешь велосипедить не знание мат.формулы или то что уже есть.
Напиши конкретнее что ты хочешь сделать, и как это делаешь.
Аноним 24/02/21 Срд 18:28:55 729607128
Здравствуйте геймдеваны. Решил вот унити освоить чтоб вкатится в геймдев и получать миллионы денег в наносекунду. Пока только начал, но уже столкнулся с вещами решения которых не знает даже гугл либо я хуево ищу
Первая проблема с переходом звука. Допустим есть некая музыка, она должна плавно завершится и на другой сцене уже играть другая. В интернете нашел код
IEnumerator LoadLevel()
{
float startVolume = _audiosource.volume;
float FadeTime = 1f;
while (aus.volume > 0)
{
_audiosource.volume -= startVolume * Time.deltaTime / FadeTime;
yield return null;
}
SceneManager.LoadScene(2);
}
И он вроде работает, но музыка еще секунду продолжает звучать на следующей сцене. Что я делаю не так?
Аноним 24/02/21 Срд 18:32:28 729609129
>>729607
Лучше сразу отучайся копипастить чужой код, не понимая, как он работает.
Аноним 24/02/21 Срд 18:39:16 729611130
>>729609
Ну так свой пока написать не могу. Смотрю как делают другие. Может подскажеш как плвно затушить звук за фиксироваеное время?
Аноним 24/02/21 Срд 20:41:21 729630131
>>729238
>Лодка должна физику использовать?
Пока что просто тупо платформа со спрайтом лодки, в которую можно "зайти" и начать управлять. Как именно сделать чтобы управление с челика переключалось на лодку?
Аноним 24/02/21 Срд 20:44:10 729631132
Сап, юнитианоны, есть проблема. В UI есть канвас, в канвасе Grid Layout Group, а в нём три кнопки. И всё работает отлично, кроме одного момента - последняя кликнутая кнопка "запоминается", после чего по нажатию пробела/enter эта кнопка снова нажимается, а WASD и стрелки не только управляют движением персонажа (как и должны), но и меняют выбранную кнопку. Типа выбрана кнопка 3 - я жму A или стрелку влево - выбирается кнопка 2. И если нажать пробел/enter кнопка активируется. Как это отключить?
Аноним 24/02/21 Срд 20:46:35 729632133
Разобрался. Надо было в интерфейсе Юнити у кнопок параметр Navigation установить None.
Аноним 24/02/21 Срд 20:50:25 729635134
>>729630
Эм... Ифом? Сделать переменную upravlenieLodkoy = false. При использовании лодки делать её true. А в обработке нажатий делать if (upravlenieLodkoy).
Аноним 24/02/21 Срд 21:35:50 729647135
>>729630
Сделать такой же контроллер на лодку. При заходе в лодку деактивировать персонажа и активировать лодку. Управление передается на нее. Слезать с лодки аналогично. Нахуй ифы.
Аноним 25/02/21 Чтв 03:07:09 729665136
>>729598
Делаю своего рода Sort Puzzle. То есть у тебя несколько так называемых колбочек стоят в линию, в каждой вертикально по несколько условных шариков (в маркете миллион таких). Я нажимаю на одну из колбочек, в воздух поднимается верхний шарик, и когда я нажимаю на другую колбу, он летит по горизонтали туда, а потом вниз на нужное место. Я пытался сделать через анимации, но там получается каждый раз нужно разные делать, типа полет из 1 в 3, полет из 2 в 4. После этого я попытался либо просто MoveTowards, либо просто одну из координат постоянно увеличивать до нужного значения. Но в итоге все равно возникает погрешность, вследствие чего шарик на пару сотых правее или левее. Сейчас я придумал так, что когда расстояние от точки меньше 0.1f , то я в последнем кадре просто телепортирую шарик в нужную точку, в целом почти незаметно. Я понимаю что это пмздец какой костыль, но я реально хз как сделать правильно.
Аноним 25/02/21 Чтв 05:41:55 729667137
>>729570
а если у меня есть 2 шейдера в 500 строк кода каждый?
Аноним 25/02/21 Чтв 09:43:23 729678138
>>729667
И, в чём проблема? Вот еслиб по 10к каждый, тогда пиздец, согласен, а так фигня вопрос.
Аноним 25/02/21 Чтв 10:22:38 729686139
>>729665
> После этого я попытался либо просто MoveTowards
И что пошло не так? Эта функция двигает ровно туда куда ты указал.
Аноним 25/02/21 Чтв 10:51:36 729687140
>>729678
Основная проблема, что если мне надо из точки 0 в точку 2, и я использую шаг 0.1f, то мой объект в точку с координато 2 не попадет. То есть условие if (object.transform.position.z == 2) никогда не выполняется. Потому что объект приходит сразу в координату типа 2.0002. Я решил проблему телепортом в конце, но это же костыль. Неужели нельзя сделать точно по координатам? Даже MoveTowards и Lerp, в которые по сути задаешь точку назначения, также в 2.0002 примерно приходят.поэтому вот главный вопрос, как мне точно придти в нужную тояку, без погрешностей?
Аноним 25/02/21 Чтв 11:01:43 729688141
>>729686
В посте выше указал. Если я делаю сточку if (object.transform.postion.z = 2f) и в ифе пишу MoveTowards(object.transform.position, target, 0.1f), то происходит следующее. Он приходит не в точку 2, а в точку типа 2.076372. Потом он понимает, что проехал мимо и возвращается во что-то типа 1.937582. И так он бесконечно начинает трястись. Я в этом треде выше даже спрашивал, мне сказали это погрешность float. Вот мне и интересно, неужели единственый варик это изменить каждую координату и телепортировать объект, ибо когда я меняю координату типа object.transform.position.z + 0.1f, он все равно из 0 в 2 не приходит, а приходит в 2.002. Я нашел костыль, что когда расстояние меньше 0.2f я просто телепортирую куда надо, и это почти незаметно, но все же хотелось знать как это работает.
Аноним 25/02/21 Чтв 11:13:31 729689142
247586953.png 600Кб, 640x360
640x360
>>729688
Даже не знаю с чего начать. Если коротко, то чем меньшие числа ты применяешь с float, тем больше у тебя вероятность получить погрешность. С тысячными и миллиардными долями там при вычислении все более менее норм. Это особенность архитектуры. Смирись. Если нужна попиксельная точность, то лепи костыль и телепортируй. Все так делают.
Возможно ты захочешь возразить - а почему функция сама не проверяет дистанцитю и не теолепортирует. А я тебе отвечу. Никто не знает какие значения ты будешь в нее вбивать, а значит непонятно с какой погрешностью сравнивать. Может ты хотел передвинуть с 0.00004 до 0.00005
А так тебе дали полную свободу действий и процессор с костыльной архитектурой. Пользуйся и чувствуй себя программистом.
Аноним 25/02/21 Чтв 11:42:08 729701143
>>729687
А ты добавь еще костыль, результат движения заворачивай в Mathf.Clamp(value,0,2)
Аноним 25/02/21 Чтв 18:37:06 729876144
Вопрос.

Есть ли возможность создать анимацию из отдельных obj файлов?

Что нашёл - point cashe animation, но что-то этой функции нету больше в унити.

Количество кадров не более 15.
Аноним 25/02/21 Чтв 18:46:40 729877145
>>729876
Опиши конкретную задачу.
Аноним 25/02/21 Чтв 18:47:54 729878146
>>729877
Подобие спрайтовой анимации
Аноним 25/02/21 Чтв 21:22:16 729888147
>>729575
в финальной точке перемещения просто телепортируешь объект в строгие координаты, визуально этот микроскачек заметен не будет
Аноним 25/02/21 Чтв 21:26:00 729889148
Аноним 25/02/21 Чтв 21:36:35 729895149
Есть годные уроки по дизайну UI?
Аноним 25/02/21 Чтв 22:22:45 729907150
>>729895
поиграй в игры, пойми где почему как делают, какие тебе уроки нахуй, пиздец же, люди нового поколения скоро будут просить уроки потипу "как сделать классного босса" или "как придумать игровой сеттинг"
Аноним 25/02/21 Чтв 22:42:43 729910151
>>729878
Да можно.
Какой вопрос, такой и ответ.
Аноним 26/02/21 Птн 02:41:12 729929152
А как правильно обращаться из одного объекта к другому? Вот допустим, есть объект Player, который игрок. К нему прикреплён скрипт player.cs. И есть элемент UI - полосочка хп Health. Количество хп игрока хранится в player.cs. Но если внутри скрипта player.cs что-либо снизит жизни игрока, то нужно получить доступ к полоске Health и изменить её размер. Как это сделать?

В туториалах рекомендуют в player.cs писать код такого вида:

[SerializeField]
private Image health;

а потом вручную в редакторе Юнити привязывать объект полоски Health к параметру в player.cs. Но это кажется каким-то говнокодом. Неужели нет возможности получить доступ к полоске только кодом, ничего не таская в редакторе Юнити?
Аноним 26/02/21 Птн 05:29:11 729930153
>>729929
> health
> image
?

> [SerializeField]
Это правильный вариант. Я мог бы объяснить почему, но перед этим: сколько ты программирование изучаешь?

Аноним 26/02/21 Птн 06:41:09 729934154
sophie-heath-he[...].jpg 189Кб, 1662x944
1662x944
>>729930
>> health
>> image
>?
Изображение в виде полоски здоровья. Не монотонное, если там всякие красивости вроде пикрилейтед. Регулируется с помощью Image type: filled.

>но перед этим: сколько ты программирование изучаешь?
Шарп - несколько месяцев. До этого много лет ковырял веб на жс.
Аноним 26/02/21 Птн 06:51:07 729936155
Снимок.PNG 57Кб, 1131x509
1131x509
Помогите понять, как работает Mathf.Lerp в целом и этот метод в частности, пожалуйста. Прочитал инструкции по Mathf.Lerp, понятнее не стало. Этот метод сделал по туториалу, это корутина. По нему шкала каста заполняется от нуля до полной за 2 секунды (2f в rate). Третьим аргументом в Mathf.Lerp передаётся текущая заполненность шкалы от 0 до 1, так? Почему это делается плавно, если там нет ожидания типа yield return new WaitForSeconds?
Аноним 26/02/21 Птн 07:21:45 729937156
>>729907
Я недавно вкатился и представляю чего хочу, но пока не знаю как лучше сделать и какие инструменты лучше использовать
Аноним 26/02/21 Птн 07:26:13 729938157
>>729934
Понял. Смотри, ты можешь и из кода это сделать, но тогда тебе придётся не в редакторе (на сцене) размещать картинку, а тоже через код создавать (выделять пямять, размещать, настраивать) и тд конструировать объект, создавать его в нужном Awake и тд код писать. Другой вариант это создавать префаб и через Instantiate его вызывать, но тут всё равно мышкой надо будет в редакторе работать, чтобы создать префаб.
В двух словах, если пишешь на юнити, то делай через префабы и редактор, он под такое заточен. Перестань воспринимать как костыли, это правильный подход
Аноним 26/02/21 Птн 07:49:05 729942158
Аноним 26/02/21 Птн 08:26:25 729946159
>>729942
еще конечно есть вариант gameobject.find / getcomponent для доступа к объектам/компонентам. Но у него тоже свои минусы, в данном случае ты бы плохому подходу с таким научился
Аноним 26/02/21 Птн 08:58:41 729950160
Аноним 26/02/21 Птн 10:36:56 729965161
56e15f04dd0e4c7[...].jpg 34Кб, 1024x576
1024x576
как сделать rpg-систему? может есть какие-то паттерны?
то есть характеристики и их модификации экипировкой, эффектами и т.д.
Аноним 26/02/21 Птн 11:08:46 729973162
Аноним 26/02/21 Птн 11:25:00 729978163
>>729973
Во-первых, я все знаю (почти все), а во-вторых там нет про создание характеристик.

Конечно, можно просто объявить public int strength, agility и просто их менять при смене экипировки. Но такой наивный подход работает только для самых простых случаев вроде "кольцо +5 к силе". Будет непросто сделать продвинутые механики вроде процентного изменения (+200% к силе), динамического изменения (+10 * оставшееся здоровье) и т.д.

Может уже есть какой-то общепринятый паттерн, фреймворк как делать такие характеристики?
Аноним 26/02/21 Птн 11:30:20 729979164
Когда только начинал, делал игру 9 месяцев, а через пару лет переписал ее за одну неделю. Хочу узнать, какие есть способы документирования, чтобы время разработки нового проекта сократилось в несколько раз? Это очень актуально, так как нет гарантии, что проект выстрелит, и хотелось бы сделать его максимально быстро.
Аноним 26/02/21 Птн 12:01:07 729985165
>>729978
Что думаешь насчет ПРОСТО реализовывать интерфейсы у своих артефактов: GetHeal, GetDamageBoost и тд
Аноним 26/02/21 Птн 12:15:22 729989166
>>729979
>какие есть способы документирования
попробуй записывать в ДОКУМЕНТЫ
Аноним 26/02/21 Птн 12:21:46 729992167
>>729978
Паттерны может и есть, но они могут тебе и не подойти. Все зависит от твоих хотелок. Например ты хочешь что бы кольцо давало + vitality*0,8 если у тебя меньше 25% хп и идет доздь. Или + 25% урона нежити если ты попил пива и закусил чипсами. АА если закусил креветками, то тока +20%
Если бонусы статичны, то достаточно пересчитывать статы один раз кеогда одеваешь или снимаешь шмотку и хранить в переменной. Если бонусы зависят от окружающего мира, погоды, типа атакуемой цели и т.п. то нужно пересчитывать все динамически. Эти способы можно еще и комбинировать. Чисто математически тут все банально. Лучше напиши реализацию сам. Чтоб было проще отлавливать баги. А баги будут. И в случае фреймворка их поиск только усложнится.
Аноним 26/02/21 Птн 13:15:00 730004168
>>729992
>Паттерны может и есть, но они могут тебе и не подойти. Все зависит от твоих хотелок.
Почему, ведь это универсальный паттерн. Во всех РПГ одни и те-же механики изменения характеристик персонажа в зависимости от экипировки/примененных на него заклинаний.
То есть можно сделать одно универсальное решение для любой РПГ
Аноним 26/02/21 Птн 13:37:33 730007169
>>730004
В корне не верно. Все игры пытаются быть не похожими на другие (молильные дрочишьни не в счет). Допустим есть вторая диабла. Там все действитьельно стандартно. Но в ней есть чармы, котоыре работают если лежать в инвентаре. Это не тоже самое что кольцо в слоте экипировки. Есть моды на диаболу где те же чармы работают, например, только в дождь или только ночью. Это меняет геймплей и это совершенно другой код с другими условиями. А как тебе смена класса персонажа просто сменой одежды? Одел мантию и ты маг. Одел латы и ты воин. И у тебя меняется набор скилов и влияние баффов. И ты такой заходишь в игур и сразу Вау!
Если хочешь клон какой то рпг,то ищи в гугле unity starter kit
Аноним 26/02/21 Птн 14:10:58 730016170
>>730007
Это все можно стандартизировать. Поделить на характеристики и эффекты. Логика эффекта инкапсулирована в самом эффекте, поэтому ее можно вынести за скобки паттерна.
Чармы, баффы - это все эффекты.
Аноним 26/02/21 Птн 21:24:42 730091171
Обязательно ли сначала пилить 2д проект, или можно сразу к 3д приступать?
Новичок в Юнити, но прогаю уже давно
Аноним 26/02/21 Птн 21:31:24 730092172
>>730091
>Обязательно ли
Конечно нет. Делай что хочешь.
Аноним 26/02/21 Птн 21:47:10 730093173
>>729978
>Во-первых, я все знаю (почти все)
Охуенно ты знаешь я вижу, да? Бездарь и лжец.
Аноним 26/02/21 Птн 23:44:03 730116174
6364e36d7ff9096[...].png 827Кб, 1643x1620
1643x1620
>>730093
Ладно, ты меня раскусил. На самом деле я ничего не знаю.
Аноним 27/02/21 Суб 00:10:56 730120175
>>730091
Вообще без разницы. Но учти, что делать 3д модели и уровни сложнее в разы. А так все знания что ты получишь в 3д применимы и для 2д и наоборот.
Аноним 27/02/21 Суб 00:31:26 730125176
>>730120
Сделать хорошее изометрическое 2D тоже непросто.
Аноним 27/02/21 Суб 01:04:00 730127177
61644521.jpg 425Кб, 1920x1080
1920x1080
pillars-of-eter[...].jpeg 440Кб, 1920x1080
1920x1080
>>730125
Пики отклеились.
Аноним 27/02/21 Суб 05:54:09 730146178
>>730127
На пиках 2д нихуя и нет, один триде запеченный
Аноним 27/02/21 Суб 10:54:16 730152179
>>730125
Сложнее чем 3д. И кропотливее.
Для такого >>730127 нужно отрисовать 100500 вариантов анимаций в разных направлениях, по итогу всё равно делаешь 3д модель и спрайтшиты с нее нарезаешь..
Когда в 3д у тебя просто по одной анимации каждого типа.
Аноним 27/02/21 Суб 12:55:01 730175180
12.jpg 193Кб, 910x401
910x401
>>730152
Вы блять берете одну крайность и проэцируте на все 2д игры. Такой уровень ты в своей перввой игре не осиишь нихуя. Вот что ты сможешь сделать один. И то не факт. Но это хотя бы быстро можно накидать в редакторе и понять что у тебя вообще получается.
Аноним 27/02/21 Суб 13:04:22 730178181
>>730175
Это что, зельда на двоих?
Аноним 27/02/21 Суб 13:08:13 730181182
>>730152
Для какого такого?
На первом пике tyrrany вроде, там задники - отрендеренное 3д, а персонажи - полноценное 3д в изометрической проекции, с 3д скелетными анимациями.
Никто в 2к21 не будет рисовать 100500 вариантов анимаций, тем более, если нужна возможность менять броню на персонаже, это просто шиза.
Аноним 27/02/21 Суб 13:08:28 730182183
>>730178
Rogue Heroes: Ruins of Tasos
Довольно неплохая игрушка. На зельду похожа, но есть кооп. Люди жалуются на баги в коопе но в сингле вроде все норм. Рикоминдую.
Аноним 27/02/21 Суб 15:13:21 730215184
Аноны, вопрос на миллион, начинаю делать игру в связке unity+3dsmax. Вопрос, возможно ли, инструментарием юнити делать лоуполи ландшафт? Нагуглил старый костыль через блендер, но не хочу прибегать к нему, по возможности.
Аноним 27/02/21 Суб 16:24:33 730231185
Аноним 27/02/21 Суб 16:29:35 730232186
image.png 167Кб, 1080x798
1080x798
Аноним 27/02/21 Суб 17:12:35 730236187
>>730232
?
Нука поясни. Юзаю блендер и макс для своих проектов, интересно услышать.
другой анон
Аноним 27/02/21 Суб 17:22:05 730237188
>>730231
Есть установка сегментации в терейне, на юнити?
Аноним 27/02/21 Суб 17:40:57 730238189
>>730237
define >установка сегментации
Аноним 27/02/21 Суб 17:46:09 730240190
15972434428220.jpg 1918Кб, 1754x1754
1754x1754
>>730238
Тонны нефти тебе, анончик
Аноним 27/02/21 Суб 18:03:40 730243191
>>730215
что за старый костыль через блендер?
скульптить лоуполи меш чтоли?
а как же текстуры, коллизия?
Аноним 27/02/21 Суб 19:57:24 730267192

>>730243
Делать в юнити, переводят в блендер, фиксят сегментацию, прямые плоскости резать и корректить, чтобы не было "илюзии двежения на месте", ну и обратно переводить в юнити
Аноним 27/02/21 Суб 21:14:00 730285193
>>728552
Дерево контроллеров на асинковых тасках
Аноним 27/02/21 Суб 21:23:46 730288194
>>730267
террейн не искпортит меш, только хайтмапу
(потому что запеченный меш в террейне не нужен)
даже если дикими костылями это сделаешь, то сплатмапы и обьект мапы все равно отвалятся
Аноним 27/02/21 Суб 21:54:25 730297195
16140206203640.mp4 8000Кб, 1280x720, 00:01:01
1280x720
>>730181
>там задники - отрендеренное 3д, а персонажи - полноценное 3д в изометрической проекции
Аноним 27/02/21 Суб 22:19:46 730303196
1.jpg 1187Кб, 1280x800
1280x800
2.gif 559Кб, 1280x720
1280x720
3.jpg 995Кб, 1920x1080
1920x1080
4.jpg 449Кб, 1280x800
1280x800
>>730152
>>730181
А что если делать что-то вроде фоллаута? Там запечённое триде разве что в виде отдельных объектов. Сама карта собрана из плоских элементов, стены - просто развёрнутые текстуры. Такое можно и одному потянуть. Наверное.
Аноним 27/02/21 Суб 22:23:56 730306197
Снимок.PNG 596Кб, 765x473
765x473
Только сейчас заметил, что в фоллауте не ровная изометрия, когда все тайлы - ромбы, а немного под углом.
Аноним 27/02/21 Суб 22:25:16 730307198
>>730303
Персонажей заколебешься делать.
Окружение не так сложно, хоть в 2д, хоть в 3д.
Сложно будет с анимациями во всех направлениях, если еще и броню надо менять на персонаже, количество комбинаций будет расти в геометрической прогрессии.
Аноним 27/02/21 Суб 22:27:13 730308199
>>730307
А если сделать как тут - >>730297 задники все плоские, а персонажи трёхмерные с анимацией скелета вместо покадровой? Не будет слишком бросаться в глаза разница между задниками и персонажами?
Аноним 27/02/21 Суб 22:51:11 730315200
1614455434491.png 218Кб, 1500x1500
1500x1500
>>730306
В Фоллаче вот такая проекция.
Аноним 28/02/21 Вск 00:50:34 730342201
>>730308
Смотроя как настроишь
Аноним 28/02/21 Вск 01:07:36 730345202
Axonometric.jpg 23Кб, 740x385
740x385
FD9BJ.png 29Кб, 381x151
381x151
4TfHP.jpg 73Кб, 400x469
400x469
>>730315
И правда. Одного только вида сверху столько вариантов.
Аноним 28/02/21 Вск 01:09:23 730346203
>>730297
Как они сделали разные тени на плоской поверхности? Наложили карту нормалей?
Аноним 28/02/21 Вск 02:18:20 730351204
>>730346
предположу, что геометрия уровня в виде полностью прозрачных для нас стен все же присутствует. но для света они не прозрачны. поэтому там где стена будет больше засветка, за стеной меньше. потом это все накладывается поверх плоской картинки
Аноним 28/02/21 Вск 03:33:47 730355205
>>730351
А зачем тогда запекать в плоское изображение 3д модель уровня, если он всё равно остаётся невидимым? Не проще оставить полностью трёхмерным?
Аноним 28/02/21 Вск 06:03:04 730360206
>>730346
никак, смотри внимательно - декор тени не отбрасывает, это особенно видно на сцене с двумя гулями - гули отбрасывают тень, а нагробие рядом с ними не отбрасывает

Просто работа художника, вот и кажется что все правильно, но если разглядывать внимательно, видно что реальных теней нет.

Впрочем тени можно сделать и на плоскости, гугли тему 2d light
Аноним 28/02/21 Вск 07:10:44 730362207
1.PNG 384Кб, 402x412
402x412
2.PNG 295Кб, 389x389
389x389
>>730360
>декор тени не отбрасывает
И правда. Зато блики есть. Это бликующие объекты сделали с другим материалом и положили поверх карты?
>гугли тему 2d light
Спасибо!
Аноним 28/02/21 Вск 10:55:58 730376208
>>730355
невидимая там примитивная геометрия в виде кубов.
в итоге у тебя плоская картинка уровня и поверх нее освещение с практически 0 затратами ресурсов системы, вместо полноценного 3д уровня
Аноним 28/02/21 Вск 11:37:12 730378209
>>730376
вот как в пиках выше:
для относительно достоверного отображения разлома, тебе достаточно сделать там примитивную геометрию из 2-3 плоскостей, словить ей свет и наложить на плоскую картинку.
в случае "честного" 3д придется держать в памяти уровень с кучей полигонов этого самого разлома
Аноним 28/02/21 Вск 15:24:11 730403210
>>730376
>с практически 0 затратами ресурсов

Однако в дедфаере были постоянные просадки фпс, микрофризы, загрузки по полминуты с ссд. Как будто это новый круизис какой-то, а не 2д игра.
Как же они так умудрились облажаться?
Аноним 28/02/21 Вск 20:23:48 730461211
.png 75Кб, 193x271
193x271
Помогите с материалами разобраться.
Конкретно - c дефолтным шейдером standart specular setup.

1
Если крутить значения smoothness и occlusion получаются или "туманно-бархатные" засветы на дальних плоскостях под острым углом просмотра (хз как объяснить, на пикрилейтед пример) или чернота в тени от источника света.
Среднее значение не получается.

2
Есть ли способ выбрать другой канал развёртки для карт типа smoothness и occlusion в стандартных шейдерах?
По дефолту второй канал предоставляется только для Альбедо и Нормалей.
Аноним 01/03/21 Пнд 00:06:05 730500212
Есть какой-нибудь гайд по созданию tps/fps проекта? За ручку примерно как в гайде из шапки. Или просто какой-нибудь готовый простой проект, чтобы посмотреть как он устроен внутри.
Аноним 01/03/21 Пнд 00:09:28 730501213
>>730500
Когда скачиваешь Юнити, тебе предлагают дополнительно скачать один из готовых простых проектов на выбор, чтобы посмотреть основы. Там платформер, фпс, гонка, вроде ещё что-то.
Аноним 01/03/21 Пнд 00:14:26 730503214
>>730501
Да, я уже потыкал пока сравнивал на какой движок переносить мой прототип с pygame. Мне не хватило.
Бтв я понимаю что готовые проекты выкладывать тупо, сам бы не выложил, но мало ли.
Аноним 01/03/21 Пнд 00:38:06 730505215
>>730503
Есть вот какой-то официальный туториал на час - https://www.youtube.com/watch?v=IWGZLq84Hvc

Неофициальный, но огромный восьмичасовой урок, как сделать сурвайвл фпс. Я не смотрел, но вроде бы всё очень подробно расписано - https://www.youtube.com/watch?v=Sqb-Ue7wpsI

Ещё один довольно подробный туториал, но покороче - всего три часа - https://www.youtube.com/watch?v=UtlAqRyZrUw

Есть тоже официальный трёхминутный урок, как натаскать готовых ассетов и собрать их в игру (лол) - https://www.youtube.com/watch?v=NvzpOCkw-eA

Ещё есть что-то такое, но, возможно, это и есть тот пример для скачивания - https://unity.com/ru/fps-sample
Аноним 01/03/21 Пнд 00:41:07 730506216
image 881Кб, 794x546
794x546
>>730505
Большое спасибо.
Аноним 01/03/21 Пнд 01:33:23 730509217
>>730501
Практического смысла там мало
Аноним 01/03/21 Пнд 03:29:53 730512218
image.png 152Кб, 1530x736
1530x736
Аноны, что я делаю не так? Почему анимация не проигрывается? Просто статичный 1 фрейм
Аноним 01/03/21 Пнд 05:37:01 730519219
>>730512
Нажми плей слева снизу
Аноним 01/03/21 Пнд 08:12:02 730523220
Насколько рейкаст дорогой в плане производительности? Объясню вопрос. Сделал по туториалу поиск пути на тайловой карте. Но в варианте из туториала карта изначально пуста, а преграды на ней добавляются вручную во время игры. При добавлении преграды она записывается в массив преград, а при самом поиске пути проверяется, есть ли нужный тайл в массиве преград. Я же хочу сделать преграды на отдельной тайловой карте и у меня возникла такая идея - при переборе тайлов делать рейкаст на координаты каждого тайла, но на другом слое - слое преград. Насколько этот путь правильный? Я не убью производительность в ноль кучей рейкастов?
Аноним 01/03/21 Пнд 08:25:58 730524221
.
Аноним 01/03/21 Пнд 08:36:18 730525222
Отмычка.png 272Кб, 353x390
353x390
Аноним 01/03/21 Пнд 08:37:46 730526223
>>730523
Не очень дорогой, но у тебя всегда есть шанс начать дергать getComponent в каждом тике, а вот это уже будет дорого.
Аноним 01/03/21 Пнд 11:34:35 730532224
Бананасы, как использовать DrawProceduralNow?

Как вообще правильно рисовать несколько копий одного объекта при помощи GPU?

Аноним 01/03/21 Пнд 11:59:07 730534225
Снимок.PNG 1441Кб, 1136x581
1136x581
>>730526
А почему getComponent будет использоваться от рейкаста? Сорри, может у меня знаний не хватает.

У меня ситуация как на скрине. Есть два тайлмапа - на первом земля, на втором - деревья. И при получении координат тайла на слое с землёй мне нужно узнать, есть ли на этом тайле дерево (или другая преграда).

Пока писал пост, до меня дошло - можно же не ебаться с рейкастами, а просто сделать tilemap.GetTile(координаты)! Это же настолько просто и очевидно, а я придумывал костыли с рейкастами.
Аноним 01/03/21 Пнд 12:12:01 730536226
На винде через хаб юнити не устанавливается? Помню еще года 3 назад такой же косяк словил с невозможностью установки.
Аноним 01/03/21 Пнд 13:20:21 730540227
>>730534
Молодец что пришел к этому.
А гетКомпонент тебе бы понадобился чтобы из gameObject получить твой скрипт или сравнение по тегу тоже не оч быстро работает.
Просто пускать лучики чтобы получить точку или дистанцию для точки - ок, все остальное уже нужно кешировать или делать как-то по другому.
>>730536
с правами у тебя что-то, запусти от админа
>>730532
>DrawProceduralNow
> рисует все без обработки света, теней
> DrawProcedural - рисует уже через пайплайн
А тебе точно now нужно?
В юнете есть встроенное combineMesh, если твои модельки статичные можешь объединить их и все.
Как альтернатива можно через джобы рисовать объекты, но это пиздец как неудобно, тонну кода нужно написать, несколько СистемКомпонентов и все это еще и связать, если сможешь то ты ГЕРОЙ
Аноним 01/03/21 Пнд 13:42:07 730544228
>>730540
>с правами у тебя что-то, запусти от админа
Уже пробовал. Сам unity установлен, в хабе установка зависает на 99%
Вроде распердолилось когда я вручную настроил модули.
Аноним 01/03/21 Пнд 16:32:45 730568229
15144797826330.png 1496Кб, 1018x728
1018x728
Джентельмены! Есть одна игра для мобилок. На одних телефонах она работает как надо без малейших тормозов, а на других, в частности Xiaomi, адово тормозит. Запустил с профайлером: спайки сразу по всем линиям идут, от UI до others. Профайлером пользуюсь впервые, как мне понять, что вызывает тормоза, и не вызваны ли они чем-либо извне (например, если проседает телефон а не игра)?
Аноним 01/03/21 Пнд 17:27:05 730582230
>>730568
Сравни характеристики желаза для начала.
Аноним 01/03/21 Пнд 19:26:58 730594231
u2kYET6WiK0.jpg 47Кб, 872x191
872x191
T4bWBc7PRcs.jpg 41Кб, 869x190
869x190
Я не понимаю, я долбоеб или что?
2 идентичных куска кода, один поднимает объект, второй опускает.
Вот только второй не работает. Я в глаза ебусь или что, DebugLog выдает каждый кадр сообщение, то есть в цикл заходит, но объект не опускает
Аноним 01/03/21 Пнд 19:27:44 730595232
>>730594
Скрины в обратном порядке скинулись, с дебагЛогом как раз не работает
Аноним 01/03/21 Пнд 19:44:44 730596233
>>730594
Бля чувак, делай вэйпоинты и Vector3.MoveTowards
Аноним 02/03/21 Втр 06:04:35 730650234
>>730540
>А гетКомпонент тебе бы понадобился чтобы из gameObject получить твой скрипт или сравнение по тегу тоже не оч быстро работает.
А, теперь понял.
>Просто пускать лучики чтобы получить точку или дистанцию для точки - ок, все остальное уже нужно кешировать или делать как-то по другому.
Понял. Есть идея при старте уровня как-то циклом проходить все тайлы на карте и проверять по координатам наличие преград, и если преграда есть - то добавлять координаты в массив или хэшсет. А потом уже при генерации путей во время игры просто проверять, есть ли этот конкретный тайл в массиве/хэшсете преград. Осталось только придумать, как пройти по всем тайлам, особенно если карта не в форме прямоугольника.
Аноним 02/03/21 Втр 08:16:14 730651235
Как получить состояние переменной к примеру public bool scared = true; из другого скрипта?
Аноним 02/03/21 Втр 09:43:43 730658236
Аноним 02/03/21 Втр 09:46:36 730659237
>>730658
Да всё я уже понял
Аноним 02/03/21 Втр 10:16:12 730664238
Аноним 02/03/21 Втр 10:16:49 730665239
>>730664
Ааа всё, я тоже понял.
Аноним 02/03/21 Втр 11:59:31 730701240
>>730596
Не помогает, все также вниз не опускает
Аноним 02/03/21 Втр 12:49:20 730713241
>>730650
> Осталось только придумать, как пройти по всем тайлам, особенно если карта не в форме прямоугольника.
Все уже придумали до тебя. Просто найди нужный алгоритм.
https://www.youtube.com/watch?v=GC-nBgi9r0U
Аноним 02/03/21 Втр 13:42:17 730724242
Как закрасить интсансы разными цветами по одному отдельному на каждый?
Аноним 02/03/21 Втр 13:48:55 730726243
>>730713
О, надо будет экспроприировать для стратежки
Аноним 02/03/21 Втр 16:02:41 730785244
image.png 8Кб, 195x324
195x324
А как удалять дубликаты?
Аноним 02/03/21 Втр 16:24:58 730800245
Аноним 02/03/21 Втр 16:27:46 730802246
>>730724
В цикле поменяй нужные свойства кажому
Аноним 02/03/21 Втр 17:09:18 730812247
>>730802
Не чел, это хуйня.

Уточню
Часть первая - хочу передать в CS пиксели текстурки или просто текстурку - это вроде понятно и не сложно, но вот какой формат использовать непонятно, да и работать с каждым отдельным пикселем тоже не до конца понятно

Часть вторая - закрасить цветом изх этой текстуры или массива в шейдере объект инстанс, массив получен из CS - как получить, как закрасить целиком.

В вершинном шейдере есть возможность получить по ИД данные из массива, который передаётся из CS, мне подобное надо сделать с цветом, который так же получен из CS и им закрасить в фрагментном шейдере целиком некий объект.

Как?
Аноним 02/03/21 Втр 17:13:05 730813248
>>730812
И добавлю - ГДЕ БЛЯДЬ ВЗЯТЬ НОРМАЛЬНЫЕ ПРИМЕРЫ ТОГО КАК И ЧТО МОЖНО СДЕЛАТЬ В ШЕЙДЕРАХ? КАКОГО ХЕРА БЛЯДЬ В ДОКУМЕНТАЦИИ ЛИШЬ ХИЛОЕ ОПИСАНИЕ ДАЖЕ НА АНГЛИЙСКОМ? Я БЛЯДЬ ЧТО, ДОЛЖЕН ТЕЛЕПАТИЕЙ РАЗБИРАТЬСЯ ЧТО ТАКОЕ ТИП_НЕЙМ? ДОКОЛЕ НАХУЙ?
Аноним 02/03/21 Втр 18:29:35 730817249
image.png 70Кб, 879x634
879x634
image.png 7Кб, 423x79
423x79
image.png 3Кб, 275x78
275x78
И снова я с вопросом почему ничего не двигается?
Вот два практически одинаковых кода в апдейте, первый двигает объект One до объекта Two по координате Z. Второй двигает объект вниз до точки 1f. Но почему то второй не работает, я делал его через MoveTowards, вставлял к первому в else, ничего не работает. ДебагЛоги каждый кадр выдают 1 и 2, то есть в цикл он попадает и каждый кадр выдает, однако координата объекта изменилась только на 0.1f. Мб кто знает, что не так?
Аноним 02/03/21 Втр 18:37:23 730818250
>>730817
> однако координата объекта изменилась только на 0.1f

Цикл выполняется один раз и больше ни одно из условий не выполняет. Упрости код, эта длинная срань не читаемая, создай локальные переменные, присвой им значения, а потом сравнивай, присвоение тоже сделай по такому принципу

vec3 SomeVe = Vec(0,0,0)
SomeVe.x =
SomeVe.y =
SomeVe.z =
Аноним 02/03/21 Втр 18:41:37 730820251
>>730817
Лучше объясни, что ты пытаешься сделать.
Аноним 02/03/21 Втр 20:47:37 730839252
>>730817
Блять. За такие простыни надо расстреливать. Непонятно нихуя. Покажи как ты делал через MoveTowards
> однако координата объекта изменилась только на 0.1f
Так ты ее на 0.1f в коде и меняешь. В чем проблема то?
Аноним 02/03/21 Втр 21:40:15 730852253
>>730818
>>730820
>>730839
Так у меня повышение на 0.1f в апдейте происходит, на втором скрине я даже приложил что дебаг лог там тысячами выдает, потому что каждый кадр работает. У меня игра типа sort puzzle, куча колбочек с шариками, и в апдейте, когда у меня i=1, шарик поднимается из колбочки. Потом когда я нажимаю на другую, i=2, шарик двигается к нужной колбочке, а дальше при i=3 он опускается вниз. Вот как раз вниз не работает. Притом что у меня идентично написан подъем вверх (ща не могу скрины приложить). То есть у меня участок кода, который каждый кадр выдает ДебагЛог, но при этом каждый раз новое значение не присваивает Transform.Position.
Аноним 02/03/21 Втр 22:17:45 730859254
image.png 60Кб, 1226x1142
1226x1142
Сап аноны, есть точки лица, которые я получаю в реальном времени используя камеру, и я хочу использовать их для изменения соответственных в 3d модели (эдакий захват движения). Вопрос: как это можно сделать на unity?
Анон подсказал создать rigged модель подстать каждой точке лица, если делать так - как это гуглить? Скелетная анимация?
На unity раньше не работал, но работал много с c#.
Буду благодарен за наводки
Аноним 02/03/21 Втр 22:26:19 730865255
>>730859
А почему бы по этим точкам динамически модель не создать и вершины двигать? или у тебя модель уже готовая?
Аноним 03/03/21 Срд 02:39:59 730897256
>>730852
> когда у меня i=1, шарик поднимается из колбочки
Это просто охуенно.
> То есть у меня участок кода, который каждый кадр выдает ДебагЛог, но при этом каждый раз новое значение не присваивает Transform.Position
Так оно не присваивается или все же она движется на 0.1f? Это большая разница. Код на первый взгляд правильный, хоть и вырвиглазный. Но это яво далеко не весь апдейт. Если у тебя состояния это i=3, то я боюсь представить сколько там еще всякой логики. Вполне возможно что какой то другой кусок кода возвращает объект назад.
> каждый кадр выдает ДебагЛог
Блять. Вывести 2 в консоль это не дебаг. Если хочешь понять что не так с данными - выводи эти данные.
Тбе дали отладчик. Бери, пользуйся. Нет я хочу жрать принты в консоль.
Аноним 03/03/21 Срд 06:30:05 730902257
Что за херня? Сегодня проснулся, запустил юнити как обычно, а он мне кучу ошибок высыпал - в IDE внезапно перестали импортироваться UnityEngine.EventSystems и UnityEngine.UI, а в самом юнити эдиторе падает Unable to resolve reference 'Unity.TextMeshPro'. Is the assembly missing or incompatible with the current platform? и Unable to resolve reference 'Unity.2D.Tilemap.Editor'. Is the assembly missing or incompatible with the current platform?. Также пропала Tile Palette, в меню её тоже нет. Я ничего не обновлял и не трогал. Просто само внезапно взяло и развалилось.
Аноним 03/03/21 Срд 07:11:27 730904258
>>730902
Закрой юнити, удали папку Temp, открой юнити, Assets->ReimportAll
предварительно сделай резервную копию
Мимо 2 недели на юнити
Аноним 03/03/21 Срд 07:38:36 730906259
В общем, скачал версию 2019.4.21, обновил проект до неё с 2019.4.19 и всё заработало.

>>730904
Спасибо, учту.
Аноним 03/03/21 Срд 11:00:43 730914260
>>730865
Я бы хотел в принципе создать систему, в которой можно менять 3d модели головы. Или при динамическом создании можно менять модели?
Пока готовой модели нет
Аноним 03/03/21 Срд 11:27:58 730920261
Unity3D RealTim[...].mp4 9609Кб, 1280x720, 00:01:12
1280x720
Аноним 03/03/21 Срд 16:25:31 730973262
Кому-нибудь удалось переехать в Европу/Канаду по работе, или везде своих желающих хватает? А что насчет Вьетнама? Платят не много, но шансов мне кажется больше.
Аноним 03/03/21 Срд 16:25:44 730974263
>>730236
Уёбищная программа же. Он у тебя ещё и пизженный небось?
Аноним 03/03/21 Срд 20:06:34 731014264
>>730902
В редакторе открываешь Packages, находишь там папку Unity UI, ПКМ => Reimport
Аноним 03/03/21 Срд 20:06:47 731015265
image.png 703Кб, 1280x800
1280x800
image.png 779Кб, 1680x1050
1680x1050
В итоге, я не смог найти как в юнити сделать лоуполи локацию и пришлось делать через костыли Unity>blender. Алсо аноны посмотрите на кол-во полигонов, для 8k x 8k (1пик) адекватные значения?
И еще вопрос оффтоп: 2пик, случилась какая то хуйня в блендере и не могу красить блекло-зеленую часть текстур, она как будто при заливке изменяется, помогите плз
, 04/03/21 Чтв 10:05:31 731071266
Как вы с анимацией работаете?(2d) пилю РТС, есть след трудности:
1) Как сделать, чтобы в рандомные моменты включалась конкретнач анимация? (Нужно, например, чтобы персонаж оглядывался по сторонам иногда, пока стоит без дела)
Коротину накладно для каждого объекта запускать, ТК их дофига.
2) как сделать, чтобы объект удалялся только после анимации смерти?
3) как вы вообще сопоставляете стейты анимации с кодом геймобжекта? Делайте Стейт машин, который дублирует минуты анимации?
, 04/03/21 Чтв 10:06:33 731072267
Аноним 04/03/21 Чтв 11:07:32 731078268
image.png 268Кб, 1920x1040
1920x1040
image.png 186Кб, 1920x1040
1920x1040
Почему гранату можно кидать верх, вниз, влево нормально, а направо граната спавнится возле игрока? Наверн, из-за какой-то мелокой вещи такая проблема
Аноним 04/03/21 Чтв 11:23:30 731080269
>>731078
Ну подебажся. Очевидно, что тебе возвращает vector2.zero. Видимо, ни одно условие не прокатывает
Аноним 04/03/21 Чтв 11:36:51 731082270
Так нужно Сишарп учить, чтобы с юнити работать? И можно в теории сделать шутер из готовых ассетов, не написав при этов ни строчки кода?
Аноним 04/03/21 Чтв 11:43:21 731083271
Аноним 04/03/21 Чтв 11:44:54 731084272
>>731082
>Так нужно Сишарп учить, чтобы с юнити работать?
Да.
>И можно в теории сделать шутер из готовых ассетов, не написав при этов ни строчки кода?
Да.
Аноним 04/03/21 Чтв 12:06:03 731091273
>>731083
>>731084
На сишарп есть мануалы на русском хоть? И на юнити, а то англ везде, пиздец.
Аноним 04/03/21 Чтв 12:19:28 731096274
Ребят, только вкатываюсь в Юнити и сейчас возник вопрос. Допустим у меня есть переменная которая меняется в Update().
Я хочу выводить ее на экран, в начале Update() пишу Debug.Log(Переменная). Для начала просто посмотреть как она меняется. В один момент я меняю ее значение с 10 на 20. И при этом в консоли каждый кадр Лог выдает что она и 10 и 20, как это происходит? То есть у меня каждый кадр у двух строчек в консоли с ДебагЛогом справа увеличиваются цифры.
Аноним 04/03/21 Чтв 12:48:59 731098275
>>731091
Есть, ищи книгу Юнити в действии. По шарпам читай полный справочник c# шилдта
Аноним 04/03/21 Чтв 12:50:19 731099276
>>731096
Можешь код показать? Где и как она меняется?
Аноним 04/03/21 Чтв 13:25:09 731105277
image.png 7Кб, 201x259
201x259
image.png 14Кб, 404x148
404x148
>>731099
Ну я вот сейчас отдельно написал, чтобы наглядно было. У меня изначально OnMouseDown(), при первом нажатии x=1, при втором x=2. На первом скрине код апдейта, на втором консоль. Ноль я так понимаю выдает, как только я переменную создаю, но я не понимаю почему каждый кадр. Также как и не понимаю почему остальные значения выдает.
Аноним 04/03/21 Чтв 13:28:50 731106278
image.png 2Кб, 177x66
177x66
image.png 2Кб, 178x67
178x67
>>731099
Вот все что в OnMouseDown(). (Не полным скрином ибо я там закомментил кучу строк, но даже с таким кодом все равно каждый кадр все выдает)
Аноним 04/03/21 Чтв 13:37:16 731108279
>>730974
>Уёбищная программа же. Он у тебя ещё и пизженный небось?
Если ты школьник с 80iq, то да, тебе нельзя ей пользоваться.
Сам по себе деск шикарная прога, и если она не подходит, то это сугубо твои проблемы.
Аноним 04/03/21 Чтв 13:56:46 731109280
>>731071
> как сделать, чтобы объект удалялся только после анимации смерти?
Behaviour в аниматоре.
Аноним 04/03/21 Чтв 13:58:34 731111281
>>731091
Найди на Ютубе уроки по юнити типа этого - >>728785. Английский не нужен, код говорит сам за себя.
Аноним 04/03/21 Чтв 14:03:56 731112282
>>731105
Апдейт каждый кадр вызывается.
или в чем вопрос?
Пока у тебя х = 0, он каждый кадр пишет ноль. Ты жмакаешь мышь,(я не знаю, что раньше, наверное, апдейт) икс становится = 1 и в след кадре пришлет это в лог, далее каждый кадр выдает 1 и тп.

Аноним 04/03/21 Чтв 14:05:20 731113283
>>731105
Так а с чего ты взял, что это один и тот же кадр?
Аноним 04/03/21 Чтв 14:08:37 731114284
Аноним 04/03/21 Чтв 14:12:19 731116285
>>731112
Так вот проблема что у меня потом 10к записей 0,1,3. Я тоже думал что будет как ты и говоришь. Что когда у меня x=3, будет только 3 выводиться, однако остальные почему то тоже не останавливаются
>>731113
Так даже если не один, почему он в апдейте повторяется? Типа у меня стал x=3, как он после этого вообще в x=1 возвращает? Или OmMouseDown() тоже каждый кадр вызывается(я понимаю что он как апдейт проверяет нажатие, но пока я не нажал он же не должен заходить)? Я просто хочу логику понять, я хотел сделать последовательные действия в update(), но в итоге они у меня в разнобой делаются потому что X за секунду сразу 3 значениями успевает побыть
Аноним 04/03/21 Чтв 14:31:28 731118286
>>731116
Я ниче не понял, ты можешь побольше лог прислать? То, что ты показывал, вроде норм
Аноним 04/03/21 Чтв 15:35:34 731123287
>>731091
Если ты с шарпом совсем не знаком, то настоятельно рекомендую почитать какую-нибудь книжку по нему, например Альбахари, просто чтобы иметь представление, что в нем есть и когда это можно использовать.
Мануалы есть на сайте самого майкрософта, на сайтах типа metanit или professorweb, бывают на хабре. Ну и, конечно, stackoverflow.com наше всё. На ютубе тоже можно найти.
Аноним 04/03/21 Чтв 15:52:06 731127288
image.png 40Кб, 1264x276
1264x276
image.png 32Кб, 509x286
509x286
>>731118
Не совсем понял какой лог побольше, просто докинул еще разных ДебагЛогов. Все кроме двойки увеличивается каждую секунду. Я не могу понять, если апдейт каждый раз пробегается, то в 2 должно тоже заходить кучу раз. Так как в 2 не заходит больше, а 3 каждый раз увеличивается, я предположу что х равен 3, но я хз почему остальные увеличиваются. Мне просто надо сделать чтобы когда заканчивается одно действие в апдейте, начинается другое, и когда оно заканчивается ничего больше не происходит. А у меня как минимум снова в 1 заходит.
Аноним 04/03/21 Чтв 16:13:04 731130289
Двачик, объясни, почему когда мы используем
using System;

то можем и использовать
using System.IO; // или любые другие пространства имён.

Разве IO. Как бы не "вложена" в System, почему мы одной строчкой про систем не подключаем все пространства имён?

Аноним 04/03/21 Чтв 19:32:09 731156290
>>731130
Если я не ошибаюсь, то прям физического разбиения по иерархии неймспейсам нет. И в одном неймспейсе могут быть классы из разных сборок.
Неймспейс помогает как-то кластеризовать классы, чтобы компилятор не офигел, когда видит два класса с одним названием.
Ты можешь жобавить свой неймспейс hui.zalupa, при этом вообще никакого отношения к hui не иметь
Аноним 04/03/21 Чтв 20:53:13 731173291
В юнити оказывается своя система ивентов есть. Какие ивенты лучше юзать - шарповские или юнитиевские?
Аноним 04/03/21 Чтв 21:04:40 731179292
16133100244020.gif 1758Кб, 666x716
666x716
Аноним 04/03/21 Чтв 21:13:22 731183293
Аноним 04/03/21 Чтв 21:38:31 731193294
>>731173
От ситуации зависит. Юнитивские быстрые из Юй, но неудобные из когда.
Аноним 04/03/21 Чтв 22:01:33 731202295
Аноним 04/03/21 Чтв 22:13:37 731208296
Аноним 04/03/21 Чтв 22:19:40 731210297
Сап. Хочу запилить 3D анимацию вормхола. Не шейдер, а именно 3D модель, как в видео на 26:45 https://youtu.be/JYukHhy9zFY , чтобы игрока по ней затягивать.
Всё усложняет то, что её нужно процедурно генерировать от точки А в точку Б, а не просто одноразовую анимацию сделать. В гугле вообще нихуя по этому поводу не нашёл, только шейдеры и плоские порталы.
В какую сторону копать?
Аноним 04/03/21 Чтв 22:24:49 731212298
Снимок.PNG 631Кб, 1283x675
1283x675
>>731210
Эм... ты хочешь трубу с бегущими полосками? Рисуешь трубу между двумя точками, изгибаешь по кривым Безье, сверху накладываешь текстуру с бегущими полосками.
Аноним 04/03/21 Чтв 22:28:48 731216299
>>731212
Даже не трубу, а цилиндр. Рисуешь прозрачный цилиндр между двумя точками, изгибаешь, сверху текстуру.
Аноним 04/03/21 Чтв 22:35:26 731220300
>>731212
> Berier Curve
Спасибо, анон, то что надо!
Будем наворачивать.
Аноним 04/03/21 Чтв 23:26:38 731226301
>>731208
Ничем, критичная масса нубья убеждена что это плохо, остальные боятся идти против мема и поддакивают.
Аноним 05/03/21 Птн 00:42:10 731245302
>>731226
>Я бы не советовал использовать SendMessage, иногда возникают фризы непонятные на некоторых девайсах. Долго вычислял, откуда они, там особо тормозить было нечему, потом понял что проблема в SendMessage. Переписал без SendMessage — всё стало работать без фризов. Поэтому не рекомендую использовать SendMessage.

>SendMessage — ужас для рефакторинга, они нужны только для использования в плагинах и анимации.
Лучше их никогда не использовать, если есть возможность использовать делегаты C#.
Аноним 05/03/21 Птн 09:46:32 731274303
В аниматора есть Стейт ходьбы, есть Стейт ожидания.
Есть бул переменная isMoving.
Из anystate переход в Стейт ходьбы, когда переменная = тру, а из ходьбы в ожидание - когда фолс.
После того, как буд тру, почему-то анимация ходьбы не доходит до конца (т.е. доходит где-то до середины и начинает заново.
Из-за чего это? Из ходьбы постоянно в ходьбу переходит или почему?
Аноним 05/03/21 Птн 09:53:28 731276304
>>731274
Запиши гифку или скрины параметров этих 2х анимаций
Аноним 05/03/21 Птн 10:28:03 731285305
как разрешить ресайзить окно с игрой? по дефолту это отключено
Аноним 05/03/21 Птн 11:06:29 731295306
>>731285
В PlayerSettings , кажется в разделе Player есть выпадашка с выбором разрешений и под ней была галочка "разрешить ресайз"
Аноним 05/03/21 Птн 11:28:50 731297307
>>731245
А в чем с рефакторингом сложности? Вообще никак на реализацию не завязывается и на делегат другого класса можно быстро перейти
Аноним 05/03/21 Птн 11:30:08 731298308
>>731127
У тебя там какой то пиздец. Что значат эти волшебные 1, 2, 3 нихуя непонятно. Где они меняются тоже не видно. Явно не вапдейте. нажатие мышы происходит между апдейтами. Если мышь меняет x то смотри как именно. По етм кускам что ты скинул нихуя не ясно. Почему при x = 2 и x = 3 одинаковое поведение? Почему у тебя два ифав вместо одного x >=2?
Слишком много непонятного.
Аноним 05/03/21 Птн 11:34:35 731299309
>>731173
Если нужно в ивенте передать параметр, то шарповские.
Аноним 05/03/21 Птн 11:35:20 731300310
>>731123
>>731098
А насколько глубоко надо сишарп изучать? Или хватит поверхностных знаний для юнити?
Аноним 05/03/21 Птн 11:44:52 731301311
>>731300
Зависит от твоих амбиций. если ты хочешь сделать копипасту с видеоуроков, то даже знать ничего не надо. Просто тупо копируй что там дулеют.
Если хочешь что то свое, то смотри опять же от амбиций. Для простой игры с простой логикой можно поверхностно выучить синтаксис. Сможешь осилить hp -= damageValue и уже достаточно. если же хочешь в сложную логику и кучу интерактивных объектов в сцене, то тут надо максимально понимать возможности языка. Нужно знать ивенты что бы взаимодействовать с разными объектами. Нужно знать структуры данных что бы как то хранить стейты и объекты. Нужно знать linq что бы быстро выбирать то что нужно из коллекций.
Аноним 05/03/21 Птн 11:49:45 731304312
>>731301
Вот как, спасибо, сам думал стратегию сделать, теперь хоть знаю с чего начать.
Аноним 05/03/21 Птн 12:05:14 731307313
>>731297
Класс/метод переименовал и ВСЕ.
Случайно добавил букву или удалил и ВСЕ.
Можно использовать nameof(methodName), но через FindReferences это не будет работать + code strip будет удалять такие методы, так что нужно обвешивать атрибутами.
И вот подумай, тебе это правда нужно чтобы думать о всех этих пунктах? когда ты можешь напрямую дернуть
Аноним 05/03/21 Птн 12:12:48 731310314
>>731300
Сам синтаксис, естественно, и как память работает. Например, чем стракт от класса отличается, что происходит при использовании new, сколько мусора генерят строки и linq и зачем нужен StringBuilder. В общем работа с памятью, создание объектов, сборка мусора. Это, как по мне, самое главное.
Аноним 05/03/21 Птн 12:56:40 731318315
>>731304
Для стратегии тебе еще понадобится нихуевое знание математики и геометрии. Когда ты поймешь, что выделенные несколько юнитов должны идти не в ту точку в которую ты кликнул, а немного в разные сохраняя подобие строя.
Аноним 05/03/21 Птн 16:01:08 731368316
>>731307
А, мы, видимо, о разных вещах говорим. Я думал, вы про кастомные классы мессенджера
Аноним 05/03/21 Птн 16:03:36 731370317
>>731304>>731318
Или нет.
В прошлом треде курс по РТС и мультиплеере выкладывали - оч крутой и достаточно простой. Навигацию юнитов берет на себя кастомный фреймворк, но и без него в инете есть куча туториалов с алгоритмами ориентации в сетке
Аноним 05/03/21 Птн 16:05:44 731372318
>>731310
>Как память работает.
Я более чем уверен, что для относительно небольшой игрухи вообще нет смысла знать, что в стек складывается, а что хранится в куче
Аноним 05/03/21 Птн 18:59:17 731406319
Сап. Можете сказать, что выполняют эти строчки кода?
enum gridSpace {empty, floor, wall};
gridSpace[,] grid;
grid = new gridSpace[800,600];

В движок сам не шарю, просто надо проект перенести.
Аноним 05/03/21 Птн 19:06:38 731410320
>>731406
создает массив grid с шириной 800 и высотой 600
можешь получить тайл, например grid[10,5]
совсем не знаком с программированием?
Аноним 05/03/21 Птн 19:10:28 731411321
>>731410
а что значит [,]?
И, я так понимаю, enum - это типа массива?

>совсем не знаком с программированием?
На шарпе да, совсем
Аноним 05/03/21 Птн 22:08:13 731458322
>>731411
>а что значит [,]?
Скобки значат, что это массив, а запятая - размерность
Данная запись говорит, что gridSpace[,] grid - это двумерный массив, т.е [x,y]. grid = new gridSpace[800,600]; Создает новый массив с 800 х 600 клеток
enum - перечисляемый тип. Если тебе нужно задать, какой может быть из 3 вариантов клетка (пустой, пол или стена), то ты создаешь енам с соответствующими значениями и потом дял каждой вбираешь подходящее

Аноним 05/03/21 Птн 23:34:55 731485323
А передавать колбеки - это говнокод или нормальная практика? Поясню - у меня есть инвентарь, в нём, например, десять итемов. При клике на любой в инфопанели рядом должна появляться инфа об этом итеме. Пока идея такая - при генерации итемов, в каждый передаётся callback метод из самого объекта инвентаря, который дёргает ивент внутри инфопанели с данными. Как это можно сделать чище?
Аноним 05/03/21 Птн 23:36:23 731487324
Или прокидывать из одного объекта инвентаря ссылку на объект инфопанели в каждый итем будет лучше?
Аноним 06/03/21 Суб 01:37:58 731514325
Сап, каким образом я могу сделать динамическую панель? Есть слот предмета в инвентаре и событие в скрипте, которое вызывается при наведении и показывает свойства предмета с задним фоном, задний фон сделан простой ui панелькой, но её размер никак не меняется, в итоге предмет с коротким описанием висит с кучей пустого места снизу. Как я могу узнать сколько места мне нужно, или как-то скалировать это всё дело?
Аноним 06/03/21 Суб 12:38:22 731545326
>>731485
Сделай событие OnSlotClick, подпиши на него колбек.
Аноним 06/03/21 Суб 14:08:14 731556327
>>731485
>>731487
>>731545
В общем просто сделал контроллер инфопанели синглтоном и всё заработало без колбеков и ивентов.
Аноним 06/03/21 Суб 17:08:41 731577328
Кто-нибудь пробовал использовать Bolt или PlayMaker для конечного автомата? Я имею ввиду использование только в некоторых местах, а не полная замена кода визуальным редактором.
Аноним 06/03/21 Суб 22:47:05 731610329
1.PNG 23Кб, 477x77
477x77
2.PNG 48Кб, 668x132
668x132
Это нормально? Оба скрина из одного класса. Зачем делать переменные приватными, а потом делать публичный метод для их изменения? Не проще их сразу сделать публичными? Ну или публичный set и приватный get.
Аноним 06/03/21 Суб 23:04:56 731612330
>>731610
Это нормально. Он уже сделал setter.
> Не проще их сразу сделать публичными?
Публичные переменные движок сериализует и светит в инспекторе. Чем светить в окне кучей переменных проще сделать сеттер который выставляет именно те две что нужно. Да и считается плохой практикой, все делать публичным.
Аноним 06/03/21 Суб 23:07:25 731613331
>>731610
Это называется инкапсуляция, суть в том чтобы оградить тех, кто будет пользоваться твоим классом(в том числе и тебя, ведь когда у тебя будет куча скриптов ты уже начнешь подзабывать детали) от его неправильного использования. Я не знаю что у тебя этот класс делает, но вот например предположим у тебя длина вектора мин всегда должна быть меньше длины вектора макс. Ты можешь прямо в этой функции сделать либо автоматическую коррекцию этой ошибки(свапнуть их) или кинуть исключение.
А потом ты еще внезапно решишь, что длина каждого из этих векторов должна быть меньше 1000(так как протианое при нормальном использовании этого класса невозможно по здравому смыслу например) - и прямо внутри этой функции добавишь эту проверку. И все - больше нигде ничего менять не надо - только реализацию функции.

По-началу может выглядеть дико, но на дистанции это тебя спасет от глупых ошибок, когда ты забыл какие-то "хитрые детали" своего же кода(и это нормально), или же поможет отследить что идет не так где-нибудь - типа ага, функция кинула исключение что мин больше макса пришел, значит проблема определенно пришла из функции которая ее вызывает. А если бы этого не было - хуй знает где, хуй знает когда и хуй знает на что это бы повлияло.

А еще можно делать проперти. Типа
public Vector3 Gavno {get;set};
И юзаются они прямо как переменные типа someClass.Gavno = new Vector3(1,2,10) ; Но суть в том что если захочешь ты можешь поменять реализацию set или get. Например вот был у тебя такой вектор без каких-либо проверок, но потом через неделю ты решил что надо добавить проверку, и делаешь
private Vector3 _gavno;
public Vector3 Gavno
{
set { gavno = value; if(gavno.Magnitude > 1000) throw nex Exception("o net!");}

get { return _gavno;}
}

У итоге скобочки постоянно писать не надо, а на самом деле функция выполняется.
Аноним 07/03/21 Вск 00:55:07 731625332
>>728504 (OP)
Как получить токен покупки от гугл плей? Написано в доках только что нужно вызвать getPurchaseToken() от объекта Purchase. Но в юнити нет ничего подобного в классе Purchaser
Аноним 07/03/21 Вск 05:30:12 731636333
А человеческие декали работающие на изогнутых поверхностях как в уе4е до сих пор не завезли?
Аноним 07/03/21 Вск 10:39:17 731649334
Аноним 07/03/21 Вск 14:26:51 731670335
Хочу сделать ассет для ассет стора и в идеале я бы хотел сделать его адаптированным под ецс, ну или хотя бы часть работы скинуть в джобс систем, потому что параллелится будет хорошо. Как я понимаю, те кто делают стандартную юнити игру и не установили всю эту хуйню - юзать его не смогут и им придется самим выискивать и устанавливать зависимости. Или они сразу сами подхватятся?
Или стоит сделать две версии - одну с ецс, а другую стандартную?
Аноним 08/03/21 Пнд 19:34:31 731905336
изображение.png 22Кб, 515x262
515x262
Как лучше держать все менджеры (звука управления и тп)?
Сейчас есть один большой компонент, который отвечает за иницилизацию и апдейт менджеров.
Есть в этом смыл или лучше каждый менджер отдельным компонентом держать?
Очевидная проблема сейчас - не очень удобно получать менеджеры для других компонентов
Аноним 08/03/21 Пнд 19:37:31 731906337
Анон, такой вопрос, по поводу пост обработки в юньке. Есть эффект блум, он глобальным параметром накидывается на все. Можно сделать локальный эффект, он по сути так же накидывается на все, но отображается только когда камера находится в пределах коллайдера. Есть ли возможность повесить этот самый блум, лишь на один\несколько объектов, чтоб вне зависимости от локации камеры, эффект работал только для выбранных объектов?
Аноним 08/03/21 Пнд 19:46:45 731910338
А и еще связанный с >>731905
вопрос - если я выставляю в [SerializeField] двух компонентов один и тот же scriptable object - ссылка будет на один и тот же инстанс или разные?
Аноним 08/03/21 Пнд 20:47:18 731922339
>>731905
Зависит от твоей архитектуры.
Есть 3 варианта. Первый это иметь мастер скрипт где хранятся все публичные ссылки на нужный стафф. Второй это в каждом скрипте перед или во время инициализации искать нужный публичный компонент и сохранять ссылку на него. И третий, Похож на второй, но искать и использовать ссылки только при их непосредственном вызове.
У каждого метода есть свои + и -.
Аноним 09/03/21 Втр 00:29:28 731984340
>>731922
Спасибо! Сейчас у меня 1 первый вариант, но выглядит не очень удобным.
Посмотрел, что делает коммунити https://github.com/UnityTechnologies/open-project-1 - там, вроде, везде завязки через scriptable object.
Теперь ключевые вопросы:
1) В какой момент иницилизируется scriptable object?
2) Если в два два компонента запихнуть один и тот же скриптбл настроенный, у каждого свой инстанс будет или будет один на все?
Аноним 09/03/21 Втр 01:51:47 731990341
Анон, в редакторе юнити можно как-то снизить настройки?

Вот в редакторе UE4 можно выбрать чтобы графика была минимальна. Вот такое в юнити ищу, а то на моем говне тормозит что пиздец на пустой сцене (и это смешно что редакор UE4 то вполне сносно работает, а юнити проперживает при нажатии каждой кнопки)
Аноним 09/03/21 Втр 08:21:07 732004342
>>731990
Конечно можно, загляни в настройки текущей сцены или проекта, и там можно кучу всего даже отключить или убрать в 0.
Аноним 09/03/21 Втр 16:55:37 732063343
Аноний, вопрос по поводу освещения в юнити. Как его сделать красивым, есть какие то туторы нормальные или типа того? Крутить будто бы особо нехуй кроме интенсивности, зоны покрытия и выбора цвета освещения. Какое то оно мертвое, некрасивое. А ведь во всяких игрулях\скриншотах всегда ахуительный свет, совсем другой.
Аноним 09/03/21 Втр 17:43:42 732071344
Аноним 09/03/21 Втр 18:23:59 732077345
>>732071
А есть такие же сцены только не для RP? Чет навигация сложная какая то по сайту, да и с ангельским такое себе у меня.
Аноним 09/03/21 Втр 18:28:55 732078346
>>729936
потому что yield return null. Грубо говоря твоя корутина срабатывает каждый кадр, поэтому визуально происходит плавное заполнение
Аноним 09/03/21 Втр 20:39:40 732087347
Вопрос, как в С# передать в функцию другую функцию ?
Аноним 09/03/21 Втр 21:02:50 732093348
Как реализовать поиск пути в 2д? Чтоб враг преодолевал препятствия в виде стены
Аноним 09/03/21 Втр 21:06:08 732094349
>>732093
Если видно стену то действие.
Иначе продолжить.
Аноним 09/03/21 Втр 21:16:20 732096350
>>732087
void Ebin(Action tvoyaFunctia)
{}
Аноним 09/03/21 Втр 22:07:09 732099351
>>732094
Пробовал через 2Дрейкасты, перс оочень медленно проходит препятствия
Аноним 09/03/21 Втр 22:21:28 732101352
>>732099
Значит хуевый алгоритм поиска пути.
Аноним 09/03/21 Втр 22:43:29 732103353
, 10/03/21 Срд 10:08:57 732150354
Есть конкретная ситуация, где можно использовать паттерн команда, но есть сложности со скриптбл объект:
Есть компонент, который запускает действие. Действие передается в виде scriptable object.
Разные действия могут дергать разные игровые объекты. Но как передать эти объекты скриптбл объекту? Компонент, который запускает действие один на все действия, а сриптабл объекту можно передавать только префабы в serializedfield
Аноним 10/03/21 Срд 13:59:57 732200355
Вопрос интимного хаарактера. Мне захотелось в игру для юнити допилить некоторые механики, совершенно чуждые для самой игры, но реализуемые на унити и естесна я о всяких дешифраторах подумал дабы вскрыть код и дорисовать желаемое, но гайдеров на утубе интересует онли тема пиздинга ассетов и изменения параметров в угоду своим желаниям(многа денехг) и вот у меня вазник вапрос: Как? Вот как мне не спиздить что-то из игры, а добавить...есть ли наработки и болевые приёмы трукодеров или тема душная, а то и вовсе мертворождённая ?
Аноним 10/03/21 Срд 14:06:36 732202356
>>732200
Через единственую прогу вскрываешь проект, там у тебя будет всё. Просто создаешь то что тебе надо, на твоих обьектах будут скрипты которые и так будут выполняться при старте.
То что ты задумал выполняется очень просто, почти без гемора.
Максимум 15 мин разобраться как работает прога+от 5 до 9999 минут понять что внутри проекта и как с этим взаимодействовать. Если никогда не работал в юнити, то вот тут могут возникнуть сложности, особенно по не знанию с#.
Аноним 10/03/21 Срд 14:47:45 732218357
>>732202
ООО, А можно на примерах инструкции, типа в теории как:
1.Добавить новую анимацию некому персу
2.Добавить модельку со скриптами(машинка допустим банальная)
3.Поменять графон, HDRI карту(если возможно)
4.Добавить механику, при которой при нажатии на опред. кнопку камера перса меняется(для создания камер наблюдения например или развед ботов).
Вот чисто в теории сказать чо да как, и ты имел в виду копипаст скриптов из допустим моей механики в юнити вроде тех же камер наблюдения во вскрытый dll файл?
В юнити сидел мало и давно, но щас цель появилась, и вот на практике решил её разобрать и реализовать желаемое. Си плюсы на шарп похож(почему жи хммм), так что думаю не сложно будет выучить
Аноним 10/03/21 Срд 16:14:11 732231358
>>732218
Чтобы сделать 1,2,4 тебе надо установить юнити и сделать это там, и потом сделать также уже в открытом проекте.
3 пункт, без понятия что ты имеешь в виду.

>Вот чисто в теории сказать чо да как, и ты имел в виду копипаст скриптов из допустим моей механики в юнити вроде тех же камер наблюдения во вскрытый dll файл?
Ты правильно понял, то что ты открыл проект, аналогия проекта в юнити, но не в редакторе юнити, а в обрезанной не удобной версии. И чтобы там чтото сделать, ты должен это уметь делать в самой юньки, иначе никак. Чем больше скриптов и обьектов будет добавлено, тем сложнее может быть их настройка для взаимодействия.

Если у тебя есть цель именно модернизировать игру под то что ты хочешь, то советую сделать так.
1. Скачиваешь прогу анпакер юнити(всего один есть в интернете), и распаковываешь игру, если она корректно распаковалась то можно двигаться дальше.
2. Скачиваешь юнити хаб, а следом из него и юнити.
3. Пытаешься понять что ты хотел бы сделать, и мельком смотришь нужные гайды как реализовать это в юньке.
4. Как только у тебя получилось сделать что-то в юньке, пробуешь это перенести в открытый проект.
5. Если всё получилось, и ты походу разобрался что да как, остальное делаешь по аналогии, лишь беря во внимание чем больше объектов, скриптов, тем сложнее.

Думаю неделька одна-другая у тебя уйдёт на реализацию задуманного.
Аноним 10/03/21 Срд 16:41:45 732236359
>>732231
Спасибо! вроде понял, и просто последний момент уточнить хочу, ну чтобы всё, был уверен.

>4. Как только у тебя получилось сделать что-то в юньке, пробуешь это перенести в открытый проект.

Есть некий юнити анпакер, который вскрывает файлы и даёт изменять юнити проект с урезанным и неудобным интерфейсом?
Просто почему-то возникшая мысля, не верю в неё чот, просто ты сказал "открытый проект" и тут сомнения родились.

Или ты имеешь в виду чистый, вскрытый C# код например в DnSpy, куда я отправляюсь, когда у меня выходит реализовать задумку в юнити? Если этот случай, то можно прям чутка пояснить .И модели, и объекты, и скрипты и всё остальное будет храниться во вскрытом C# коде, структуру которого мне надо будет понять?
Аноним 10/03/21 Срд 16:57:15 732241360
image 477Кб, 1920x1039
1920x1039
>>732236
>Просто почему-то возникшая мысля, не верю в неё чот, просто ты сказал "открытый проект" и тут сомнения родились.
Блять, тебе это надо или мне?
Пока не попробуешь не узнаешь, пиздец, мне за тебя всё сделать и по шагам показать как и что?

Есть программа, на пике, с помощью неё можно открыть почти любую игру на юнити. В ней же можешь модифицировать ресурсы игры, добавляя/удаляя.
Для примера я блять за тебя скачал её и открыл свой старый проект.
Как я писал уже, вся сложность заключается в том, что ты хочешь сделать, и делал ли ты это в юнити.
Если блять ты даже юнити не открывал и не знаешь что это не еби мозги сука.
Аноним 10/03/21 Срд 17:02:21 732244361
>>732241
Люблю просто уточнять досконально, вот про прогу на пике ваще не знал, теперь знаю что искать, спасиба кароче, спас B-)
Аноним 11/03/21 Чтв 10:47:05 732360362
>>732200
Если собиралось на новых версиях юнити, то без шансов, там il2cpp пакер. Разве что через иду, но ты ебанёшься.
Аноним 11/03/21 Чтв 13:55:00 732379363
>>728504 (OP)
Как же напрягает переводить юниты через юниты, тонна времени уходит на пердолинг координат. Интересно, кто-нибудь разбирается в этом настолько бегло, что совсем не напрягается.
Аноним 11/03/21 Чтв 17:28:27 732467364
>>728504 (OP)
Подборка русских книг по Unity
1. Разработка игр на Unity за 24 часа. Майк Гейг (2018)
https://yadi.sk/i/F1ZzqBQkqIll5g
2. Unity для разработчика. Мобильные мультиплатформенные игры. Джон Меннинг, Пэрис Батлфилд-Эддисон (2018)
https://yadi.sk/i/itkBO_PkWGLTzg
3. Оптимизация игр в Unity 5. Крис Дикинсон (2017)
https://yadi.sk/i/TN2SK2rTP1PuZA
4. Искусство создания сценариев в Unity. Алан Торн (2016)
https://yadi.sk/d/Op_LDerFliiTlA
5. Основы анимации в Unity. Алан Торн (2016)
https://yadi.sk/i/NT2nTynAemKBFw
6. Unity и C#. Геймдев от идеи до реализации. Второе издание. Джереми Гибсон Бонд (2019)
https://yadi.sk/i/pyqGOvnrdvRU3g
7. Unity в действии. Мультиплатформенная разработка на C#. Первое издание. Джозеф Хокинг (2016)
https://yadi.sk/d/SXUJqBj_TF425Q
8. Unity в действии. Мультиплатформенная разработка на C#. Второе издание. Джозеф Хокинг (2019)
https://yadi.sk/i/XQyAfyMCrxIM5Q
9. Программирование искусственного интеллекта в играх. Хорхе Паласиос (2017)
https://yadi.sk/i/RZNpzSQ-x2olhg
10. Виртуальная реальность в Unity. Джонатан Линовес (2016)
https://yadi.sk/i/eui1CaOKewXTDA
11. Шейдеры и эффекты в Unity. Кенни Ламмерс (2014)
https://yadi.sk/i/Wm4FnD_l5aFMZA
12. Основы Unity3D. Первая часть. Jandar-man (2013-2014)
https://yadi.sk/i/qWph7D3TmIauOA
Аноним 11/03/21 Чтв 19:34:32 732481365
>>732241
Фига какая софтина, есть кря-кря на нее?
Аноним 11/03/21 Чтв 20:52:27 732502366
>>732467
Анон, ты великолепен
Аноним 11/03/21 Чтв 20:54:01 732504367
>>732241
Как от нее защититься?
Аноним 11/03/21 Чтв 20:56:07 732505368
>>732504
Я отвечу, если ты ответишь кому ты нахуй сдался. ))))
Аноним 11/03/21 Чтв 20:59:08 732506369
>>732505
Тем кто захочет сделать игру с моими механиками, но не захочет пердолиться как я полгода с кодом.
Аноним 11/03/21 Чтв 21:07:11 732509370
>>732481
Название же написано, гугол.

>>732504
>>732506
Никак, это проблема юнити. Единственное что ты можешь это юзать плагин или в ручную приводить код в нечитабельное состояние по типу переменные ''aaaaa","s0000001" и сами функции, но ресурсы никак не защитить.

Аноним 11/03/21 Чтв 21:17:15 732512371
>>732509
То есть можно сейчас взломать какую-нибудь известную игру. Натырить от туда код, заменить графику и звуки, выпустить в стим - никто даже не поймет?
Аноним 11/03/21 Чтв 21:41:58 732519372
1.png 24Кб, 720x190
720x190
>>732504
Тащемта никакого секрета тут нет - переключаешь скриптинг бекенд на il2cpp и всё. Все эти хакиры сосут хуи.
Аноним 11/03/21 Чтв 22:03:46 732525373
>>732519
>>732360
Просто скачай и посмотри, это вообще ни на что не влияет, я уже проверял.
Аноним 11/03/21 Чтв 22:04:41 732526374
>>732512
>Натырить от туда код, заменить графику и звуки, выпустить в стим - никто даже не поймет?
Ну попробуй, помимо того что тебе надо будет разобраться в сотни скриптов и их зависимостях, и в куче всего что есть.
Аноним 11/03/21 Чтв 22:10:40 732527375
>>732526
Удобно, можно любое окружение достать, вплоть до настройки материалов, шейдеров, фх, етц.
Аноним 11/03/21 Чтв 22:13:23 732530376
Бегло посмотрел кря-кря, похоже не завезли.
Аноним 11/03/21 Чтв 22:31:17 732535377
Аноним 11/03/21 Чтв 22:53:04 732543378
Аноним 12/03/21 Птн 00:23:02 732560379
1.png 228Кб, 1321x644
1321x644
Бля, внатуре прога работает, специально собрал мини микро билд, так она прочитала оттуда ровно нихуя. А если я ещё burst подрублю или нахуярю ецс-лапши, чтобы хакир вообще прямиком на дурку отъехал после прочтения il-кода?
Аноним 12/03/21 Птн 09:02:35 732636380
image.png 356Кб, 1365x723
1365x723
Прикольно, можно поворовать код из вальхейма
Аноним 12/03/21 Птн 09:14:57 732637381
>>732636
Вот так аноны и открыли для себя решарпер.
Аноним 12/03/21 Птн 10:41:21 732640382
Зашквар. Поставлю ка я обфускатор
Аноним 12/03/21 Птн 11:10:29 732643383
>>732640
Трабла в пакере юнити, это тупо его архитектура упаковки. А трабла обфускатора в том что если уж сильно надо, можно все равно разобрать код, но потребуется больше времени.
Аноним 12/03/21 Птн 11:12:38 732644384
>>732640
Религия запрещает скриптинг бекенд переключить? Тогда всё соберётся в кресты и обфусцируется так, что ебанёшься. Крестовые декомпиляторы тоже есть, но там всё очень жёстко.
Аноним 12/03/21 Птн 11:21:56 732648385
>>732640
Зачем? всего лишь включи il2cpp,тогда нихуя не декомпилирует
Аноним 12/03/21 Птн 11:22:40 732649386
>>732644
>Крестовые декомпиляторы тоже есть, но там всё очень жёстко.
вот да, я тут одну прогу поставил на декомпиляцию - уже неделю декомпилирует, 32гб оперативы сожрало
Аноним 12/03/21 Птн 11:39:41 732651387
1.png 72Кб, 1041x607
1041x607
>>732649
Хуй знает, у меня за пару часов игры целиком вскрываются. Но разобраться сложно.
Аноним 12/03/21 Птн 11:44:48 732653388
>>732651
я с декомпиляцией в с++ код и не в иде, а в сновмене
Аноним 12/03/21 Птн 12:13:01 732662389
>>732640
Что вашу игру кто-то декомпилирует - это последнее, о чём надо беспокоиться.
Аноним 12/03/21 Птн 12:14:42 732664390
>>732662
Вот кстати внезапно, но подвачну.
Лучше сделать хорошую игру, чем гомно, но с кучей защиты и хитро-выебано-запакованную.
Аноним 12/03/21 Птн 14:26:00 732691391
Аноним 12/03/21 Птн 14:37:48 732692392
>>732691
Благодарю, забрал.
Аноним 12/03/21 Птн 14:56:21 732695393
Screenshot 2021[...].png 3066Кб, 2274x1254
2274x1254
>>732691
тыкнул на случайный урок по первой ссылке. там чел разрабатывает какую-то блевотину и говорит: "кликаем правой кнопкой мыши и выбираем паст валуес". в наши дни у всех такой уровень английского или это деревенский Петрушка попался?
Аноним 12/03/21 Птн 15:04:08 732696394
>>732695
Пидорахе только о произношении и рассуждать, кек.
Аноним 12/03/21 Птн 15:07:15 732697395
>>732695
ебать там коричневый ван гог
Аноним 12/03/21 Птн 15:13:47 732699396
2021-03-12 15.1[...].jpg 18Кб, 389x259
389x259
>>732696
он там, к слову, начинает так: "мы эту игру сделаем ещё более красивей", так что обезьяна о себе сразу даёт знать. собственно его результат это бесплатный ассет над лужей поноса

>>732697
солярис читал? похоже получилось
Аноним 12/03/21 Птн 15:21:14 732700397
>>732699
> солярис читал? похоже получилось
Читал, да, схожесть какая-то прослеживается и правда лол. На самом деле все эти фантастические рассказы непаханное поле для дизайнеров, да и фольклор (только god of war и витчер на ум приходят), на заре гейдева живем посоны
Аноним 12/03/21 Птн 15:39:16 732708398
Аноним 12/03/21 Птн 17:14:04 732718399
>>732644
>Религия запрещает скриптинг бекенд переключить?
Где эта галочка стоит?
Аноним 12/03/21 Птн 17:15:21 732719400
Аноним 12/03/21 Птн 19:57:51 732751401
Нагрузка на GPU[...].png 596Кб, 1280x720
1280x720
Вопрос по оптимизации в Unity - нагрузка на GPU ниже когда камера статична, а объекты двигаются? Или когда объект камера двигается?
Или это не имеет значения? Что имеется в виду в этом видео про оптимизацию?
https://youtu.be/mAgwkCMuRAk
Аноним 12/03/21 Птн 20:27:22 732760402
>>732751
в юнити не разбираюсь, но вангую либо говнокод с ненужными васянооптимизациями, вроде реал-тайм запекания, но нахуй такое надо не ясно, хотя с фиксированной проекцией, кучей статичных объектов и кучей графена с динамическим освещением (вроде диско элизиума), я еще могу увидеть в этом здравый смысл (но не в скриншоте который ты приложил лол)

видео не смотрел, я бы просто делал объекты статичными, где можно и не парился:

> Set the Static property on a non-moving object to allow internal optimizations like static batching

и прочее отсюда:

https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
Аноним 12/03/21 Птн 20:29:29 732762403
>>732760
* с динамическим глобальным освещением (вроде погоды или времени дня)
Аноним 12/03/21 Птн 20:55:57 732766404
>>732760
еще процедурная генерация может влиять, вот еще че вспомнил
Аноним 12/03/21 Птн 21:00:51 732768405
>>728507
чел, а можешь пожалуйста сказать какие есть новые туториалы и какие из приведенных устарели?
Аноним 12/03/21 Птн 21:02:36 732769406
>>732519
>>732718
Cмотри - тут даже пик есть. Эдит - проджект сеттингс.
Аноним 12/03/21 Птн 21:37:36 732771407
>>732467
Можешь посоветовать, что-нибудь не очень тяжелое по работе с сетью на юнити. Делаю пошаговый сетевой батлер на одном экране и пока не понимаю как подступиться
Аноним 12/03/21 Птн 21:49:28 732772408
>>732771
Я не он.
Photon Pun в помощь.
Аноним 12/03/21 Птн 21:57:22 732773409
Аноним 12/03/21 Птн 22:32:02 732776410
>>732772
>Photon Pun
Уточню, что у меня планируется крайне простая реализация сети. По сути: один игрок запускает игровое поле у себя на компе, это поле надо вывести на экран второго игрока и чтобы он мог по нему тыкать во время своего хода. Плюс надо как-то разграничить показ некоторых элементов инфопанелей у обоих игроков. Чтобы один не видел, что смотрит другой и наоборот.
Про фотон я слышал, но все же хотелось бы обойтись встроенным в юнити сетевым функционалом. Или он настолько убог, что даже эту задачу не решит?
>>732773
>наш российский сетевой фреймворк GalaxyNetwork
Было бы прикольно в нем покопаться, но сейчас мне нужен самый дубовый вариант - просто, чтоб работало. Тащу проект в одиночку, времени не так много к сожалению
Аноним 13/03/21 Суб 08:12:35 732833411
>>732773
Вообще выглядит интересно, напоминает mirror.
Но если честно не понимаю почему я должен взять именно его для себя т.к. судя по видосам, они решают свои проблемы, ну вы поняли идею
Аноним 13/03/21 Суб 08:17:06 732835412
Аноним 13/03/21 Суб 09:16:07 732838413
ddd.jpg 52Кб, 546x445
546x445
>>728504 (OP)
Курс "Skillbox - профессия разработчик игр на Unity (2020)"
Описание:
Курс состоит из 4 основных блоков - ведение в С#, основы создания игр на Unity, углубление в Unity, разработка полного цикла. Первый блок посвящен освоению азов программирования на C#, а уже со второго блока вы начнете создавать свои первые игры. После обучения вам уже будет, что показать на собеседовании.
Продолжительность: 49 часов
https://disk.yandex.ru/d/l6ZLrrRk3g_NQw
https://mega.nz/file/cpgGEBII#CmAm2kNvhZkHrBVG-RgX_xg-qf7AngCQY8MRja3exX0
Аноним 13/03/21 Суб 09:19:04 732839414
Снимок экрана ([...].png 2Кб, 291x126
291x126
Насчет NeoTextureEdit, в первый раз запустился, а во второй вместо запуска вылезает вот этот говняк. Как фиксить? Жаба стоит.
Аноним 13/03/21 Суб 09:49:21 732842415
>>730525
Что у него с автоматом?
Аноним 13/03/21 Суб 10:10:05 732845416
>>732838
Почему всех этих курсовиков рыночек еще не порешал? Вроде полно отзывов, что не соответствует реальность их обещаниям.
Аноним 13/03/21 Суб 10:20:29 732846417
>>732845
А что там такое?
Нуфаг
Аноним 13/03/21 Суб 10:45:46 732849418