Последние новости: анонсирован Unity 6, который выйдет в 2024
https://www.youtube.com/watch?v=8ZIdejTiXAE[РАСКРЫТЬ]
Прошлый тред: >>916310 (OP) (OP)
Официальный сайт: https://unity.com/ru
Документация: https://docs.unity3d.com/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com
Магазин ассетов: https://assetstore.unity.com
На Unity сделано много замечательных игр: Hearthstone, VRChat, Escape from Tarkov, Valheim, Genshin Impact, Subnautica, Albion Online, Endless Space, Beat Saber, Boneworks, Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие.
Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
Какие у Unity сильные стороны?
Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
Какие у Unity слабые стороны?
Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
На каких языках я могу писать скрипты для Unity?
Поддерживается написание скриптов на C# 9.0
https://docs.unity3d.com/Manual/CSharpCompiler.html
Какие есть готовые решения для создания мультиплеерной игры?
https://www.photonengine.com
https://mirror-networking.com
https://playfab.com
На каких платформах работают созданные с помощью Unity игры?
Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
Часто вижу скриншоты с красивой природой на Unity. Как такое создать?
Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в 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# книги на русском языке:
1. C# для чайников Автор книги – Джон Пол Мюллер
2. Программирование на C# для начинающих 2е части Автор: Алексей Васильев
3. Head First. Изучаем C# 4е издание Авторы: Эндрю Стиллмен, Дженнифер Грин
4. Unity и C#. Геймдев от идеи до реализации Автор: Джереми Гибсон Бонд
5. Язык программирования C# 7 и платформы .NET и .NET Core Авторы: Филипп Джепикс, Эндрю Троелсен
Для людей абсолютно не знакомых с движком есть 3и основные книги на русском языке:
1. Разработка игр на Unity 2018 за 24 часа Майка Гейга
(Знакомство с движком, изучение редактора, создание 4х простых игр практически без кода, отличное пособие для полных новичков).
2. Изучаем C# через разработку игр на Unity. 5-е издание Харрисон Ферроне
(Пошаговое освоение всех базовых знаний по программированию на языке С# в редакторе юнити, создание одной игры стрелялки от первого лица, написание искусственного интеллекта врага, книга переведена не совсем корректно и порой встречаются не просто опечатки, а серьёзные неточности перевода.)
3. Unity в действии. Мультиплатформенная разработка на C#. 3-е межд. издание Хокинг Джозеф
(Правильное построение архитектуры кода для сложных проектов, углублённое изучение программированию на C#, создание 4х полноценных игр на движке, обязательно нужно скачать код проектов, так как в книге он местами уже устарел.)
Шапка: https://pastebin.com/v3YnYtpf
а то меня капец как заела идея сделать конструктор в стиле ретро игр на рейкасте (тем более что фанбаза у такого есть).
и думал взять за основу для редактора (да наверное и лаунчера) юнити.. а потом что-то в голове стукнуло - а не запрещено ли это лицензией?
как ассет это не то.
я хотел создать что-то типа такого
https://play.google.com/store/apps/details?id=com.hoodown.fpsgc&hl=en_US
или точнее EasyFPSEditor
для людей которые не хотят осваивать юнити. (у меня горит желание)...
но тут вспомнил что вроде бы была новость что такое было запрещено. а может мне показалось.
но вот на годоте делают подобные движки. а поискал на юнити - такого нет
че сказать-то хотел?
на юнити я уже могу сделать игру и продать - в ней все есть
а твой говнот только когда-нибудь в будущем будет доделан - а будет ли это будущее или хуан поедет крышей и начнет дрочить
Вопрос к обучению. Увидел книжечки в шапке и обучалки от самого Юнити, могу начать с них, но есть ли адекватный видео курс по всему этому делу? Или без обратной связи пиратский же, смысла в курсах нет?
Сап юнититач
Заебался всё делать через паблик и таскать связи в инспекторе
Как можно обращаться к объектам из кода?
Например у меня Есть Сanvas
В канвасе несколько Panel
В одной из Panel есть Empty в которой у меня несколько Buttons. на каждой кнопке есть текст
private GameObject ObjCanvas;
TextMeshProUGUI MessageText
void Start()
{
ObjCanvas= GameObject.Find("Canvas");
if (ObjCanvas!= null)
{
MessageText = ObjCanvas.transform.GetChild(0).GetChild(0).GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>();
//print("Текст найден");
}
}
Это я нашёл всего один текст, как найти все остальные?
И второй вопрос, как в юнити можно смотреть путь к объекту? Ну чтобы самому не высчитывать, а просто как в годоте скопировал путь и указал в transform
Сап юнититач
Заебался всё делать через паблик и таскать связи в инспекторе
Как можно обращаться к объектам из кода?
Например у меня Есть Сanvas
В канвасе несколько Panel
В одной из Panel есть Empty в которой у меня несколько Buttons. на каждой кнопке есть текст
private GameObject ObjCanvas;
TextMeshProUGUI MessageText
void Start()
{
ObjCanvas= GameObject.Find("Canvas");
if (ObjCanvas!= null)
{
MessageText = ObjCanvas.transform.GetChild(0).GetChild(0).GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>();
//print("Текст найден");
}
}
Это я нашёл всего один текст, как найти все остальные?
И второй вопрос, как в юнити можно смотреть путь к объекту? Ну чтобы самому не высчитывать, а просто как в годоте скопировал путь и указал в transform
1612x1080, 0:24
Вот в нем изначально есть два объекта (Placeholder и Text) с компонентом Text. В Placeholder в редакторе написано "Enter text...", Text соответственно пустой.
Запускаю игру кликаю на графу, где будет имя игрока - курсор прыгает в начало строки. Начинаю там писать "Ivanov_Michail_Alekseevich", "Enter text..." в Placeholder затирается и теперь в обоих объектах в редакторе написано "Ivanov_Michail_Alekseevich". И здесь все работает просто охуенно - можно ткнуть курсором в любую точку и начать редактировать имя, в компонентах Text обоих объектов (Placeholder и Text) в редакторе отображается один и тот же текст.
Теперь я пишу скрипт в котором достаю из ключа сохраненное имя "Ivanov_Michail_Alekseevich" и пытаюсь воссоздать ситуацию одним текстом в обоих объектах. В старте у меня условно задается:
placeholder_.text = "Ivanov_Michail_Alekseevich";
text_.text = "Ivanov_Michail_Alekseevich";
И тут я просто охуеваю, ебаный text_.text, который ничем не отличается от placeholder_.text нихуя не прописывается ни через старт, ни вообще никак. Он тупо всегда пустой, пока ты не начнеш вводить в него текст через игру.
В итоге в объекте Placeholder стоит "Ivanov_Michail_Alekseevich". В объекте Text нихуя. При попытке отредактировать текст с именем игрока, например, с "Ivanov_Michail_Alekseevich" на "Ivanov_Michail_Alekseevich_theBest", курсор прыгает в начало строки, т.к. text_.text пустой. И все имя просто затирается нахуй. Зачем делать такую реализацию для меня большая загадка, почему два объекта которые в принципе идентичны ведут себя по разному. Кому бы помешала возможность ввести текст через скрипт? Не хочешь не вводи, блеать, он будет пустой. Нухуя просто выключать такую возможность без объяснений. Въебал полдня на экспериментах с кодом, просто пиздец
1910x1034, 0:39
не скажу точно, но скорее всего 2д эффект, особенно тень вокруг круглого ствола его создаёт, а так может несколько спрайтов использовалось для параллакса
Вчера весь день с 11:00 до 01:00 следующих суток ебашил код и ковырялся в редакторе, отвлекаясь максимум на минут 20, на пожрать и посрать,
Сейчас у меня болит башка, мозг нихуя не соображает, глаза щиплет, настроение поганое, болит спина и шея.
И это не впервые, иногда вот что-то заставляет тебя сильно ебашить, то ли желание поскорее закончить, то ли просто силушки появились хз, но чрезмерно ебашить - это проблемы. Еще по работе сегодня дали задание (гд - это хобби), простое, но мозг тупит и соображает хуево.
Ладно, сегодня отдыхаю и ничего не делаю и самое главное ни о чем не думаю
Кризис заставил людей больше работать, не отвлекаясь на гд?
Мобилизовали?
Или годот переманил их?
Ну впрочем ладно, меньше конкурентов
Просто хочу поделиться моментом, в котором я сейчас нахожусь.
Три с половиной года вкатываюсь в айти.
Год - в геймдев.
С июля 2023 года - в Unity.
За эти полгода я прошел несколько курсов, сейчас сижу и пушу проекты по Unity на ГитХаб.
У меня куча идей, хочу их реализовать - и возможно стать мультимиллионером.
Также чувствую, что-то еще немного поднажать, пару месяцев - и смогу претендовать на позицию джуна (наверное).
Не в одно другое направление айти я так глубоко не вкатывался, как сюда - хотя перепробовал практически все.
Но в то же время я не уважаю геймдев.
"Посмотрите, игры он разрабатывает", "Тебе сколько лет?", "А тебе это вообще интересно, игрульки?"
Нет, не интересно.
В игры, кроме гиперказуалок типа Vampire Survivors и прочего не играю.
И не уважаю.
Но в голове засела идея, что в геймдеве я заработаю миллионы.
В принципе, пара проектов на ГитХаб, публикация проектов в Google Play, Steam, Yandex играх - и можно если не грести деньги лопатой, то хотя бы искать работу.
Но найду ли я работу?
Может не стоит сюда лезть, раз не уважаю геймдев?
На работу ходить не хочу, хочу получать деньги, сидя дома.
Я даже для себя вопрос сформулировать не могу, не то что для вас.
Но попробую.
Два стула.
Первый: поднажать, выпустить в Google Play / Steam / Yandex играх несколько игр.
Забить на чувство неуверенности, "Это дело я не уважаю", в голове.
Начать получать деньги с разработки игр - и надеяться что деньги перебьют чувство неуверенности.
Мол, вот подниму я денег, куплю себе квартиру, автомобиль, найду себе красивую девушку - и все это благодаря деньгам с геймдева.
Увижу респект со стороны коллег и игроков - после этого всего мысли в голове встанут на место.
Второй стул: забить на геймдев, на год учебы, вкатываться в веб - и надеяться что найду работу, на которой смогу работать по удаленке (ибо ножками я никуда ходить не буду).
Ибо веб я уважаю больше, чем геймдев (именно уважаю, но не люблю - делать приложения скучнее, чем игры).
Третий стул (а точнее сидение посередке, на двух стульях): вкатываться и туда и сюда.
Задумывался над тем, что если исключить все лишнее из жизни, то 6 часов в день я могу тратить на изучение геймдева, а еще 6 - на веб.
Не сочтите за наглость, но очень прошу вашего мнения (и личного опыта по данному вопросу).
Просто хочу поделиться моментом, в котором я сейчас нахожусь.
Три с половиной года вкатываюсь в айти.
Год - в геймдев.
С июля 2023 года - в Unity.
За эти полгода я прошел несколько курсов, сейчас сижу и пушу проекты по Unity на ГитХаб.
У меня куча идей, хочу их реализовать - и возможно стать мультимиллионером.
Также чувствую, что-то еще немного поднажать, пару месяцев - и смогу претендовать на позицию джуна (наверное).
Не в одно другое направление айти я так глубоко не вкатывался, как сюда - хотя перепробовал практически все.
Но в то же время я не уважаю геймдев.
"Посмотрите, игры он разрабатывает", "Тебе сколько лет?", "А тебе это вообще интересно, игрульки?"
Нет, не интересно.
В игры, кроме гиперказуалок типа Vampire Survivors и прочего не играю.
И не уважаю.
Но в голове засела идея, что в геймдеве я заработаю миллионы.
В принципе, пара проектов на ГитХаб, публикация проектов в Google Play, Steam, Yandex играх - и можно если не грести деньги лопатой, то хотя бы искать работу.
Но найду ли я работу?
Может не стоит сюда лезть, раз не уважаю геймдев?
На работу ходить не хочу, хочу получать деньги, сидя дома.
Я даже для себя вопрос сформулировать не могу, не то что для вас.
Но попробую.
Два стула.
Первый: поднажать, выпустить в Google Play / Steam / Yandex играх несколько игр.
Забить на чувство неуверенности, "Это дело я не уважаю", в голове.
Начать получать деньги с разработки игр - и надеяться что деньги перебьют чувство неуверенности.
Мол, вот подниму я денег, куплю себе квартиру, автомобиль, найду себе красивую девушку - и все это благодаря деньгам с геймдева.
Увижу респект со стороны коллег и игроков - после этого всего мысли в голове встанут на место.
Второй стул: забить на геймдев, на год учебы, вкатываться в веб - и надеяться что найду работу, на которой смогу работать по удаленке (ибо ножками я никуда ходить не буду).
Ибо веб я уважаю больше, чем геймдев (именно уважаю, но не люблю - делать приложения скучнее, чем игры).
Третий стул (а точнее сидение посередке, на двух стульях): вкатываться и туда и сюда.
Задумывался над тем, что если исключить все лишнее из жизни, то 6 часов в день я могу тратить на изучение геймдева, а еще 6 - на веб.
Не сочтите за наглость, но очень прошу вашего мнения (и личного опыта по данному вопросу).
Лично я выгорел. Кучу проектов в стол делал, нихуя не вышло. Щас просто работаю и нихуя не делаю.
1280x720, 0:04
скройся хуета
Заметь, что там тень только от ствола без веток. т.е. реализация в 2д крайне простая (вращают вытянутую трапецию вокруг ствола с простой формулой трансформации в зависимости от приближения игрока), реализация в 3д крайне Не затратная по ресурсам. В общем оба варианта годятся, но я думаю это чистое 3д
>ObjCanvas.transform.GetChild(0).GetChild(0).GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>();
Ебать это страшно! Юзай трансформ поиск по названию. В твоем случае получится типа такого Canvas/Panel/Button/Text.
Если обьектов много по похоже пути то вносишь начальный путь Canvas/Panel/Panel в переменную и делаешь так String+"/Button/Text".
Людей меньше стало это факт. Ну либо срать стали меньше.
Лично я съебал в годо, и нихуя не жалею даже. Юнити движок нихуя не для соло разработки, я без шуток тупо заебался ждать ебучей компиляции, что тащемто и стало главным тригером, ну и шизик ричитело еще добавил уверенности в том что надо валить с тонущего корабля.
Cап, на связи начинающий юнити энджойер. Буквально несколько дней осваиваю редактор, еще толком нихуя не разобрался. Хочу спросить, есть ли пиратские ассеты, где их искать и как устанавливать? уже пробовал поставить какую-то спираченную херню, но не встало из-за несоответствий версии
Все эти сайты free assets злоебучие просто пиздец. То просто 404 по всем ссылкам, то ругается на адблок, которого в браузере нет, и не дает скачивать, в общем, как будто специально все сделано так, чтобы хуй ты до этого контента добрался.
640x408, 0:48
Гравитация в проекте отключена - по нулям стоит.
Так смотри что у него в контроллере, апдейты там всякие, еще чекни если есть инерция в коде она может быть. Еще вариант что не перс ползет а камера или задник.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed;
public Animator animator;
private void Awake()
{
animator = GetComponent<Animator>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 moveInput = new Vector3(0f, 0f, 0f);
moveInput.x = Input.GetAxisRaw("Horizontal");
moveInput.y = Input.GetAxisRaw("Vertical");
moveInput.Normalize();
transform.position += moveInput moveSpeed Time.deltaTime;
if(moveInput != Vector3.zero)
{
animator.SetBool("Move", true);
}
else
{
animator.SetBool("Move", false);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed;
public Animator animator;
private void Awake()
{
animator = GetComponent<Animator>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 moveInput = new Vector3(0f, 0f, 0f);
moveInput.x = Input.GetAxisRaw("Horizontal");
moveInput.y = Input.GetAxisRaw("Vertical");
moveInput.Normalize();
transform.position += moveInput moveSpeed Time.deltaTime;
if(moveInput != Vector3.zero)
{
animator.SetBool("Move", true);
}
else
{
animator.SetBool("Move", false);
}
}
}
Двач не отображает знак умножения.
transform.position += moveInput x moveSpeed x Time.deltaTime;
>Еще вариант что не перс ползет а камера или задник.
Мде. Советчик из тебя так себе.
>>33740
Сейчас назову причину со 100% попаданием. Во первых для перемещения ты юзаешь телепортацию, то есть transform.position, а не физику, ибо при перемещении перс так же летит в сторону. Во вторых, при старте коллизия перса и коллизия врага сталкиваются и по физике отталкиваются, поэтому персонаж летит в сторону по инерции. А летит он как раз из за первого пункта. Тут конечно же последует логичный вопрос, а чому враг тогда не летит в другую сторону, ну а тут есть два варианта ответа, если он так же двигается телепортацией, то по факту он все еще летит в другую сторону по физике, просто это не заметно ибо позиция меняется в каждом кадре, убрав коллизию враг чудесным образом побежит быстрее, ну а второй вариант то что двигается по физике, поэтому и не отлетает.
>transform.position
Ну о чем я и писал.
Используй Rigidbody2D для движения.
rigidbody.velocity = moveInput x moveSpeed x delta
ОК, попробую, спасибо.
public class PlayerMovement : MonoBehaviour
{
public Rigidbody2D theRigidbody;
public float moveSpeed;
public Animator animator;
private void Awake()
{
theRigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 moveInput = new Vector3(0f, 0f, 0f);
moveInput.x = Input.GetAxisRaw("Horizontal");
moveInput.y = Input.GetAxisRaw("Vertical");
moveInput.Normalize();
theRigidbody.velocity = moveInput moveSpeed Time.deltaTime;
if(moveInput != Vector3.zero)
{
animator.SetBool("Move", true);
}
else
{
animator.SetBool("Move", false);
}
}
}
Добавил Rigidboy, в GUI Unity добавил Rigidbody в пустое поле - вылезают следующие ошибки:
NullReferenceException: Object reference not set to an instance of an object
ArgumentNullException: Value cannot be null.
Parameter name: _unity_self
ArgumentNullException: Value cannot be null.
Parameter name: _unity_self
public class PlayerMovement : MonoBehaviour
{
public Rigidbody2D theRigidbody;
public float moveSpeed;
public Animator animator;
private void Awake()
{
theRigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 moveInput = new Vector3(0f, 0f, 0f);
moveInput.x = Input.GetAxisRaw("Horizontal");
moveInput.y = Input.GetAxisRaw("Vertical");
moveInput.Normalize();
theRigidbody.velocity = moveInput moveSpeed Time.deltaTime;
if(moveInput != Vector3.zero)
{
animator.SetBool("Move", true);
}
else
{
animator.SetBool("Move", false);
}
}
}
Добавил Rigidboy, в GUI Unity добавил Rigidbody в пустое поле - вылезают следующие ошибки:
NullReferenceException: Object reference not set to an instance of an object
ArgumentNullException: Value cannot be null.
Parameter name: _unity_self
ArgumentNullException: Value cannot be null.
Parameter name: _unity_self
640x408, 0:33
Снова закинул Rigidbody в поле для него, включил игру - ошибок нет.
Но Player стоит на месте, не двигается.
Хуй знает че первый екзепшен вылетает, а на следующие можешь забить, это база юнити, так называемая основа. Еще раз закинуть попробуй.
>>33759
>Снова закинул Rigidbody в поле для него, включил игру - ошибок нет.
А ну это классика, привыкай.
>Но Player стоит на месте, не двигается.
Тому что скорость маленькая, у тебя же вон в шебме видно что позиция у тела меняется, поставь скорость 100-250. Слушай че скажу, всю физику пихаешь в FixedUpdate, ищи сам почему, и убирай умножение на дельту в определении скорости.
Time.deltaTime убрал - все сразу заработало.
Но как без Time.deltaTime?
Тогда ведь от кол-ва кадров будет зависеть скорость?
И как же сделать так что бы не зависеть? Я же наверное не просто так написал про FixedUpdate, верно?
>FixedUpdate позволяет обходиться без Time.deltaTime.
Нет. Не правильный вывод. Наведи на FixedUpdate в вскоде и почитай как он работает.
Мы тут не настолько успешные чтоб о деньгах думать
Вот делаю я игру по курсу, там управление под ПК - WASD и стрелки мыши.
Если я захочу сбилдить этот код под Android - мне придется его переписывать, вместо GetAxisRaw("Horizontal") писать что-то другое?
Или есть какой-то другой способ создания управления под мобильные платформы?
Просто сколько курсов не смотрел - все под ПК игру делают.
>GetAxisRaw("Horizontal")
нет
Это самое правильное, зайди в настройки проекта, там все кнопки можно переписать под подобную шляпу. Например прыжок вместо space кнопки, назначают что то вроде "Jump", а в настройке проекта можно привязать к этому слову клавишу space и ещё несколько альтернативных клавиш под консоль.
Единственно, как тебе писали, нужно будет адаптировать под стикеры, так как там свои средства ввода.
И не удивительно, что все туторы ничего не пишут под андроид, так как несмотря на кажущуюся простоту, мобильная разработка представляется более сложной разработкой из-за кучи подводных камней, типо разрешений экрана, а так как туторы рассчитаны в большинстве своём на новичков, поэтому обычно никто не усложняет материал в видео, но и такие туторы по юнити есть, их нужно просто поискать.
>Creating materials from shader source string is no longer supported.
хех мда
Есть два куска кода, которые должны выполняться в методе Start
Первый выглядит вот так:
if (weaponEquipped)
{
if (weaponType == "Longsword")
{
Debug.Log("For the queen!");
}
}
else
{
Debug.Log("Fists aren't going to work against armor...");
}
Второй вот так:
if (currentGold > 50)
{
Debug.Log("You got a fuckload of money! Be careful");
}
else if (currentGold < 15)
{
Debug.Log("Looks like you are broke. That's sad.");
}
else
{
Debug.Log("It seems you have just the right amount of money.");
}
При запуске игры первый код вообще не отрабатывает как будто. В консоли не появляются сообщения.
Второй отрабатывает и сообщения появляются.
Я не могу понять почему так получается.
Есть два куска кода, которые должны выполняться в методе Start
Первый выглядит вот так:
if (weaponEquipped)
{
if (weaponType == "Longsword")
{
Debug.Log("For the queen!");
}
}
else
{
Debug.Log("Fists aren't going to work against armor...");
}
Второй вот так:
if (currentGold > 50)
{
Debug.Log("You got a fuckload of money! Be careful");
}
else if (currentGold < 15)
{
Debug.Log("Looks like you are broke. That's sad.");
}
else
{
Debug.Log("It seems you have just the right amount of money.");
}
При запуске игры первый код вообще не отрабатывает как будто. В консоли не появляются сообщения.
Второй отрабатывает и сообщения появляются.
Я не могу понять почему так получается.
Потому что выполняется if (weaponEquipped), но потом проверку не проходит if (weaponType == "Longsword"), а else у него нету, вот и пустота.
if (weaponType == "Longsword")
{
Debug.Log("For the queen!");
}
здесь ошибка.
У тебя не обрабатывается условие
хочешь сообщение
добавь
else
{
Debug.Log("Я неуч который не знает базы языка.");
}
640x408, 0:36
И почему-то, когда врагов спавнится несколько штук - героя начинает коцать, хотя враги от него далеко.
Почему?
public class EnemySpawner : MonoBehaviour
{
public GameObject enemyToSpawn;
public float timeToSpawn;
private float spawnCounter;
// Start is called before the first frame update
void Start()
{
spawnCounter = timeToSpawn;
}
// Update is called once per frame
void Update()
{
spawnCounter -= Time.deltaTime;
if(spawnCounter <= 0)
{
spawnCounter = timeToSpawn;
Instantiate(enemyToSpawn, transform.position, transform.rotation);
}
}
}
public class EnemyMovement : MonoBehaviour
{
public Rigidbody2D theRigidbody;
public float moveSpeed, damage;
private Transform target;
public float hitWaitTime = 0.5f;
private float hitCounter;
// Start is called before the first frame update
void Start()
{
target = FindObjectOfType<PlayerMovement>().transform;
moveSpeed = Random.Range(moveSpeed 0.8f, moveSpeed 1.2f);
}
// Update is called once per frame
void FixedUpdate()
{
theRigidbody.velocity = (target.position - transform.position).normalized moveSpeed;
if(hitCounter > 0)
{
hitCounter -= Time.deltaTime;
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(PlayerHealth.instance.tag == "Player" && hitCounter <= 0f)
{
PlayerHealth.instance.TakeDamage(damage);
hitCounter = hitWaitTime;
}
}
}
public class PlayerMovement : MonoBehaviour
{
public Rigidbody2D theRigidbody;
public float moveSpeed;
public Animator animator;
private void Awake()
{
theRigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void FixedUpdate()
{
Vector3 moveInput = new Vector3(0f, 0f, 0f);
moveInput.x = Input.GetAxisRaw("Horizontal");
moveInput.y = Input.GetAxisRaw("Vertical");
moveInput.Normalize();
theRigidbody.velocity = moveInput moveSpeed;
if(moveInput != Vector3.zero)
{
animator.SetBool("Move", true);
}
else
{
animator.SetBool("Move", false);
}
}
}
public class PlayerHealth : MonoBehaviour
{
public static PlayerHealth instance;
public float currentHealth, maxHealth;
public Slider healthSlider;
private void Awake()
{
instance = this;
healthSlider.maxValue = maxHealth;
healthSlider.value = currentHealth;
}
// Start is called before the first frame update
void Start()
{
currentHealth = maxHealth;
}
// Update is called once per frame
void Update()
{
}
public void TakeDamage(float damage)
{
currentHealth -= damage;
if(currentHealth <= 0)
{
gameObject.SetActive(false);
}
healthSlider.value = currentHealth;
}
}
640x408, 0:36
И почему-то, когда врагов спавнится несколько штук - героя начинает коцать, хотя враги от него далеко.
Почему?
public class EnemySpawner : MonoBehaviour
{
public GameObject enemyToSpawn;
public float timeToSpawn;
private float spawnCounter;
// Start is called before the first frame update
void Start()
{
spawnCounter = timeToSpawn;
}
// Update is called once per frame
void Update()
{
spawnCounter -= Time.deltaTime;
if(spawnCounter <= 0)
{
spawnCounter = timeToSpawn;
Instantiate(enemyToSpawn, transform.position, transform.rotation);
}
}
}
public class EnemyMovement : MonoBehaviour
{
public Rigidbody2D theRigidbody;
public float moveSpeed, damage;
private Transform target;
public float hitWaitTime = 0.5f;
private float hitCounter;
// Start is called before the first frame update
void Start()
{
target = FindObjectOfType<PlayerMovement>().transform;
moveSpeed = Random.Range(moveSpeed 0.8f, moveSpeed 1.2f);
}
// Update is called once per frame
void FixedUpdate()
{
theRigidbody.velocity = (target.position - transform.position).normalized moveSpeed;
if(hitCounter > 0)
{
hitCounter -= Time.deltaTime;
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(PlayerHealth.instance.tag == "Player" && hitCounter <= 0f)
{
PlayerHealth.instance.TakeDamage(damage);
hitCounter = hitWaitTime;
}
}
}
public class PlayerMovement : MonoBehaviour
{
public Rigidbody2D theRigidbody;
public float moveSpeed;
public Animator animator;
private void Awake()
{
theRigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void FixedUpdate()
{
Vector3 moveInput = new Vector3(0f, 0f, 0f);
moveInput.x = Input.GetAxisRaw("Horizontal");
moveInput.y = Input.GetAxisRaw("Vertical");
moveInput.Normalize();
theRigidbody.velocity = moveInput moveSpeed;
if(moveInput != Vector3.zero)
{
animator.SetBool("Move", true);
}
else
{
animator.SetBool("Move", false);
}
}
}
public class PlayerHealth : MonoBehaviour
{
public static PlayerHealth instance;
public float currentHealth, maxHealth;
public Slider healthSlider;
private void Awake()
{
instance = this;
healthSlider.maxValue = maxHealth;
healthSlider.value = currentHealth;
}
// Start is called before the first frame update
void Start()
{
currentHealth = maxHealth;
}
// Update is called once per frame
void Update()
{
}
public void TakeDamage(float damage)
{
currentHealth -= damage;
if(currentHealth <= 0)
{
gameObject.SetActive(false);
}
healthSlider.value = currentHealth;
}
}
Еще вылазит следующая ошибка.
NullReferenceException: Object reference not set to an instance of an object
EnemyMovement.Start () (at Assets/Scripts/EnemyMovement.cs:17)
// Start is called before the first frame update
void Start()
{
target = FindObjectOfType<PlayerMovement>().transform;
moveSpeed = Random.Range(moveSpeed 0.8f, moveSpeed 1.2f);
}
Здесь ошибка
если хочешь чтобы мобы при рождении искали игрока
то нужно сначала найти его на сцене, по имени или тегу
потом достать его компонент.
private GameObject player;
private Transform transform;
/////////////////////start///////////////////
player = GameObject.FindGameObjectWithTag("Player");
if(player != null)
{
transform = player.GetComponent<Transform>();
//print("мы нашли игрока");
}
>>34225
Нахуй ты это полотно выкатил?
// Start is called before the first frame update
void Start()
{
target = FindObjectOfType<PlayerMovement>().transform;
moveSpeed = Random.Range(moveSpeed 0.8f, moveSpeed 1.2f);
}
Здесь ошибка
если хочешь чтобы мобы при рождении искали игрока
то нужно сначала найти его на сцене, по имени или тегу
потом достать его компонент.
private GameObject player;
private Transform transform;
/////////////////////start///////////////////
player = GameObject.FindGameObjectWithTag("Player");
if(player != null)
{
transform = player.GetComponent<Transform>();
//print("мы нашли игрока");
}
>>34225
Нахуй ты это полотно выкатил?
Клоун блядь.
>>34093
Оба фрагмента кода взяты из книги с приложенной картинки. Я их по сути повторил в VS в процессе обучения чтобы закрепить тему условных конструкций.
Сами фрагменты кода прикрепляю так как они выглядят в VS.
Как я понимаю в случае того когда, который не работает (первый фрагмент кода), есть блок else. и если два блока if при проверке возвращают false, то по идее должен отработать блок else.
При этом оба if должны возвращать true, так как проверяемые переменные имеют искомые значения.
Короче я пока не понимаю почему так выходит. Возможно ошибка в самой книге, что значит не того человека неучем назвали. Попробую последовать совету и заставить этот код работать.
К сожаленью для тебя у меня есть эта книга на столе.
Читаем, что там написано.
стр 109
верхний абзац
>Если первый оператор if имеет значение false, то код перейдёт к оператору else и выполнит его. Если второй оператор if тоже будет иметь значение false, то ничего не выведется, поскольку блока else у него нет.
Мы всё правильно назвали. Ты неуч.
>Возможно ошибка в самой книге
На самом деле хорошая книга, да там есть несколько неприятных опечаток, которые можно упустить по невнимательности, но книга всяко лучше юнити в действии.
Ну а я что, ванга?
Там может десяток быть причин, причём если код не выдаёт ошибки, значит скорее всего ты проебал, что-то в инспекторе или физик бокс на спрайте врага огромный и ты не замечаешь его или твои враги не умирают, а просто становятся невидимыми, или ты где-то зоны сделал, которые дамажут игрока.
Следи за кодом игрока пересмотри его поведение и код на получения дамага.
Ты такой молодец и самоутверждаешься за счет других.
Сказать что при сравнении двух строк второй if тоже возвращал false, и поэтому код не работал так как ожидалось, ты видимо не можешь в силу своего скверного характера.
>самоутверждаешься за счет других
поплачь.
>ты видимо не можешь в силу своего скверного характера.
Да, не могу, потому что в своё время когда я приходил сюда с подобными вопросами, меня просто поливали грязью и отправляли читать документацию.
>поплачь.
Да не, я лучше пойду подумаю над тем что я в итоге узнал.
В итоге то я понял в чем была проблема.
>Да, не могу, потому что в своё время когда я приходил сюда с подобными вопросами, меня просто поливали грязью и отправляли читать документацию.
Ну и теперь ты решил повторять такую славную традицию, став тем кто тебя хуесосил. Окей. Отыгрывайся на других дальше
>Ну и теперь ты решил повторять такую славную традицию, став тем кто тебя хуесосил.
Всё верно, вот только правильных ответов я от них не получал.
Нет, ты просто такой же лоускилл лол, там нихуя знать не надо для того что бы увидеть в чем проблема.
>>34225
>private void OnCollisionEnter2D(Collision2D collision)
Ну это же литерали шизофриния у тебя творится там чел. Ты вообще читал про колизии и то как их детектить? У тебя при любой коллизиции вызывается эта строчка:
>if(PlayerHealth.instance.tag == "Player" && hitCounter <= 0f)
Очевидно ты лееры не настраивал в физике проекта, да ты наверное даже их не добавлял скорее всего, поэтому враги когда сталкиваются друг с другом у них в скрипте вызывается OnCollisionEnter2D, а так как ты в строчке выше ищешь игрока по синглтону, лол, то проверка для получение урона срабатывает в любом случае, даже если твоего перса никто не касается. Смотри пикрил и пробуй.
>там нихуя знать не надо для того что бы увидеть в чем проблема.
Ааххаха, ты ничем не лучше него. Такой же нубарь, но думающий что знает всё.
Как раз из-за не знания точно что в проекте у пчелика легко можно делать ложные выводы.
Короче гит гуд.
Это тролленг тупостью? Или ты на серьезном ебало не можешь увидеть в чем была у него ошибка лол, даже после того как я написал ее.
Бля чел не позорься дальше, а.
То как то смешно когда попытался опустить других, а тут нашлась рыбка покрупнее и опустила уже тебя.
Ага, держи вкурсе.
Санкции
>Мол, вот подниму я денег
Не поднимешь, хоть уважай хоть нет, ты попробуешь, соснешь хуйца и затерпишь
Спасибо, помогло.
Только теперь OnCollisionEnter2D подчеркнуто зеленым - и надпись: UNT0006 Incorrect message signature
This Unity message uses an incorrect method signature.
А при запуске игры (игра играется, все ОК) вылазит следующая ошибка:
Script error: OnCollisionEnter2D
This message parameter has to be of type: Collision2D
The message will be ignored.
Что именно не работает? Если ты в физике взаимодействие слоев выставлял, то не забудь игроку поставь слой игрока а врагу врага.
Дебаг строку добавь в блок if, Debug.Log("Current"), так же добавь блок else и в нем тоже Debug.Log("Error" + " " + collision.gameobject.tag + " not player").
712x408, 0:58
Я использовал твой код - он не работает.
Подчеркивает красным GetComponent.
Удалил тот код, ошибка заключалась в том что я про слои забыл.
Физику поправил в настройках.
Правда теперь враги вообще проходят сквозь друг друга.
>Подчеркивает красным GetComponent
Мда, ну значит пиши collision.gameobject.GetComponent<PlayerHealth>(), сложно догадаться чтоль.
>Правда теперь враги вообще проходят сквозь друг друга.
Ну так ты отключил у них столкновение колизий, естественно будут проходить.
Проблема была не в физике, а в том что твой код дерьмище ебаное, так нельзя писать, неужели ты этого не понимаешь, поэтому и не работает нихера нормально. Ты вот прям сейчас, оставь свой код, добавь в сцену квадрат, повесь на него колайдер и поставь тег плеер, в плеймоде начни этим квадратом водить по врагам, а потом доставь фотку своего лица.
Он как раз эту хуйню пишет по книгам лол, а сюда приходит потому что та писанина не работает.
TextMeshProUGUI text = ObjCanvas.transform.Find("Твой/Путь/До/Компонента").GetComponent<TextMeshProUGUI>();
имей в виду что если поменяется путь к компоненту, то тебе и в коде его менять придется
а у сериализированных/публичных полей такой проблемы нет - перетащил и куда хочешь двигай. так что решай сам что тебе удобнее
>Он как раз эту хуйню пишет по книгам лол, а сюда приходит потому что та писанина не работает.
Если бы он внимательнее изучал то что написано в книгах, то всё бы работало.
Это нужно быть полным ебланом, чтобы называть информацию в книгах - "хуйню пишет по книгам " и "писанина не работает"
>Мда, ну значит пиши collision.gameobject.GetComponent<PlayerHealth>(), сложно догадаться чтоль.
Из-за этого первоначально код неправильно написал.
Сейчас исправил - все заработало, без слоев и их отключения.
Спасибо.
Прикрепляю скрины настроек канваса и скрипта камеры
Прикрепляю видео (на нём бандикам не записал курсор , он там нажимает нормально на кнопки , а когда я его прячу ничего не нажимается)
И что? Как это должно мешать?
Когда запускаю игру, сначала все ОК, но потом игра останавливается со следующими ошибками:
1) ObjectDisposedException: SerializedProperty spawnedEnemies.Array.data[11] has disappeared!
2) type is not a supported pptr value
UnityEditor.RetainedMode:UpdateSchedulers ()
Код:
void Update()
{
spawnCounter -= Time.deltaTime;
if(spawnCounter <= 0)
{
spawnCounter = timeToSpawn;
GameObject newEnemy = Instantiate(enemyToSpawn, SelectSpawnPoint(), transform.rotation);
spawnedEnemies.Add(newEnemy);
}
transform.position = target.position;
int checkTarget = enemyToCheck + checkPerFrame;
while (enemyToCheck < checkTarget)
{
if(enemyToCheck < spawnedEnemies.Count)
{
if (spawnedEnemies[enemyToCheck] != null)
{
if(Vector3.Distance(transform.position, spawnedEnemies[enemyToCheck].transform.position) > despawnDistance)
{
Destroy(spawnedEnemies[enemyToCheck]);
spawnedEnemies.RemoveAt(enemyToCheck);
checkTarget--;
}
else
{
enemyToCheck++;
}
}
else
{
spawnedEnemies.RemoveAt(enemyToCheck);
checkTarget--;
}
}
else
{
enemyToCheck = 0;
checkTarget = 0;
}
}
}
Когда запускаю игру, сначала все ОК, но потом игра останавливается со следующими ошибками:
1) ObjectDisposedException: SerializedProperty spawnedEnemies.Array.data[11] has disappeared!
2) type is not a supported pptr value
UnityEditor.RetainedMode:UpdateSchedulers ()
Код:
void Update()
{
spawnCounter -= Time.deltaTime;
if(spawnCounter <= 0)
{
spawnCounter = timeToSpawn;
GameObject newEnemy = Instantiate(enemyToSpawn, SelectSpawnPoint(), transform.rotation);
spawnedEnemies.Add(newEnemy);
}
transform.position = target.position;
int checkTarget = enemyToCheck + checkPerFrame;
while (enemyToCheck < checkTarget)
{
if(enemyToCheck < spawnedEnemies.Count)
{
if (spawnedEnemies[enemyToCheck] != null)
{
if(Vector3.Distance(transform.position, spawnedEnemies[enemyToCheck].transform.position) > despawnDistance)
{
Destroy(spawnedEnemies[enemyToCheck]);
spawnedEnemies.RemoveAt(enemyToCheck);
checkTarget--;
}
else
{
enemyToCheck++;
}
}
else
{
spawnedEnemies.RemoveAt(enemyToCheck);
checkTarget--;
}
}
else
{
enemyToCheck = 0;
checkTarget = 0;
}
}
}
причина тряски хуета?
680x420, 0:44
Второму экземпляру меняю дефолтную анимацию.
У первого врага анимация тоже меняется.
Как сделать, чтобы у разных врагов была разная анимация?
Нашел ответ.
Я брал для экземпляра префаба врага - и менял анимацию второму врагу, после чего делал из него префаб.
НО я не менял второму префабу amimator - на обоих врагах был один и тот же Animator 1, а там соответственно одна и та же анимация.
Посоветуйте как решить проблемы.
Гуглил, решил проблему.
Layer в префабе врага был пустым - поменял его на default.
И ошибка исчезла.
>Выносить в отдельный канвас считаю глупо
у тебя все в одном канвасе что ли? земля пухом бротиш
Ага абсолютно все: перекрестие, кнопки: Новая игра, продолжить, настройки, выход. И панель: настройки со слайдерами (громкость, чувсвитетнльность) и dropdown (качество, язык).
Много, правда? Надо бы все хорошенько переорганизовать на обособленные канвасы, не правда ли?
Звучит глупо, получается что на маленьком экраничке это будет залупа на полэкрана, а на большом телевизоре - придется с лупой рассматривать.
не трясись
несколько канвасов это дешево, сердито и сразу же решит твою проблему
альтернативы имеются, но они гораздо заебнее
Игру свою показывай, хуиньёр
Тут проблема в CPU и HDD. Ну и не стоит каждую секунду сохранять изменения.
У меня на проекте из 300+ скриптов, секунд 5 занимает перезапись.
Есть персонаж, движение задается через увеличение velocity в FixedUpdate, прыжок тоже через velocity в Update.
Пробовал делать следящую камеру через сinemachine и просто скриптом.
Но получалось, что фон начинается неравномерно дергаться при движении. Если закидывать скрипт камеры в LateUpdate. Фон становится плавнее, но дергаются спрайты при прыжке (эффект легкого качания).
Уже несколько дней борюсь с этим и пока не могу найти причину проблемы.
картинка для привлечения внимания
Помогло отключение плавного слежение за персонажем ( выставление damping в 0 в сinemachine).
Но хочется оставить слежение и не использовать жесткую привязку камеры к персонажу
Просто забей лол, что бы это пофиксить нужно очко наизнанку вывернуть. Я наверное больше месяца ебался с этой хуйней в надежде когда нибудь пофиксить, в итоге просто послал нахуй юнити и ушёл в годо ибо там это фиксится нажатием 1 кнопки лол. Юнити нихуя не приспособлен для 2д игр, что бы сделать банальные на вид вещи нужно такие велосипеды с костылями строить что ахуеть можно, а нахуя это надо адекватному человеку. Поэтому либо меняй движок, либо выдергивай рендер текстуру и пытайся по ней камерой водить.
почалось что?
>почему всё через жопу при работе с dots?
Ты 1й день с юнити, да?
>Нахуя продвигать стек который не работает
Да. С подключением.
Так всегда было, нихуя толком в юнити не работает. Все лучшее - это сторонние пакеты (как правило, платные), либо in-house разработки.
Но голову тебе на собесах энивей выебут по теме технологий, с которыми хуй-то нормально поработаешь.
Гейдев деревня - це кринж.
> Ты 1й день с юнити, да?
Лет 10 знаком
> Так всегда было, нихуя толком в юнити не работает.
Да как будто бы на этой поебени, я конкретно про точки, даже игры в релиз выходят, а как сам работать начинаешь так каждый раз какой-то пиздец и чем глубже закапываешься тем пиздецовее становится
Ну если столько знаком, то должен был застать project tiny, мл и прочую поебень. На сколько направлений юнити вообще не забила хуй? Из моего опыта, они умудрились даже обосрать то, что кое-как работало, в т.ч. работало без них. Недавно вот охуевал от реализации iron source, который просто не работал на определенной версии юнити и версии пакета, что с пердолингом, что без. При этом люди как-то используют его.
>даже игры в релиз выходят
Я только гиперкеж знаю, который дотс использовал, с очень коротким периодом жизни. Т.е. не надо особо парится о поддержке.
Все остальные компании используют кастомные решения.
Вообще, ецс и дотс сильно переоценены. Достаточно просто оптимизировать написанный код и не писать через жопу.
> даже игры в релиз выходят
С дотсом? Да, наприер ситиес скайлайн 2. Помнишь как они обосрались? Потому что куллинга в хдрп дотс рендере нормального не было и пришлось писать свой, который был говном. А можно было изначально дотс не юзать и просто распараллелить джобами или там паттерн флайвейт или че ещё.
> С дотсом?
Ну мне v rising на ум в первую очередь приходит, потому что работает он отлично и почти в релиз добрался кста
Ну там вроде как вся карта сразу постоянно обсчитывается и все это дело в мультиплеере
Создаю как надо, через тулзу, задаю параметры 500х500 или 1000х1000, террейн создается, но он сука маленький шопиздец, занимает всего одну клеточку, при этом это в новом проекте, где я вообще ничего никаких параметров не трогал. Не могу найти, где это настраивается.
И еще такой вопрос - как настроить высоту, чтобы горы в потолок не упирались?
> Как только ее видят, то сразу вертят носом.
Лол это же наоборот хороший признак. Означает что ты готов работать над нудной хуйней
Я тебе больше скажу, хорошие м3 проекты - пиздец какой челлендж по нормальному перформансу, скрытого деливери сжатого контента, архитектуре, расширяемости и поддержке кода (что бы все не развалилось и 10 лет подряд припизднутые гд с джунами могли накидывать фичи) и прочим и прочим хайлоад и оптимизационным штукам, о которых БОЛЬШИЕ СЕРЬЕЗНЫЕ ПРОЕКТЫ даже и не думают, а тупо быдлокодят.
Только вот доказывать это заебешься очередной хрюше или надутому дяде, который над БОЛЬШИМ СЕРЬЕЗНЫМ ПРОЕКТОМ работал в БОЛЬШОЙ УВАЖАЕМОЙ КОМПАНИИ, а не эти ваши хуйни для домохозяек.
Нигде не получится. Анрил вообще обсирается на большие дистанции.
Физика процессов одна и та же - сколько отдал объектов на рендеринг - столько гпу и будет усираться. Хоть юнити, хоть нет.
Методы оптимизации тоже везде одни и те же - лоды, трейторы, батчинг, отключение объектов.
Если бы это было возможно, тогда любой графически подкованный кирилл сделал бы свою неебически красивую бродилку для бюджетных компов.
вроде тебе пакэдж ProBuilder нужен
>Винда стоит на hdd
Файл подкачки и прочие системные вещи тоже расположены на хдд, и если юнити часто это использует то загружен будет именно хдд.
мимо диванный
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[Header("Input")]
public KeyCode attackKey = KeyCode.Mouse0;
public KeyCode jumpKey = KeyCode.Space;
public string xMoveAxis = "Horizontal";
[Header("Movement")]
public float speed =5f;
public float jumpForce = 6f;
public float groundedLeeway = 0.1f;
private Rigidbody rb2D = null;
private float moveIntentionX = 0;
private bool attemptJump = false;
private bool attemptAttack = false;
// Start is called before the first frame update
void Start()
{
if(GetComponent<Rigidbody2D>())
{
rb2D = GetComponent<Rigidbody>();
}
}
// Update is called once per frame
void Update()
{
GetInput();
HandleJump();
HandleAttack();
}
void FixedUpdate()
{
}
private void GetInput()
{
moveIntentionX = Input.GetAxis(xMoveAxis);
attemptAttack = Input.GetKeyDown(attackKey);
attemptJump = Input.GetKeyDown(jumpKey);
}
private void HandleRun()
{
if(moveIntentionX > 0 && transform.rotation.y == 0)
{
transform.rotation = Quaternion.Euler(0, 180f, 0);
}
else if (moveIntentionX < 0 && transform.rotation.y !=0)
{
transform.rotation = Quaternion.Euler(0, 0, 0);
}
rb2D.velocity = new Vector2(moveIntentionX * speed, rb2D.velocity.y);
}
private void HandleJump()
{
}
private void HandleAttack()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[Header("Input")]
public KeyCode attackKey = KeyCode.Mouse0;
public KeyCode jumpKey = KeyCode.Space;
public string xMoveAxis = "Horizontal";
[Header("Movement")]
public float speed =5f;
public float jumpForce = 6f;
public float groundedLeeway = 0.1f;
private Rigidbody rb2D = null;
private float moveIntentionX = 0;
private bool attemptJump = false;
private bool attemptAttack = false;
// Start is called before the first frame update
void Start()
{
if(GetComponent<Rigidbody2D>())
{
rb2D = GetComponent<Rigidbody>();
}
}
// Update is called once per frame
void Update()
{
GetInput();
HandleJump();
HandleAttack();
}
void FixedUpdate()
{
}
private void GetInput()
{
moveIntentionX = Input.GetAxis(xMoveAxis);
attemptAttack = Input.GetKeyDown(attackKey);
attemptJump = Input.GetKeyDown(jumpKey);
}
private void HandleRun()
{
if(moveIntentionX > 0 && transform.rotation.y == 0)
{
transform.rotation = Quaternion.Euler(0, 180f, 0);
}
else if (moveIntentionX < 0 && transform.rotation.y !=0)
{
transform.rotation = Quaternion.Euler(0, 0, 0);
}
rb2D.velocity = new Vector2(moveIntentionX * speed, rb2D.velocity.y);
}
private void HandleJump()
{
}
private void HandleAttack()
{
}
}
Ты читать не умеешь?
> Input Axis horizontal is not setup.
У тебя проблема со стрингом.
Это хуета public string xMoveAxis = "Horizontal";
Не соответствует названию настроенном у тебя в проекте, двачую там
"horizontal", перейди в Edit-> Settings -> Input и запиши в переменную тот стринг, который указан там.
Бля, ты думаешь я совсем тупой? Я понимаю, что проблема со стрингом, но она нихуя не решается. Я уже часа 3 сижу из-за этой хуйни. Столько методов перепробовал, что пиздец. Нигде нормально ничего не объясняют, заебали. Я, если что, первый раз юнити открыл.
>Edit-> Settings -> Input и запиши в переменную тот стринг, который указан там.
Вот это я не понимаю. У меня по другому выглядит это. Edit- Project Settings - Input Manager. Пикрил. Куда тут стринг записывать?
Алсо, он и другие ошибки выдает. При попытке дебага (Assembly-CSharp.csproj' does not support debugging. No launchable target found.) С этой хуйней тоже заебался возиться.
Ну ты вот сам логично подумай нахуя это писать?
Наверное чтобы кнопки работали у тебя на прикл=репе пустые кнопки и ты хочешь чтобы они работали?
И да просто возьми и тупо скопипасть стринг Horizontal, у тебя может быть пробел и ты просто его не видишь.
C логотипом но вроде его отключать можно в бесплатной версии. Я пока еще не понял как но я и до билда не дохожу лол.
Завтра попробую, отпишусь. Это пиздец какой то. Я думал об этом, но мне показалось это нелогично. Мол, нахуя в ручную писать, если я в коде это указал. Ну и я еще думал, что строка в коде уже имеет встроенную функцию добавления кнопок управления, ибо пидарас с ютуба просто написал его, закрыл, запустил и у него все работает.
Алсо, вопрос на засыпку, эта книга >>34310 норм для полного нуля в программировании? Нормальных уроков и курсов пока не нашел. Везде что то не договаривают, нормально не объясняют и т.п. Думаю уже книгу взять, может в них адекватно расписывают азы.
>норм для полного нуля в программировании
Эта книга идеальная для полного нуля, неиронично всякие юнити в действии рядом не валялись с ней.
Единственно внимательно читай код, там есть мелкие опечатки, но не кртичичне, буквально 2-3и на всю книгу, внимательно читай код и делай всё что советует автор.
>эта книга >>34310 норм для полного нуля в программировании
Хуйня полнейшая даже не трать время. Там тебе будут ебать мозги в итоге ты не научишься ни юнити ни программировать.
Послушай совет - научись сначала писать на си шарпе. Не нужен уровень профессионала, но чтобы ты понимал немного из адвансед топиков типа классов и ООП принципов в си шарпе, эвентов, делегатов, интерфейсов, как ты это учить будешь - по книге или курсу какомуто - твое дело. Но уже в самом начале игродельства ты столкнешься с эвентами, делегатами, корутинами, словарями и прочими понятиями, которые без знаний си шарпа ты не осилишь.
Так что не пытайся и рыбку съесть и на хуй сесть, выучи хотя бы приблизительно си шарп, заодно базовые вещи программировать научишься. И потом уже влетай в юнити.
Поверь, я перевернул достаточно и книг и курсов по юнити, ни один из них не научит тебя программированию с нуля. Они могут научить тебя базовым техникам в юнити, но код даже если ты будешь +- понимать написать заново такой же не сможешь.
Так что лучше потрать сейчас месяц-два-три сколько у тебя это возьмет чем ты потратишь год или больше пытаясь выучить программирование по туториалам и прочему в юнити и в итоге так нихуя и не сможешь ни код писать ни игру в юнити сделать.
https://www.youtube.com/watch?v=TyNTsjOALbI&list=PL2Q8rFbm-4ru_qCllHPOgkpU8XtO25Wh3
Вот неплохой плейлист по си шарпу, но на одном нем ты не уедешь далеко ибо там короткие видосы по 5-6 минут чисто чтобы объяснить базу.
Опыт только с написанием кода приходит так что найди какойнить курс Юдеми(проверь рутрекер) или чето подобное чтоб тебя учили писать код и давали упражнения. Книги для вката на самом деле хуево подходят потому что тебя будут ебать вообще левыми ненужными вещами и 20 листов расписывать то что тебе нахуй не нужно будет. Так как в книгах обычно расписывают вообще все что есть в языке, а не то что тебе конкретно может пригодиться когда код будешь писать. В итоге можно задохнуться и дропнуть.
Но если найдешь какуюто книгу где тебя не будут грузить 100500 способами отформатировать вывод в консоли и прочей хуйней, которая тупо есть в наличии у си шарпа и поэтому про нее надо 10 страниц написать, а в которой введут в курс дела и дадут задачи сидеть писать код то можешь попробовать. Но опять же велика вероятность задохнуться и дропнуть к хуям.
Главное пиши побольше кода, здесь только работой руками ты чтото поймешь, если писать будешь мало или вообще не будешь никогда ничему не научишься.
Например установить Bluestacks, скачать игру - а потом декомпилировать ее код?
Естественно, ещё есть DevX, на гите крякнутый лежит если поискать, с помощью него можно вообще юнити проект собрать, кривой конечно но чому бы и нет.
ОК, спасибо.
>>38335
Я понял, ты просто конкурента обрубаешь ещё в начале.
Ты даже туторы ему предлагаешь на ангельском, чтобы он точно ничего не понял.
Умно.
Знаешь я тоже вкатывался в C# и по курсам юдеми и по туторам и ничему кроме как повторению за автором не научился, потому что сам тутор не подразумевает глубокое понимание языка, другое дело книга которая структурирована и достаточно информативна.
> эвентами, делегатами, корутинами, словарями
всё это в достаточном объёме разложено в книге выше, с наглядными примерами в самом движке, а не сферический конь в вакупе на консоле.
И я не думаю, что в начале для его первых проектов ему понадобятся
> эвентами, делегатами, корутинами, словарями
Главное понимать, что такое поля, методы, переменные, конструкции условий, циклы, свичи и списки этого для начало с головой хватит и всё опять даётся в книге выше с примерами внурт движка.
> даже туторы ему предлагаешь на ангельском
Чел, если ты связался с кодингом - ангельский это твоя лингва франка, иначе сразу можешь идти нахуй.
>>38358
>другое дело книга которая
на 800 страниц из которых тебе нужны будут чтоб код писать дай бог треть, остальным ты просто не будешь пользоваться как например jagged array который заменяется простым двумерным массивом в 95% случаев, но про эту хуйню тебе обязательно расскажут в книге а на позиции вкатуна ты не можешь фильтровать информацию на полезную и нет, ты будешь пылесосить страницу за страницей в итоге потратив хуеву тучу времени и ограничив мыслительный ресурс, ибо запомнить все на свете невозможно, ты в любом случае запомнишь только то, чем пользовался.
Опять же, я написал выше, как угодно, либо книга либо курс но лично на моем опыте учиться по книге это та еще хуйня. Если конкретно ты по книге лучше научился чем по курсу ну молодец, значит тебе эта модель обучения подходит больше.
Я это написал не к тому что нужно прям курс хуюрс или индуса на ютубе, я это написал к тому что если обучение по книге не пойдет то он попробовал другой вариант ну или наоборот.
>всё это в достаточном объёме разложено в книге выше, с наглядными примерами в самом движке, а не сферический конь в вакупе на консоле.
Разложено. На 1100й странице. Дойдет ли он до туда или дропнет нахуй на 500й еле как освоив массивы?
>>38358
>И я не думаю, что в начале для его первых проектов ему понадобятся
Понадобятся еще и как. Корутина и эвенты это буквально первое на что ты натыкаешься когда начинаешь писать игру.
>Главное понимать, что такое поля, методы, переменные, конструкции условий, циклы, свичи и списки этого для начало с головой хватит и всё опять даётся в книге выше с примерами внурт движка.
Это все БАЗОВЫЙ си шарп ты понимаешь что этого блядь вообще не хватает ни разу когда ты садишься и пытаешься либо учиться по видосам индусов либо тем более писать код сам.
А как ты собираешься писать код сам когда твой потолок это одномерные массивы для меня вообще загадка. Так что ты пойдешь и так же найдешь тутор индуса, который тебе во втором видео пропишет эвенты чтобы сделать управление а ты будешь сидеть гуглить что такое субскрайбер и как эта хуйня вообще работает.
Я тебе это говорю потому что это ровно то через что прошел я.
Учить программирование с нуля через юнити это через жопу. Можешь че угодно говорить.
Это попытка сесть на два стула но в итоге ты и на хуйцах дроченых посидишь и на пиках точеных.
> даже туторы ему предлагаешь на ангельском
Чел, если ты связался с кодингом - ангельский это твоя лингва франка, иначе сразу можешь идти нахуй.
>>38358
>другое дело книга которая
на 800 страниц из которых тебе нужны будут чтоб код писать дай бог треть, остальным ты просто не будешь пользоваться как например jagged array который заменяется простым двумерным массивом в 95% случаев, но про эту хуйню тебе обязательно расскажут в книге а на позиции вкатуна ты не можешь фильтровать информацию на полезную и нет, ты будешь пылесосить страницу за страницей в итоге потратив хуеву тучу времени и ограничив мыслительный ресурс, ибо запомнить все на свете невозможно, ты в любом случае запомнишь только то, чем пользовался.
Опять же, я написал выше, как угодно, либо книга либо курс но лично на моем опыте учиться по книге это та еще хуйня. Если конкретно ты по книге лучше научился чем по курсу ну молодец, значит тебе эта модель обучения подходит больше.
Я это написал не к тому что нужно прям курс хуюрс или индуса на ютубе, я это написал к тому что если обучение по книге не пойдет то он попробовал другой вариант ну или наоборот.
>всё это в достаточном объёме разложено в книге выше, с наглядными примерами в самом движке, а не сферический конь в вакупе на консоле.
Разложено. На 1100й странице. Дойдет ли он до туда или дропнет нахуй на 500й еле как освоив массивы?
>>38358
>И я не думаю, что в начале для его первых проектов ему понадобятся
Понадобятся еще и как. Корутина и эвенты это буквально первое на что ты натыкаешься когда начинаешь писать игру.
>Главное понимать, что такое поля, методы, переменные, конструкции условий, циклы, свичи и списки этого для начало с головой хватит и всё опять даётся в книге выше с примерами внурт движка.
Это все БАЗОВЫЙ си шарп ты понимаешь что этого блядь вообще не хватает ни разу когда ты садишься и пытаешься либо учиться по видосам индусов либо тем более писать код сам.
А как ты собираешься писать код сам когда твой потолок это одномерные массивы для меня вообще загадка. Так что ты пойдешь и так же найдешь тутор индуса, который тебе во втором видео пропишет эвенты чтобы сделать управление а ты будешь сидеть гуглить что такое субскрайбер и как эта хуйня вообще работает.
Я тебе это говорю потому что это ровно то через что прошел я.
Учить программирование с нуля через юнити это через жопу. Можешь че угодно говорить.
Это попытка сесть на два стула но в итоге ты и на хуйцах дроченых посидишь и на пиках точеных.
Запустил Bluestacks, посмотрел туториалы, нашел папку в которой лежат игры, чтобы их импортировать.
В папке пусто.
Посмторел несколько туториалов - все объясняют как перенести картину или аудио файл с компа на Bluestacks и наоборот.
Ни один туториал ни объяснил как перенести APK-файл, как его вообще увидеть.
Может быть ты знаешь.
ОК, нашел альтернативное решение - можно просто скачать приложение через этот сайт.
https://apps.evozi.com
Хотел правда скачать Vampire Survivors, но вылезла ошибка:
Ops, we are not able to download. (invalid package/non-free/not compatible)
Правда назрела новая проблема - скачиваю игры с Google Play, а они не на Юнити, по крайней мере кода на C# не вижу.
Хотел ChainCube скачать, думал что он на Unity - а оказалось что нет.
https://play.google.com/store/apps/details?id=com.colobolo.chainball&hl=ru&gl=US
Я пока начал смотреть уроки Brackeys. Вот моя первая самостоятельная программа после двух уроков. Мне кажется слишком колхозно выглядит код, в плане изменения цвета текста, и думаю есть вариант сделать проще, но пока так.
Щас вообще не заморачивайся по поводу колхозно\не колхозно. Тебе сейчас главное научиться писать код который будет работать. И не зависай надолго на этом базовом дрочиве консоли и прочего, твоя цель в итоге вкатиться в юнити. Поиграться с кодом, попробовать то да се это заебись и полезно но в целом не зацикливайся, продвигайся.
Да я особо не парюсь. Пока две программы простых написал и понял как они работают. Сейчас со своими делами разберусь и перейду к if else.
Вот код, в последнем примере, если я ставлю (num == 2), то программа показывает, что ответ не верный т.е. переключается на Else, но если поставить (num >= 2), то она переключается на If и говорит, что ответ верный, даже если он неверный. Я понимаю, что что то упускаю, но пока не понял что именно. Мне кажется, между примерами должно быть разделение, или же они не должны находиться в одном поле. Где я ошибаюсь и почему?
using System;
namespace Home_Work
{
class Program
{
static void Main(string[] args)
{
Console.Title = "MathGame";
Console.ForegroundColor = ConsoleColor.Red;
Console.WindowHeight = 20;
Console.WriteLine("Let's play some math!");
Console.WriteLine("Solve following example!");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("1+1+1=");
Console.ForegroundColor = ConsoleColor.White;
int num = Convert.ToInt32(Console.ReadLine());
if (num == 3){
Console.WriteLine("Correct!");
}
else{
Console.WriteLine("Wrong!");
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Let's try another one!");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("12+50-60=");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
if (num >= 2){
Console.WriteLine("Great!");
}
else{
Console.WriteLine("Why so studpid???");
}
Console.ReadKey();
}
}
}
Вот код, в последнем примере, если я ставлю (num == 2), то программа показывает, что ответ не верный т.е. переключается на Else, но если поставить (num >= 2), то она переключается на If и говорит, что ответ верный, даже если он неверный. Я понимаю, что что то упускаю, но пока не понял что именно. Мне кажется, между примерами должно быть разделение, или же они не должны находиться в одном поле. Где я ошибаюсь и почему?
using System;
namespace Home_Work
{
class Program
{
static void Main(string[] args)
{
Console.Title = "MathGame";
Console.ForegroundColor = ConsoleColor.Red;
Console.WindowHeight = 20;
Console.WriteLine("Let's play some math!");
Console.WriteLine("Solve following example!");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("1+1+1=");
Console.ForegroundColor = ConsoleColor.White;
int num = Convert.ToInt32(Console.ReadLine());
if (num == 3){
Console.WriteLine("Correct!");
}
else{
Console.WriteLine("Wrong!");
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Let's try another one!");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("12+50-60=");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
if (num >= 2){
Console.WriteLine("Great!");
}
else{
Console.WriteLine("Why so studpid???");
}
Console.ReadKey();
}
}
}
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Let's try another one!");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("12+50-60=");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadLine();
num = Convert.ToInt32(Console.ReadLine());
if (num == 2){
Console.WriteLine("Great!");
}
else{
Console.WriteLine("Why so studpid???");
}
Но если num = Convert.ToInt32(Console.ReadLine()); поставить выше, на Console.ReadLine();, то он дает ответ после двух нажатий. Т.е. он работает, но немного не так, как надо.
> Либо я с самого начала что то неправильно сделал.
Да. Кинул консольное приложение в Юнити тред.
чел бля ты после первой проверки не считываешь значение
Но она не притягивается.
Если в данном коде:
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
поменять знак на ">", то все робит, хиллка летит к игроку.
Почему-то Unity не видит, что дистанция между хиллкой и игроком в какой-то момент уменьшилась.
void Update()
{
if (movingToPlayer == true)
{
Debug.Log(1);
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, moveSpeed * Time.deltaTime);
}
else
{
Debug.Log(2);
checkCounter -= Time.deltaTime;
if(checkCounter <= 0)
{
Debug.Log(3);
checkCounter = timeBetweenChecks;
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
{
Debug.Log(4);
movingToPlayer = true;
moveSpeed += player.moveSpeed;
}
}
}
}
Но она не притягивается.
Если в данном коде:
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
поменять знак на ">", то все робит, хиллка летит к игроку.
Почему-то Unity не видит, что дистанция между хиллкой и игроком в какой-то момент уменьшилась.
void Update()
{
if (movingToPlayer == true)
{
Debug.Log(1);
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, moveSpeed * Time.deltaTime);
}
else
{
Debug.Log(2);
checkCounter -= Time.deltaTime;
if(checkCounter <= 0)
{
Debug.Log(3);
checkCounter = timeBetweenChecks;
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
{
Debug.Log(4);
movingToPlayer = true;
moveSpeed += player.moveSpeed;
}
}
}
}
Весь скрипт (так наверное понятнее):
public class ExperiencePickup : MonoBehaviour
{
public int expValue;
private bool movingToPlayer;
public float moveSpeed;
public float timeBetweenChecks = 0.2f;
private float checkCounter;
private PlayerMovement player;
// Start is called before the first frame update
void Start()
{
player = PlayerHealth.instance.GetComponent<PlayerMovement>();
}
// Update is called once per frame
void Update()
{
if (movingToPlayer == true)
{
Debug.Log(1);
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, moveSpeed * Time.deltaTime);
}
else
{
Debug.Log(2);
checkCounter -= Time.deltaTime;
if(checkCounter <= 0)
{
Debug.Log(3);
checkCounter = timeBetweenChecks;
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
{
Debug.Log(4);
movingToPlayer = true;
moveSpeed += player.moveSpeed;
}
}
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
ExperienceLevelController.instance.GetExp(expValue);
Destroy(gameObject);
}
}
}
Весь скрипт (так наверное понятнее):
public class ExperiencePickup : MonoBehaviour
{
public int expValue;
private bool movingToPlayer;
public float moveSpeed;
public float timeBetweenChecks = 0.2f;
private float checkCounter;
private PlayerMovement player;
// Start is called before the first frame update
void Start()
{
player = PlayerHealth.instance.GetComponent<PlayerMovement>();
}
// Update is called once per frame
void Update()
{
if (movingToPlayer == true)
{
Debug.Log(1);
transform.position = Vector3.MoveTowards(transform.position, player.transform.position, moveSpeed * Time.deltaTime);
}
else
{
Debug.Log(2);
checkCounter -= Time.deltaTime;
if(checkCounter <= 0)
{
Debug.Log(3);
checkCounter = timeBetweenChecks;
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
{
Debug.Log(4);
movingToPlayer = true;
moveSpeed += player.moveSpeed;
}
}
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
ExperienceLevelController.instance.GetExp(expValue);
Destroy(gameObject);
}
}
}
Скажем, я хочу знать расстояние от игрока до пары десятков разных точек, причем одномоментно. Если я буду раз в секунду проверять в цикле расстояние до каждой точки, то Юнити не будет подтормаживать в этот момент?
Может стоит лучше воткнуть async метод чтобы не тормозить поток основного геймлупа?
>Быстродействие просчета дистанции между трансформами в Юнити?
Зависит от количества выполняемых операций во фрейм, цпу игрока.
>от игрока до пары десятков разных точек, причем одномоментно.
10? Да 10 это хуйня, вот если где-то под сотню, тут да, ебашить во фрейм не желательно.
Если очкуешь, то просто расспыляй их просчёт в течение пол/секунды, а так советую не париться и ебашить просчет во фрейм. Если реально будет просадка просто поправь.
>>38740
Спасибо. Пока что с многопоточностью не буду париться. Лучше возьму и за 1 кадр буду проверять дистанцию до одной точки, просто размажу ресурсоемкую задачу на все кадры.
Если у игрока не древний Интел Селерон, то вряд ли на производительности это значительно скажется.
Алсо, а асинхронные методы в таких случаях не помогают что ли? Я думал что они позволяют размазать задачу по нескольким кадрам.
>Пока что с многопоточностью не буду париться.
Поверь к ней лучше вообще не прикасаться, вот вообще. Обычным инди девам там делать нехуй. Сделай понятный костыль и забудь.
Даже если у тебя 1к вычислений, то лучше ручками реализуй распределение на секунду чем ебстись с потоками.
transform.position = new Vector2(paddle1.transform.position.x, transform.position.y);
то коллайдер не триггерится. Но я хочу приклеить ебаный шарик к ракетке программно по дельта игрек, почему я получаю триггеры коллайдера если шарик намертво приклеен к ракетке по оси игрек?
>Поверь к ней лучше вообще не прикасаться, вот вообще. Обычным инди девам там делать нехуй.
Есть еще один вариант. Насколько я понимаю, async Task не предлагает полноценную многопоточность. Но он выносит все асинхронные задачи в другой служебный поток, который не блокирует основной. Только есть недостаток в том что этот служебный поток может продолжать выполняться после завершения основного кода игры.
А вот >>38740 скорее для ECS, для простых задач явный оверкилл.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LoseCollider : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Collided " + collision.ToString()) ;
}
}
Шарик всегда в одном и том же месте коллайдер триггерит.
Даже если я вообще не двигаю мышкой и он стоит на месте.
Видимо никто не подскажет почему не работает...
Ладно.
В последнее время задумываюсь, что делаю что-то не так.
Точнее, хватаю информацию то там то сям, но трачу слишком много времени чтобы понять слишком очевидные вещи.
Есть ли какой-то годный курс по Unity, который подскажет не только как писать код и работать с Unity, но и как организовывать рабочий процесс?
Куда ее заливать?
На Google Play залить могу (я не из России), но там тестить игру надо 14 тестерами.
Есть варианты попроще?
>>38809
https://www.youtube.com/watch?v=cbYAdI_hANI&ab_channel=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BA%D0%B0%D0%BA
Ошибся малясь.
20 тестировщиков.
Для всех кто зарегался после 13 ноября 2023 года.
Ну так вступи в группу с видоса. Сиди тестируй чужие игры, потом твою потестят. В чем проблема?
Маленькая подсказка
Повыводи в дебаг значения дистанции/результата проверки/дальности подбора прям перед самой проверкой через Debug.Log
И вообще, есть какой краткий мануал о бест практисах по этой теме и контролю версий?
Вру, это я написал.
Может кто-нибудь объяснить почему это происходит и как раз и на всегда решить проблему.
это материалы из другого рендерера. В юнити есть 3 основных - built-in, URP, HDRP. Если ты качаешь ассет для Built-in то на URP он у тебя будет розовый. Погугли как конвертировать или просто создай новый материал и засунь в него те текстуры которые были в старом и всё.
Вот оно что. Спасибо.
https://github.com/fuqunaga/RosettaUI
Негде нету, помогайте!
Ну типа
var distance = Vector3.Distance(transform.position, player.transform.position);
Debug.Log($"distance: {distance}, check {distance< player.pickupRange}, range {player.pickupRange});
if(Vector3.Distance(transform.position, player.transform.position) < player.pickupRange)
{
Debug.Log(4);
movingToPlayer = true;
moveSpeed += player.moveSpeed;
}
Делать прототип на юнити дотс это безумие?
да
Спасибо за подсказку.
Мне кажется что дело в разных версиях Unity - в курсе, по которому я делаю клон Vampire Survivors, версия 2021.3.2, но игру я делаю в версии 2022.3.4 LTS.
Видимо в этой версии есть какая-то ошибка коллайдеров (про это Сакутин вроде как в своем курсе по Unity говорил).
>>39201
Ну вот я в Start и Update вызываю - не работает.
void Start()
{
player = PlayerHealth.instance.GetComponent<PlayerMovement>();
var distance = Vector3.Distance(transform.position, player.transform.position);
Debug.Log($"distance: {distance}, check {distance < player.pickupRange}, range {player.pickupRange}");
}
void Update()
{
var distance = Vector3.Distance(transform.position, player.transform.position);
Debug.Log($"distance: {distance}, check {distance < player.pickupRange}, range {player.pickupRange}");
...
1912x960, 0:37
Анончик дело говорит. Попробуй перед вычислениями преобразование к Vector2 выполнить и из него считай
в окошки логов есть кнопка collapse - если ее тыкнуть у тебя одинаковые логи будут сжиматься в один лог
Ну и всегда можно увеличить колличество данных. Добавь в логирование отображение твоей позиции и позиции яблока.
Шука эта как у всех гайдеров, но у меня он не устанавливается, в логе выдает ошибки какие-то
Что теперь делать? Забить хуй и искать другой?
1904x704, 0:50
Не понос так золотуха.
Все было ОК - а потом я поменял урон оружия игрока...
И пропало как оружие, так и UI со здоровьем игрока (в сцене оно есть, не отображается).
https://app2top.ru/news/otchet-unity-godovaya-vy-ruchka-svy-she-2-mlrd-kompaniya-izbavitsya-ot-neskol-kih-biznesov-215335.html
в целом 2023 год прошел для Unity успешнее 2022-го. Компания завершила его с выручкой в $2,18 млрд при чистом убытке в $826 млн. В 2022 году она сообщала о выручке в $1,4 млрд и чистом убытке в $919,5 млн;
за 2024 год компания рассчитывает заработать $1,76-1,8 млрд.
Нормально так они с разработчиков денег стригут.
Решил поработать с Unity на ноутбуке.
Создал проект, залил его на ГитХаб.
С ноутбука скачал проект - скрипты есть, 3D моделей нет.
Это нормально?
>Это нормально?
Посмотри gitignore. Посмотри использовался ли Git LFS. Если использовался, то значит ты банально не выкачал модельки.
А может проблема в том что я модели в префабы не превратил?
как сделать пикрил скалы? Это отдельные модели или просто по террэйну текстурой нарисовано? Там же вроде не настолько высокая точность кистей
Вдогонку, почему кисть не делается меньше 194 блять?
Похоже на модельки отдельные
Пиздец. Оказывается юнитипидары сделали спецверсию для китая.
Unity In China Has Nanite and Lumen!
https://www.youtube.com/watch?v=GV9uNlEAtWE
>спецверсию для китая
Народ на юнитифоруме охренел от такой новости. Но самое интересное, можно зайти в китайскии раздел юнити под своим логином и скачать китайский спец.хаб и уже потом скачать специальную китайскую версию юнити.
Я в ахуе с юнити, просто что за хуйню они последнее время творят
Так и не понял где был косяк - просто заново внимательно переписал туториал, и все заработало.
Двачую этого. Где обещанная халявная юнити без заставки-маркера рукожопов?
Я могу повторить простенький проект на Unity.
Я могу повторить и сложный проект на Unity.
Но только по туториалу.
Вот сделал я этот перепрыгивающий через препятствия куб.
Понимаю как это работает.
Хочу сделать сцену "Меню", где после проигрыша будет выводиться счет/лучший счет - и не могу.
До этого делал игры с разными сценами, повторяя туториал.
Переменную со счетом надо записывать в GameManager, потом эту переменную в новой открывшейся сцене присваивать тексту...
На словах вроде понимаю, на деле вчера весь вечер провозился - и нифига не сделал.
Может разработка игр это не мое...
>Я могу повторить
>Но только по туториалу.
Ахуитительная способность, братан. Никто так больше не может.
Учись дальше, чё. Я, когда только начинал учиться кодить, тоже думал что дохуя умный и мне все просто даётся, но когда в первый раз попробовал немного отойти от учебника и попробовать создать что-то своё то тут и охуел. Я буквально понять не мог, почему эта параша не работает или работает через жопу, но это нормально, люди так и учатся.
>Может разработка игр это не мое...
Если тебе не интересно пытаться делать игру, учиться делать игру, и руки опускаются после пары часов дрочи в редакторе то да, это не твоё совершенно точно.
А если же тебя напрягает то что нету быстрой и понятной прогрессии, то просто продолжай делать дальше. Эксперементируй, делай костыли.
В гейдеве работает идеальное правило -> Чем больше ты сидишь делаешь игру, пусть и криво, косо, через миллиард костылей, тем больше экспы ты лутаешь, т.к 50% разработки это не про код а про архитектуру, какие скрипты с чем стыкуются, где хранить, куда посылать и т.п, тут только опыт решает, в туторах об этом невозможно рассказать. А без опыта смотреть уже готовые решения тоже почти нет смысла, т.к нет понимания почему сделано именно так.
И еще миллион всего...
>про код а про архитектуру, какие скрипты с чем стыкуются, где хранить, куда посылать
> в туторах об этом невозможно рассказать
Вот, готовая идея для обучающего курса.
Слишком много неизвестных и сторонних факторов. Нельзя просто сказать вот делайте так т.к это правильно, удобно, и в будущем удобно расширяемо. Игра слишком сложная штука чтоб можно было так упростить.
Только опыт и личные предпочтения.
Во-во, не все так однозначно. Вот эту агностическую дурь из головы и выбивать.
Для этого надо шарить, а не хэллоу ворлд показывать под видом гайдов.
То уважаемые люди, понимать надо.
Делать игры - это же не огород пахать, где точно можно рассчитать сроки - умножаешь расстояние грядки на свою скорость, а сломалась лопата - идешь, покупаешь новую. Тут ведь куча нюансов. Кризис творчества, баги, улучшение, убирание лишнего и т.п.
Тот же киберпук77, вышло забагованное говно по началу. Ну, отодвинули бы на месяц, заработали бы те же миллионы, зато все бы были довольны.
Хуй знает, я бы не выдержал. Хотя, наверное мне было бы похуй, лишь бы зарплату платили. Но все равно как то тупо.
Иди погуляй, травку понюхай, задрот ебаный
Закрой юнити, удали студию, установи заного. Профит. Или если на скиле в ручную укажи ехе.
Как предпочтительнее делать управление персонажем : через отдельный объект Controller который будет деркать персонажа или через самого персонажа? И чому так?
Отдельные компоненты маст хэв. Возможность разделить области прав и потом если что править что-то одну намного лучше чем всё накиданное лапшой вместе.
"Эффективные менеджеры" мозги ебут типа все в такой срок должно выйти, иначе инвесторы недовольны будут. Хотя тот же Baldur's Gate вышел после примерно 7 лет разработки и нормально всё прошло. Баги были но небольшие. То есть можно нормально допилить без кранчей, сделать норм оптимизация и пофиксить баги, но большие дяди как всегда торопят и вмё руинят.
А что если это путь всех энтузиастов на юнити? Итог один - нет вакансий с достойно зп, нет вакансий для джуна (давайте не обманывайте нахуй, я знаю что при позции джуна у многих эйчаров требования как к мидлу, блядь, потому что никому нахуй не нужно воспитывать ещё одного игродебила), а само двигло чисто для 2-5 кабанчиков, способных хоть что-то родить за 2 года разработки, какие-то супер редкие ситуации когда михуо нанимает 500 сотрудников на один проект вообще можно в расчёт не брать, без переписи движка такие вещи в принципе невозможны.
Но его аргумент про переработки конечно глупость, это ж не имеет отношение к двиглу, будет он джуном на джаве тоже будет перерабатывать, что бы хоть что-то успеть.
ну чел, почитай про принципы ооп.. это ж база
Пролистай книжку
Х. Ферроне - Изучаем C# через разработку игр на Unity
Имхо оче легкий старт с пояснением почему так или иначе, в том числе и ответ на твой вопрос есть.
Разбивай всё что только можешь на составные части, не только для удобства читаемости, но и для использования кода где-то ещё без ктрл_с ктрл_в
Юнитач, подскажи. Можно ли технически реализовать что бы определенная часть спрайта динамически становилась прозрачной? Ну то есть что бы по спрайту перемещалась "дырка" в которой был бы виден предыдущий слой
сделай наоборот, что б круг отображался сверху над твоим спрайтом. Обман зрения
Параллельно с разработкой игр занимаюсь разработкой приложений под Android.
Можно зарегать два аккаунта Google Play Console, или как-то разделить один аккаунт, чтобы игры и приложения были отделены друг от друга?
почему в саппорт не написать такой вопрос?
Как просто быстро переключаться между хотя бы 2-3мя префабами, которые лежат в разных папках далеко друг от друга?
>Можно зарегать два аккаунта Google Play Console
На один телефон до 10 акков можешь зарегать. За каждый плати 15$.
>как-то разделить один аккаунт, чтобы игры и приложения были отделены друг от друга?
Нельзя.
А это для чего?
Естессно, маской делается это, че именно тыкать надо я не помню, на другое двигло давно пересел, так что иди гугли.
Допустим хочу я сделать
>>40997
А не забанят?
И не понимаю как родительские классы могут знать об условных детях? Если до этого я читал и было написано обратное - наследники знают о родителях, родители не знаю о наследниках.
>GameObject.Find("Directional Light");
если геймОбжект это родитель этого директЛайт, как класс может знать об объекте? У меня это мозг выносит.
Могу предположить, что метод .find() лезет в какой-то глобальный список объектов сцены и возвращает найденный по имени? Если так, то почему нельзя просто обратится к какому-нибудь глобальному имени этой сцены напрямую, почему надо через какой-то метод какого-то класса это делать?
Код встроенных типов, классов и их методов ведь не посмотреть в бесплатной версии юнити?
>родительские классы могут знать об условных детях? Если до этого я читал и было написано обратное - наследники знают о родителях, родители не знаю о наследниках.
Похоже ты путаешь концепцию наследования, и концепцию иерархии в сцене.
>Могу предположить, что метод .find() лезет в какой-то глобальный список объектов сцены и возвращает найденный по имени?
Скорее всего так и есть, но возможно каждый объект просто знает локальный список детей.
А вообще я юнити только на уровне вводных туториалов знаю.
Так там советуют не искать, а сделать поле [SerializedField] private _directLight;
Тогда в инспекторе можно будет мышкой перетащить один компонент в это поле.
А для мейн камеры есть какой то встроенный объект для быстрого доступа.
Более сложный подход будет через Dependency Injection, но его я не копал.
> но возможно каждый объект
так это не объект, это просто класс..
Ну и потом как это он "просто" знать может, слишком дохуя информации в каждом объекте хранить о каждому другом.
Нет, find это именно поиск в рантайме в дереве сцены, инстанса геймобджекта. Класс тут вообще не участвует. (Хотя вроде есть какие то вариант find by type, но это просто вид фильтра)
ну так ты пишешь, что каждый объект знает о других, это значит что внутри него есть информация, что нелогично.
Другое дело что через метод класса геймобжект есть доступ ко всей сцене.
Так я и спрашиваю - почему нельзя напрямую обращаться к сцене для поиска в ней объектов, с чего вдруг через геймобжект. Костыль какой-то.
и чо это? Это не код, это описание содержимых методов, функций, конструкций.
Какие нахуй поиски по сцене??
А может ты прочитаешь и суть вопрос наконец-то поймёшь?
>URP
Уже как пару лет это просто стандарт. Именно что база.
>buid in
Это устаревшая хрень, на ней картинка будет отвратительная.
>hdrp
Вот это именно для того чтоб графа была топ.
Как кстати в urp отрендерить текстуру глубины со второй камеры через шейдер матерьяла? Потому что он берет глубину с главной камеры. лол, выглядит как баг.
Так нахера он нужен если только не для мобильного кала, о каких новых стандартах вообще речь
>urp сосет на 12%
А не, ошибся, он сосет аж на 25%. Сцена с планарным отражением, дополнительной камерой для вывода текстуры с другого ракурса, и тестом текстуры глубины (черный куб, в отражении соответственно глубина не рабоает)
>Существуют ли ресурсы, где выкладываются уже готовые проекты игр или их код?
Стим/торрент + ILSpy
Пора бы это уже в шапку засунуть
Череп не жмет?
сыглы, хелдайверс оверхайпнутная параша
Это в китайском заогне стата?
Намекает что ёбаный аи арт все поглотил
Если персонаж всегда в центре экрана, то нужно двигать все объекты сцены относительно игрока когда тот "передвигается", или только самого игрока? если представить, что карта безграничная во все направления, а мобов может быть до сотни
Как тут понять что экономичней по ресурсам, а может никакой разницы?
Игра с камерой TPS гта-лайк. Персонаж подходит к котику, можно присесеть и погладить(не кат-цена, просто живой мир)
Как сделать так, чтобы в обычном положении камеры(как в гта, около 3.5м позади героя, и 2.5-3м над землей) не было никаких звуков кроме эмбиента игрового мира, НО можно было колесиком мышки приблизить камеру поближе к герою и услышать мурчание кошки?
rolloff
Юнитилахтыч, вы сперва сделайте ЮРП не-говном, потом продвигайте как стандарт
А надо было просто пройти обучение на сайте юнити, где разбирается эта тема.
Unity 6000.0.0b11
https://beta.unity3d.com/download/d93a9ecb7e85/download.html
Давно работаю в юнити и меня всё мучает вопрос. Для чего нужна кнопка Save project, если по дефолту нажимая Save происходит сохранение сцены?
Всегда жмякаю их по очереди, но интересует функциональный вопрос, зачем она? Что делает?
Сцена же сохраняется просто Save, остальное в проекте динамически и так сэйвится при любом пуке.
https://docs.unity3d.com/Manual/Saving.html
Примечание. Некоторые типы ресурсов имеют кнопку «Применить» в Инспекторе. Unity не сохранит их, пока вы не нажмете «Применить» .
Только проблема в том что когда допустим ты меняешь что-то в ресурсах, в том же аудио, спрайтах, 3д моделях, оно не дает что либо дальше делать пока ты либо не применишь или отменишь изменения.
Какое-то масло масляное получается.
я охуевал что всем норм такое положение дел и эту концепцию я не понимаю и не приемлю. схуя бы проект игры не файл как говорит юнете. адоба так же устроена и не выёбывается. костыль красноглазых, не иначе
непрогромист
https://www.youtube.com/watch?v=22dDLkk9ZC0
На этом занятии мы познакомим вас с новыми функциями HD Render Pipeline (HDRP), которые помогут вам создавать более реалистичную среду и персонажей. Узнайте, как создавать динамичное ночное небо, улучшать объемные облака, улучшать водные эффекты и использовать расширенные функции освещения, чтобы воплотить все эти выражения в жизнь. Кроме того, вы узнаете, как работать с Unity Weta Tools, чтобы рисовать реалистичных персонажей, которые лучше вписываются в ваш мир и игровой процесс. Докладчик: Матье Мюллер (технический менеджер по продукту, Unity)
инди разработчики все такие?
Я тут один что ли книжки читаю?
GameObject.Find("имя хуйни").GetComponent<TextMeshProUGUI>();
когда проект создаёшь, выбирай что под веб.
А мы кто нахуй??
Кринж.
Прикольна
зависит от того сколько еще идей у чела в кармане.
у меня была идея о двух камерах с разными измерениями в игре но теперь понимаю что это брехня и переводить взгляд с одной на другую раздражает
Отвечает разработчик с 8 годами опыта.
Да. Итог либо свитчиться на другой стек, либо делать свой бизнес. Последнее без денег и связей или удачи не выйдет.
Требования к джуну как к мидлу - отчасти правда. Но это во всей айтихе. Я еще 9 лет назад, будучи студентотой, охуевал от требуемой базы знаний на джун .нет-обезьяну в ебучем ЕПАМЕ, блять. Охуевал я и позже, уже будучи миддлом-синьором. Причина охуевания - вопросы и требуемые знания, проверки были практически идентичными. Старые же пердуны, которые эти знания проверяли, могли быть вкатунами просто по наличию англюсика или владеть компом и быть просто не тупыми дебилами, как остальной плебс.
С другой же стороны, будучи техлидом ко мне в команду попал джун. За 3 месяца как был овощем на уровне трейни, так и остался. Никакой теор.базы, никакого желания, никаких намеков на развитие.
Поэтому - по разному бывает. (сейчас такое совсем вряд ли, ибо рыночек в жопе, но об этом ниже)
Многие ХРюши игнорят и откровенно по-уебски ведут себя, даже когда у тебя синьорная лычка и 5-8-10 лет опыта. Особенно сейчас. Опять же, в годах, где-то, 2018-2020 еще кое-как нализывали жеппу. После ковида - уебанское поведение - норма.
Вакансий и проектов мало.
Интересных проектов - еще меньше и я даже не знаю, как туда попасть. Вот пилят, например, Broken Arrow на юнити, или тот же тарков. Да много интересных проектов есть на юнити, на самом деле. Как туда попасть с улицы и без знакомства в 2к24-ом - в душе не ебу, меня не брали.
Платят на интересных проектах откровенно мало, ниже среднего. Инфа - уточнял вилки на собесе, говорил с ребятами из команд, лично знаю разрабов.
Известные компании, у которых хуевые зп, о которых знаю лично: Saber, Weappy Studios, CM Games, tinyBuild (эти еще и припизднутый процесс интервью с тестовым выкатили и взяли чувака за меньшие бабки, просил что-то около 3.2к дол. на крепкую син.позицию).
+ придется въебывать, разумеется
Большой технический объем знаний.
Тебе РЕАЛЬНО надо хотя бы в общем понимать, как устроена графика и как происходит отрисовка, нюансы, как и почему работает сжатие, как используется гпу и т.д. Надо понимать шейдеры. Надо понимать пайплайн рендеринга.
Надо понимать особенности мобилок.
Во многих проектах надо знать математику на уровне университета.
Надо понимать юнити движок и все его заебы и нюансы, как им жонглировать.
Надо понимать особенности реализации той или иной фичи. А все ты знать и опробовать в коммерческой разработке ты тупо не сможешь, тем не менее это ожидают увидеть.
Далее - многие компании хотят видеть опыт в клиент-серверной разработке. Фотон, например. Все серверные фреймворки - отдельные истории, у них куча нюансов, там отдельно можно год-два на изучение убить. А взять этот опыт (коммерческий) тупо негде.
Добавь к этому ЭКС-шизов. Да, некоторые компании хотят видеть опыт экс. Опять же - на изучение и наработку мастерства нужно время, это отдельная технология и заебов еще больше.
Еще одно отдельное направление - VR/AR, которое опять же требует огромного времени.
И теперь ко всему этому добавь огромный пласт .нет, который от тебя тоже ожидают на супер-уровне.
Если метишь на тех или тим-лида, то, скорее всего, будут заебывать менеджерским опытом. Ты уже знаешь вопрос - взять его негде.
Что же должен знать интепрайз-хуесос для успешной карьеры и лута денег? Ну, тот же условный .нет, немного баз данных, популярный фреймворк и знание какого-нибудь авс-сервиса. ВСЕ! Ровно в половину меньше, чем на юнити. Тем не менее, интепрайз-хуесосы будут смотреть на тебя свысока.
Разумеется, мы не говорим про говно-шлепов на монобехах и прочих быдлокодеров. Их крайне дохуя в юнити-сфере, но и в интерпрайзе откровенных имбецилов не меньше (особенно ты можешь прочувствовать это, когда работаешь с .нет бэкендерами).
Хорошо. Думаешь освоил юнити, имеешь опыт и все будет заебись? АВОТХУЙ!
Многие компании воротят носом, если ты не имеешь опыта с специфичным фреймворком или не писал специфичный ГЕЙМПЛЕЙ СУКА!
Все вышеперечисленное:
Не работал с фотоном или клиент-сервером - идешь на хуй. Вакансия отсеивается.
Не работал с вр - идешь на хуй. Вакансия отсеивается.
Не работал с экс - вакансия отсеивается.
Не писал какой-то жанр - правильно, отсеиваешься.
Т.е., например, делал ты матч-3 игры, а компания хуярила скуфо-игры про машинки в грязи (привет, сейбер!). Тебя пошлют нахуй.
Или в целом ты писал под мобилки, а они хотят видеть пека-опыт (в юнити, блять, движке под мобилки!). Или хотят видеть серверно-проектный опыт.
Да, это полный идиотизм и ебаный бред. Казалось бы - есть опыт юнити и тех.стека, что там стоит понять особенности реализации какой-то фичи, это же минимальное обучение, если обучение вообще. А вот нет, компании выебываются по полной.
Далее. Мало опытных людей.
Очень много говно-кодеров. Перенимать опыт практически не у кого, получать опыт с специфичными вещами выше - негде и, опять же, не с кем.
Опытные люди, как правило, собираются в стартапы и пилят что-то свое. Обычно, по знакомству, по массовому уходу из какой-то компании.
Шаринга опыта просто нет внутри студий. Я уже много их повидал и как правило это большие выебоны на собесе и жидкий пук в проекте ИРЛ.
Опыт-курсы к-синдиката отчасти спасают.
Нет гигантов.
У тебя не будет цели большой-компании, типа ФААНГ, где ты неиронично будешь лутать 500к долларов в год. Ты вряд ли сможешь лутать даже 8к ГРОСС как ИП (что изи для другого стека), это потолок.
Ты не сможешь совмещать несколько работ. Я таких ребят в юнити тупо не знаю. Максы - мелкие подработки.
Сложный перекат в США.
Могу напиздеть, но сколько бы я не смотрел вакансий - все какая-то хуйня (даже не игры, а разработка условных интерактивных презентаций для других заказчиков), мало вакансий и крайне сомневаюсь, что они будут заморачиваться с перекатом чурки вне США.
В дерьманию и англию зовут. Но предлагаемые зарплаты - пиздец, ниже снг даже. Во время бума инвестиций и самых жирных зп предлагали в год 80-90к без учета налогов. Т.е. считай примерно 5k чистыми на руки. В Берлине или Ландане, с их ценами.
Какие плюсы у геймдева? Ну, считается, что это должно быть весело. Лучше пикрилейтеда этот миф сложно развеять.
По факту весело делать прототипы, весело строить "архитектуры". Делать же игры, т.е. создавать работающий продукт, - не весело. Надо чистить вилкой баги и устранять недочеты, пердолиться с расширением кодовой базы и т.д. и т.п. рутина, т.е. это обычная работа.
Мб что-то забыл. Хз. Наболело.
Отвечает разработчик с 8 годами опыта.
Да. Итог либо свитчиться на другой стек, либо делать свой бизнес. Последнее без денег и связей или удачи не выйдет.
Требования к джуну как к мидлу - отчасти правда. Но это во всей айтихе. Я еще 9 лет назад, будучи студентотой, охуевал от требуемой базы знаний на джун .нет-обезьяну в ебучем ЕПАМЕ, блять. Охуевал я и позже, уже будучи миддлом-синьором. Причина охуевания - вопросы и требуемые знания, проверки были практически идентичными. Старые же пердуны, которые эти знания проверяли, могли быть вкатунами просто по наличию англюсика или владеть компом и быть просто не тупыми дебилами, как остальной плебс.
С другой же стороны, будучи техлидом ко мне в команду попал джун. За 3 месяца как был овощем на уровне трейни, так и остался. Никакой теор.базы, никакого желания, никаких намеков на развитие.
Поэтому - по разному бывает. (сейчас такое совсем вряд ли, ибо рыночек в жопе, но об этом ниже)
Многие ХРюши игнорят и откровенно по-уебски ведут себя, даже когда у тебя синьорная лычка и 5-8-10 лет опыта. Особенно сейчас. Опять же, в годах, где-то, 2018-2020 еще кое-как нализывали жеппу. После ковида - уебанское поведение - норма.
Вакансий и проектов мало.
Интересных проектов - еще меньше и я даже не знаю, как туда попасть. Вот пилят, например, Broken Arrow на юнити, или тот же тарков. Да много интересных проектов есть на юнити, на самом деле. Как туда попасть с улицы и без знакомства в 2к24-ом - в душе не ебу, меня не брали.
Платят на интересных проектах откровенно мало, ниже среднего. Инфа - уточнял вилки на собесе, говорил с ребятами из команд, лично знаю разрабов.
Известные компании, у которых хуевые зп, о которых знаю лично: Saber, Weappy Studios, CM Games, tinyBuild (эти еще и припизднутый процесс интервью с тестовым выкатили и взяли чувака за меньшие бабки, просил что-то около 3.2к дол. на крепкую син.позицию).
+ придется въебывать, разумеется
Большой технический объем знаний.
Тебе РЕАЛЬНО надо хотя бы в общем понимать, как устроена графика и как происходит отрисовка, нюансы, как и почему работает сжатие, как используется гпу и т.д. Надо понимать шейдеры. Надо понимать пайплайн рендеринга.
Надо понимать особенности мобилок.
Во многих проектах надо знать математику на уровне университета.
Надо понимать юнити движок и все его заебы и нюансы, как им жонглировать.
Надо понимать особенности реализации той или иной фичи. А все ты знать и опробовать в коммерческой разработке ты тупо не сможешь, тем не менее это ожидают увидеть.
Далее - многие компании хотят видеть опыт в клиент-серверной разработке. Фотон, например. Все серверные фреймворки - отдельные истории, у них куча нюансов, там отдельно можно год-два на изучение убить. А взять этот опыт (коммерческий) тупо негде.
Добавь к этому ЭКС-шизов. Да, некоторые компании хотят видеть опыт экс. Опять же - на изучение и наработку мастерства нужно время, это отдельная технология и заебов еще больше.
Еще одно отдельное направление - VR/AR, которое опять же требует огромного времени.
И теперь ко всему этому добавь огромный пласт .нет, который от тебя тоже ожидают на супер-уровне.
Если метишь на тех или тим-лида, то, скорее всего, будут заебывать менеджерским опытом. Ты уже знаешь вопрос - взять его негде.
Что же должен знать интепрайз-хуесос для успешной карьеры и лута денег? Ну, тот же условный .нет, немного баз данных, популярный фреймворк и знание какого-нибудь авс-сервиса. ВСЕ! Ровно в половину меньше, чем на юнити. Тем не менее, интепрайз-хуесосы будут смотреть на тебя свысока.
Разумеется, мы не говорим про говно-шлепов на монобехах и прочих быдлокодеров. Их крайне дохуя в юнити-сфере, но и в интерпрайзе откровенных имбецилов не меньше (особенно ты можешь прочувствовать это, когда работаешь с .нет бэкендерами).
Хорошо. Думаешь освоил юнити, имеешь опыт и все будет заебись? АВОТХУЙ!
Многие компании воротят носом, если ты не имеешь опыта с специфичным фреймворком или не писал специфичный ГЕЙМПЛЕЙ СУКА!
Все вышеперечисленное:
Не работал с фотоном или клиент-сервером - идешь на хуй. Вакансия отсеивается.
Не работал с вр - идешь на хуй. Вакансия отсеивается.
Не работал с экс - вакансия отсеивается.
Не писал какой-то жанр - правильно, отсеиваешься.
Т.е., например, делал ты матч-3 игры, а компания хуярила скуфо-игры про машинки в грязи (привет, сейбер!). Тебя пошлют нахуй.
Или в целом ты писал под мобилки, а они хотят видеть пека-опыт (в юнити, блять, движке под мобилки!). Или хотят видеть серверно-проектный опыт.
Да, это полный идиотизм и ебаный бред. Казалось бы - есть опыт юнити и тех.стека, что там стоит понять особенности реализации какой-то фичи, это же минимальное обучение, если обучение вообще. А вот нет, компании выебываются по полной.
Далее. Мало опытных людей.
Очень много говно-кодеров. Перенимать опыт практически не у кого, получать опыт с специфичными вещами выше - негде и, опять же, не с кем.
Опытные люди, как правило, собираются в стартапы и пилят что-то свое. Обычно, по знакомству, по массовому уходу из какой-то компании.
Шаринга опыта просто нет внутри студий. Я уже много их повидал и как правило это большие выебоны на собесе и жидкий пук в проекте ИРЛ.
Опыт-курсы к-синдиката отчасти спасают.
Нет гигантов.
У тебя не будет цели большой-компании, типа ФААНГ, где ты неиронично будешь лутать 500к долларов в год. Ты вряд ли сможешь лутать даже 8к ГРОСС как ИП (что изи для другого стека), это потолок.
Ты не сможешь совмещать несколько работ. Я таких ребят в юнити тупо не знаю. Максы - мелкие подработки.
Сложный перекат в США.
Могу напиздеть, но сколько бы я не смотрел вакансий - все какая-то хуйня (даже не игры, а разработка условных интерактивных презентаций для других заказчиков), мало вакансий и крайне сомневаюсь, что они будут заморачиваться с перекатом чурки вне США.
В дерьманию и англию зовут. Но предлагаемые зарплаты - пиздец, ниже снг даже. Во время бума инвестиций и самых жирных зп предлагали в год 80-90к без учета налогов. Т.е. считай примерно 5k чистыми на руки. В Берлине или Ландане, с их ценами.
Какие плюсы у геймдева? Ну, считается, что это должно быть весело. Лучше пикрилейтеда этот миф сложно развеять.
По факту весело делать прототипы, весело строить "архитектуры". Делать же игры, т.е. создавать работающий продукт, - не весело. Надо чистить вилкой баги и устранять недочеты, пердолиться с расширением кодовой базы и т.д. и т.п. рутина, т.е. это обычная работа.
Мб что-то забыл. Хз. Наболело.
Ах да, сейчас вакансии, спрос и зп драматически просели. Сурс - личный опыт собесов в компании, инфа от хрюш, инфа от знакомых опытных челов.
Инфляция и стоимость жизни во всем мире при этом выросла.
Когда пойдет обратный тренд и пойдет ли он вообще - хз.
Такая хуйня.
Ты это про гейдев? Так то у нас чел из епама работает, не могу сказать что сильно вкалывает, но считается норм сеньёром.
А после ковида в ИТ вообще рай и царство Б-жие на земле начлось. Раньше удаленка была единичным исключением, на которое челику с улицы попасть не реально было. А сейчас это стандарт отрасли. И зарплаты с 2016 выросли раз в 5. И заказчиков очередь, спасиб самоходному деду за сосанкции.
мимо джава помидор из систем электронного документооборота
Для меня "достойная зп" это 100к, а ты про 500..
Если "интересные" проекты примерно столько и предлагают, то чего губы гнуть?
В ковид - царство. После ковида - нет.
Инвестиции массово ушли, затем война - еще больший отток.
Работодатели все чаще настаивают на гибридном варианте - таскать свою жопу несколько раз в офис.
>>41790
100к чего? Рупий в месяц? Если так, то выбирай буквально любую офисную работу, да и не офисную тоже, такие деньги реально каждый дурачок может на изи делать, зачем тебе геймдев?
Если 100к долларов в год, то в обозримых вакансиях такие деньги никто не предлагает, похуй интересный или не интересный проект.
Но и что значит "интересный"? Ты точно так же будешь жопу рвать ради прибыли рандомного дяди, это точно такая же работа.
Пример охуительной "интересной" вакансии из всж пространства. Нужен 3х-летний юнити-лид с опытом ммо и фотона, строго уметь писать именно экшен-игры, а также он должен быть охуенным дев-опсом, который и дженкинс настроит, и скрипт на пайтоне запилит.
Платят что-то около 4-5к гросс (уже не первый раз от шитшторма вакансию вижу и как-то даже уточнял детали)
Налейтайте, чего же вы!
Honk-honk!
> таскать свою жопу несколько раз в офис.
Я ходил по собесам примерно год назад. Примерно 20 общений с херками. Везде была полная удаленка. Только в одном месте попросили поездить в офис первый месяц, но я сразу послал их. Может сейчас стата другая, не знаю
>А после ковида в ИТ вообще рай и царство Б-жие на земле начлось.
Двачую эту жабу. Сам жабист, после ковида сычую дома попукивая в кровать лениво печатая 10 строк кода в день.
Сомнительная идея работать в гейдеве, там же надо вкалывать как чорт. А вот инди хобби на юнити норм, один хуй играть не в чего.
>Сомнительная идея работать в гейдеве
Именно. Меня когда спрашивают как вкатиться в геймдев, я говорю не вздумай работать на дядю. Хочешь работать на дядю - иди в бэкенд. Там платят прилично и работа простенькая, не нужно голову ебать, всё за тебя уже давно придумали.
В швитой европке хотят видеть он-сайт (в офисе т.е.) или как минимум гибрид, 2-3 раза в неделю. Речь про Берлин-Лондон-Мюнхен-Гамбург-Манчестер. Про другие города хз. В Польше тоже такое часто вижу.
>>41843
>>41853
Все так и есть. Думаю, когда я выбрал хуюнити - я свернул не туда. С теми же усилиями и въебанным временем я давно мог бы давно чиллить в долине.
Геймдев только как хобби (сомнительная хуйня, но окей), либо как свой стартап (тоже крайне сомнительная хуйня). В качестве карьеры - полная хуйня без перспектив.
ты вот накатал простыню кстати, но так и не рассказал с какими крупными проектами работал что б тебе верить
а если погуглить видосы - СОЗДАЮТ ТЕРРЕЙН НА ЮНИТИ
Перешел на HDRP, закинул ассеты из библиотеки на деревья, практически все они стали розовыми, на тех что смогли отобразиться розове шейдеры. В URP такой хуйни нет, плюс судя по описанию, все ассеты под HDRP адаптированы, как фиксить?
фикс для HDRP в папке ассета установи
так это старые чел, там навернео 1-2 человек ток остались в составе.
Вот это в ruvn красавица, не то что у нас жирные лысые скуфы.
>жирные лысые скуфы.
недавн смотрел интервью всяких пердов чьи говноподелки взлетали в сторах, чел что копирку онлиапа запилил рассказывал об "успехе".
Спустя несколько суток его поделку забанили в гуглсторе вместе с аккаунтом.
>Спустя несколько суток его поделку забанили в гуглсторе вместе с аккаунтом
Лол. А что не так было с его игрой?
DMCA наверное
>с какими крупными проектами работал
А мне это нахуя? Что бы не знающая языка рандомная анонимная мелкобуква свой апрув дала? Мб еще ссылочку на линкедин оставить? Лол.
>что б тебе верить
Ну не верь, ёпта.
Какие же охуевшие типы пошли.
просто интересуюсь, чо порвался-то?
320x240, 0:20
голодный пидорюндели как всегда
Сап, вопрос к бывалым, ньюфаги и безыгорники идут лесом.
До 1 ляма поликов в камере за кадр это гуд или много? Кадры редко падают ниже 60ти, но чёт я очкую. У меня казуальные рассчитанная на некропека, но на своём рабочем пк мне сложно оценить требования к графикуону.
Сап, вопрос к бывалым, ньюфаги и безыгорники идут лесом.
До 1 ляма поликов в камере за кадр это гуд или много? Кадры редко падают ниже 60ти, но чёт я очкую. У меня казуальные рассчитанная на некропека, но на своём рабочем пк мне сложно оценить требования к графикуону.
Кто знает бесплатный билд без юнити заставки уже вышел?
Конечно нет. ХЗ зачем ты его ждешь, его вообще может не быть.
Это нормально. Давно уже не полики отъедают производительность.
Почему у всех Mesh.uv тип Vector2 а не Vector4? Как поменять z и w у uv?
У ProBuilderMesh, например, SetUVs принимает Vector4, но uv0 и uv1 z и w остаются нулями.
Откуда вообще берутся такие ограничения на uv?
>Mesh.uv
https://docs.unity3d.com/ScriptReference/Mesh-uv.html
This property is supported for backwards compatibility, but the newer GetUVs and SetUVs functions allow you to access the same data in a more user-friendly way, and use a Vector3 or Vector4 value if you need to.
>uv тип Vector2
Потому что uv это координата на текстуре, а текстура двумерна (варианты с массивами и 3д текстурами опустим как нестандартные)
> ProBuilderMesh, например, SetUVs принимает Vector4
Скорее всего он принимает по другим причинам, может быть потому что все другие функции принимают Vec4. Там в доках в любом случае сказано что неиспользуемая часть отбрасывается.
Алсо, часто, например в шейдерах, uv это просто синонимы xy.
там чел в примерах суёт управление персонажем через риджитБади, засовывая всю логику в FixedUpdate().
Ну и офк кнопки там не всегда срабатывают наху..
В апдейте норм, в фиксед апдейт нихуя.
Меня наёбывают? Я так понимаю лучше проверять какие кнопки нажаты в апдейте, а всю логику поведения через взаимодействие с риджитБади уже в фиксед апдейт кидать?
почему эта хуйня возвращает не половину от размера ребра, а блядь половину от размера квадрата в который вписан мой бокс колайдер???
т.е вместо z1/2 возвращается z/2? долбоёбство какое-то
Потому что это extents от bounds, а не от боксколлайдера. А bounds это AABB. RTFM, люк.
ну так я думал, что bounds это и есть рёбра моего коллайдера. Как я к этому иначе должен был бы прийти?
>RTFM, люк.
Так а что я тут узнаю из этой сухой справки по чек боксу или бокс коллайдеру?
>The world space bounding volume of the collider (Read Only).
ну и как я понять должен как это считается в реальности? Я был готов поспорить что это считается без учета поворота относительно глобальных координат.
В свою защиту скажу, что у челов полно таких же непоняток и проблем из-за этого. Описание какой-то долбоёб на нерде писал к этим методам.
Не похуй ли на какой угол коробка повёрнута, если в итоге считается "ворлдспейс", который из себя представляет коробку большего размера просто без наклонов к мировому пространству.
У первого ставлю галки на фриз всех х,у,z.
Запускаю игру.
Когда один на другой сваливается, тот что сверху меееедленно, но начинает сдвигаться в стороне, будто ветром сдувает. И на уголок проходит сквозь зафриженный куб.
ЧЗХ?
Как добавить свайпы для смартфонов?
https://pastebin.com/NZr5D1Ce
https://www.youtube.com/watch?v=g0GmovbaCRE&ab_channel=HamzaHerbou
Я пробовал делать как на видео, но почему-то когда свайпал - цифры постоянно свайпались и летели в необходимом мне направлении.
800x892, 0:24
>>42281
https://pastebin.com/i75iu8NC
Когда прикручиваю свайп как в этом видео -
https://www.youtube.com/watch?v=g0GmovbaCRE&ab_channel=HamzaHerbou
- свайп работает, НО свайпаются объекты не один раз, а до упора, пора есть такая возможность (в начале видео я стрелками свайпаю - все работает нормально, потом мышкой начинаю).
Как это исправить?
А почему должно быть как то по другому? Ты при свайпе задаешь направление свайпа, оно таким и остается навсегда.
Включи голову. Без этого ты ничему не научишься.
У тебя MoveTile происходит, когда swipeDirection == одному из направлений. Как сделать, чтобы после MoveTile второй раз это не происходило?
Я вряд ли допру сам.
Return сделать какой-нибудь?
Сколько пытаюсь вкатиться - на очень простых вопросах спотыкаюсь.
Может айти - это не мое...
Даю очень жирную подсказку. Тебе надо, чтобы в следующий раз при проверке swipeDirection не был равен ни одному из направлений ("Left", "Right"). Что ему можно присвоить, чтобы так вышло? Где это надо сделать, когда результат прошлый уже не нужен?
Ты переоцениваешь уровень знаний, которым я обладаю.
Я проходил курсы на Udemy, но там обычно под ПК игры делают.
Это не имеет отношения к ПК-не ПК. Это просто логика последовательности событий.
Разве здесь:
private void OnDisable()
{
swipeListener.OnSwipe.RemoveListener(OnSwipe);
}
свайп не удаляется?
Тут удаляется обработчик, когда объект удаляется, ну там сцена меняется или что-то такое.
Смотри. Update вызывается каждый кадр. if !waiting временно отключает управление, тут все понятно. if (Input.GetKeyDown проверяет, нажата ли кнопка именно сейчас, в этом кадре. Для swipe у тебя такой логики нет. Ты записал в swipeDirection направление, скажем "Right" и оно там навсегда, ты его никогда не обнуляешь.
ОК, понял.
SwipeDetector.instance.swipeDirection = null в конце Update.
Буду иметь ввиду, спасибо мог сразу подсказать а не компосировать мозги ))
Эх, опростоволосился со скрытым текстом...
> не компосировать мозги
К сожалению, это так не работает. Я могу сразу за тебя и игру сделать, вот только чтобы научиться, надо не перепечатывать туториалы 1-в-1, а думать что и зачем и где происходит.
Ну, я понял только когда ты прямо указал, прям пальцем в нужное место тыкнул.
Книжка относительно свежая 2023года к слову.
где это всё, чо делать куда звонить
Найс книжка блядь, 5 и 7е переиздание и ни в одном из них ни слова об этом.
КЛИКАЮ ПО ГИПЕРССЫЛКЕ ДЛЯ ПОЯСНЕНИЯ А ТАМ НИХУЯ
ещё и кнопка bake не работает..
боже блядь какое же говнище это хуюнити, сколько можно.. СКОЛЬКО МОЖНО
Новый навмеш это та ещё неудобная ссанина, конечно. Единственный плюс - запекать не надо.
А вот какого черта в доках по юни даже версии 2023 они этот бейк не убрали... долбоебы, че с них взять
>Новый навмеш это та ещё неудобная ссанина,
так как он называется-то? прост НАВИГАТОР который это он и есть?
Как сделать игру типа Марио или Ори или Брейд на С++ мультиплатформенную, чтобы ебически красивый виузал? Огни, искры, шлейфы, дым, порох, туман, чтобы динаимчесики двигались. Свет, цвет, физика шлейфа клейкого густого думана, турбулентности после пробега героя
Вот именно как на уровне кода реализовывать эти вещи. Чтобы игра шла в 60фпс на ipad и 120фпс на пс4/хбокс
А еще - ДОЖДЬ. Т.е. огни, искры, шлефы, дым и порох будут в В ДВУХ ФИЗИЧЕСКИХ ИПОСТАСИЯХ, при сухом и влажном воздухе, да и не дискретно, а градиентно чтобы менялась физика(ХИМИЯ?!?!?!???) их поведения, в зав-то от интенсивности дождя.
720x844, 0:18
Решил к своей 2048 прикрутить подсчет количества мувов.
По итогу в начале игры кол-во мувов всегда не равно нулю.
Казалось бы - такая простая задача - а даже с ней справиться не могу...
Зачем ты одним методом вызываешь другой для установки значения, если всё находится в одной области с доступом к переменным?
Типа зачем вызывать SetScore в IncreaseScore, если можно напрямую в IncreaseScore обратится к переменной в этом же классе. Лишнее и бессмысленное действие.
В этом же блоке SetScore в одном случае используешь this. для явного указания, в другом нет(пик1). Вообще забудь про эту даунскую практику от пизданутых программистов, которые используют одни и те же имена для принимающих переменных и внутренних. Для читабельности всяко лучше использовать что-то врод inScore в качестве принимающего аргумента, раз у тебя уже есть Score переменная.
Иногда бывает скрипт и его публичные переменные не обновляются на объектах к которым ты прикрепил его как компонент. Там просто рефреш нажать надо.
Используй debug.log(); везде где только можно, если у тебя что-то не получается с блоком кода.
возвращаясь к мувам(2пик)..
PlayerPrefs что он у тебя возвращает? Не вижу что б ты там чот устанавливал, просто пытаешься получить то чего нет? Или просто части кода не хватает. Я не понял
private void MoveTiles(Vector2Int direction, int startX, int incrementX, int startY, int incrementY)
{
...
if (changed)
{
StartCoroutine(WaitForChanges());
moves++;
PlayerPrefs.SetInt("moves", moves);
}
}
Здесь увеличиваю переменную moves и сохраняю ее в PlayerPrefs.
В NewGame() пишу PlayerPrefs.SetInt("moves", 0);
И каждая новая игра начинается с нуля, но теперь кол-во ходов просто не скидывается.
Там где игру только запускаешь на старте. Ньюгеймс я так понимаю у тебя и когда переходишь на новый уровень запускаешь, так что не в нём.
Пиши в Старт метод, через который обращаешься к списку если он существует с ключом moves и явно присваивай 0
if(PlayerPrefs.HasKey("moves")) {
PlayerPrefs.SetInt("moves", 0);
}
>И каждая новая игра начинается с нуля, но теперь кол-во ходов просто не скидывается.
Не понял тебя.
Новая игра начинается с нуля. Так и должно быть по твоей задумке?
Сброс ходов не скидывается? Как же, если с 0 начинается каждая НГ. У тебя на видосе так.
что несовсем? ты русским языком можешь объяснить что не так? Я вижу кол-во мувов на старет и при нажатии НГ кнопки сбрасывается. Что не так?
на 8 секунде же сбросилось, ты троллишь что ли?
Понял, у тебя на НГ не сбрасывается. Там тоже явно надо писать сброс если у тебя такая логика игры. Не только на старте.
алсо, у тебя там две мувес в двух разных классах, сейчас ващет мне не до этого позже вернусь
https://pastebin.com/03fUw5EL
Изменил название переменной в классе TileBoard на moveCount.
Надо как-то ее обнулять при новой игре.
Но как?
Хорошо что я до этого запушил его немодифицированную версию на Гитхаб.
Видимо сама вселенная говорит, что я ерундой страдаю.
Нафиг эти мувы.
>>42591
Делал игру по туториалу, потом решил сам прикрутить дополнительное табло.
Не получилось.
Нахожусь в глубоких сомнениях касательно того, смогу ли когда-нибудь стать нормальным программистом и создать супер мега хит.
Но столько времени и сил потратил на изучение Unity, что бросать у самого финиша жалко.
Так создай новый проект и делай ту же самую игру заново но не по туториалу а опираясь на свои знания и гугл. Какой смысл копаться в коде который не понимаешь, я больше чем уверен что ты по туториалу втупую хуярил и даже не пытался понять что и почему, отсюда и такие тупые логические ошибки.
Вот смотри: сейчас в классе TileBoard я создал переменную movesCount.
Инкременирую ее в этом классе - и она увеличивается.
Потом из класса GameManager через синлтон запрашиваю ее:
moves = TileBoard.instance.movesCount.
Казалось бы, почему она в этот-то раз не грузится?
В чем здесь логическая ошибка, и как переписывания кода поможет мне это понять?
Орирую с таких челиков всегда. Ну типо не может сделать какую-то элементарную поеботу для умственно гтсталых, зато спорит. Дуримар нахуй, ну если у тебя переменная устанавливается в нужное значение, но нет эффекта на экране, значит косяк либо в передачи информации в ui, либо кто-то еще меняет значение переменной
Ты сначала ответь на вопрос нахуя ты её там создал, когда тайл поменял свою позицию у тебя должен емититься ивент, а на этот ивент должен быть подписан сборщик и обработчик информации. Тоже самое блять и с гейменеджером, какого хуя он у тебя занимается чужими делами, а не только контролирует состояние игры. Ты сначала порядок наведи, а потом уже добавляй новое. Больше всего я пернул с того что у тебя тайл и тайлстейт два разных класса, типо тайл незнает че с ним происходит по твоей логике, лол. Рекурсия тоже забавна. В целом объективно можно нахуй все снести и написать заново, проще и быстрее будет нежели сидеть копаться в мусора.
Ты сам долбоёб не разобрался в ситуации и полез с советами.
Юнити как оказывается сохраняет сессию. Т.е. когда выключаешь тест игры, то информация в списке межуровневых данных сохраняется в ФАЙЛЕ НА ДИСКЕ.
Вряд ли ему об этом на курсе сказали. Пока с этим не столкнёшься не поймёшь.
>сохраняется в ФАЙЛЕ НА ДИСКЕ
В каком месте?
Автоматом юнити нихуя не сохраняет. Нужно самому реализовывать систему сохранения.
Очко у себя чекни, может там чтото уже кто-то сохранил помимо юньки.
отбой, рзаобрался, 3секунды в гугле
Ну лаааадно, это было странно
Ну ты видишь у чела как это работает? Он сколько видосов накидал уже. Сам бы таблетки принял хоть.
run in background
Комбинировать придётся всё, пробилдер для простых форм, блендер уже для чего-то сложного. всякие двухмерные спрайты тоже где-то придется рисовать отдельно. Думай что ты быстро и просто сможешь сделать уже сам
Это возможно? Прост пока по урокам кажется, что если TRIGGER поставил, то столкновения больше не обработать.
Отбой, я забыл что коллайдеров можно несколько вешать.
if ( Collision.GetType().ToString().Equals("UnityEngine.CapsuleCollider2D") ) {пук среньк}
кажется немного громоздкой, но верной?
Спасибо анон. Самое быстрое и лёгкое скорее всего в buildere макет-прототип сделать. От этого буду отталкиваться.
поддержки
А твоя мать шлюха?
Делаю интерактивную игру и нужно придумать систему взаимодействия с объектами. Как лучше сделать?
Я думаю что нужно создать какую-нибудь базу данных на SQLite. Внести туда таблицу с диалогами.
Объекты таблицы: [название игрового объекта], [монолог]. При взаимодействии с объектом достаём рандомный монолог и выводим на экран. А есть ещё какие-нибудь варианты и норм ли это привязываться к названию объекта?
Как исправить?
Чо я делаю не так? Как ему ссылку на нужный префаб скормить. Получаю при запуске, что объект = null.
Просто не работает хуета.
Какой же юнити кусок гвона..
GetPrefabAssetPathOfNearestInstanceRoot
я получаю в консоль путь к префабу если ручками добавляю его на сцену, но вставляя его в Resources.Load кусок говна его не находит. В сёрч/индекс манагер тот же самый путь причем, всё ка кнадо.
Может права доступа какие-то нужны.. я даже хуй знает уже.
и чо ты высрал, сын шлюхи? Думаешь я не видел? Эта хуйня не работает. Сделай тоже самое с 3д объектом и приходит извиняться за свою тупость.
Потом начал прикручивать Yandex SDK - и проект перестал билдиться.
Удалил Yandex SDK - все равно проект не билдится.
Что делать?
P.S. На последнем пике написано включить Decompression Fallback, но у меня все и так включено.
Короче, нужна какая-нибудь система для быстрого и высокоуровневого управления катсценами и выходящими за кор-геймплей-луп событиями в игре.
Естественно, такая чтобы в ней было уже дохуя готовой логики. Вот в Фунгусе, например, я могу одним экшеном прописать вывод сообщения на экран, проигрывание звука, затемнение и тряску камеры, смену музыки и т.п., а не изобретать велосипед c собственными DialogCtrl.cs, CameraCtrl.cs, BGMCtrl.cs.
Ты хоть папки Temp и Library почистил?
Чел, он то >>42921 прав.
Не в том смысле что вы поливаете друг друга говнов, а в том что ошибка на твоей стороне.
Тебе просто стоило зайти в тред не с агрессии на юнити, а нормально спросить и уточнить. Согласись странно что у всех (У меня в том числе вот щас открытом проекте) работает ресурс лоад, а у тебя нет.
Значит нужно разобраться где может быть косяк.
Просто дружески напомню что стоит развернуто писать вопрос и без киданием говном на движок. Все и так кто работают в нём знает его косяки.
Спасибо, очень неплохо для опенсурса. Хотя, судя по описанию список возможностей существенно поменьше чем у Фунгуса. Фунгус ведь не просто диалоговой системой был, там дохуя логики можно было прямо в визуальном редакторе собирать. Всякие сложные условия и даже массивы с переменными можно было перебирать визуально и отлаживать.
>выблядыш, читай как работает оно
ну так попробуй пизданутая ты собака 3д объект так же из ассетов вытащить, ЭТО НЕ РАБОТАЕТ
>>42932
хватит хуету нести, этот дебил тупостью троллит. Я ему явно написал про 3д объект, а этот дегрод спратайми и пнг картинками тычет, делая вид что я ему об этом не написал.
Это ты еблан, не смотря на всю его токсичность он тебе помочь пытается, тварь ты неблагодарная.
Лучше бы извинился и продолжили общение.
ОКАЗЫВАЕТСЯ недостаточно префаб закинуть в папку ассетов. Нужно обязательно ебучую папку RESOURCES создать. И только тогда этот кусок говна сможет найти нужный префаб.
т.е как пример assets/prefabs/resources/
Где это задокументированно? Хоть один из уёбков что на ютубе пилит гайды об этом ни словом не обмолвился. Я прочитал ебучу книгу для начинающих и там ни слова, хотя о префабах немало было написано.
Я думал что Resources это чисто абстрактное имя всех ресурсов что включены в проект. И всё что есть как бы лежит в ней.
Забираю свои слова обратно. Ты ЖИВОТНОЕ
как я и написал, я думал будто это пространство имён. И всё что в проект уже в папке resources.
Потому что иначе это нелогично, какой смысл создавать ещё какую-то блядь ПАПКУ, уродуя ерархию. Будто ассеты это не ресурсы? Не оправдывайте долбоёбскую логику разработчиков движка.
Чтобы ебаный метод заработал для него нужно создавать.. папку блядь. Это сука какой-то не то что костыль.. это архитектура уровня деревенского уличного сортира вместо удобного домашнего фарфорового трона.
Хуясе ебать, это давно ввели? Я уже какое-то время на юнити не работаю, но успел понаделать несколько игр и не помню такого.
мимо
>Я думал что Resources это чисто абстрактное
Мало ли что думал, то что ты пидор, вот это очевидно.
логика простая, всё, что в Resources гарантированно попадает в билд, даже если не используется; остальные префабы нужно выставлять ручками; любой префаб в проекте вне Resources или не выставленный ручками в билд не попадёт
использование Resources - это старая техника, сейчас многие на Addressables переползают по-тихонечку
надо в настройках потыкать
https://docs.unity3d.com/Manual/class-PlayerSettingsAndroid.html#Resolution
Если судить по тому, как ты разобрался в простейшем вопросе,
>я думаю
- это пиздец с каким авансом.
Как это правильно сделать?
Создаю папку Prefabs, закидываю туда модель, удаляю пак - и эта модель тоже удаляется.
Ты сюда приходишь что б я тебя обоссывал или что? Иначе почему ты до сих пор рвёшься с нуфага?
Кода нет, я спрашивал как на объекта разобрать триггер сигналы двух разных коллайдеров, если они одного типа.
Каким образом? Были б тут явные какие-то возможности их указания ещё.
Я подозреваю их через код если добавлять, то да, что-то и вправду можно наверное. Но разве это не распространённая тема с несколькими коллайдерами на одном объекте, что бы добавить возможность их как-то уникально называть?
Можно наверное ещё два дочерних объекта добавить конечно и уже от них плясать. Типа два пустых объекта и к каждому из них по колайдеру. Но это не васянство ли?
раз они на одном объекте висят, то можешь их по радиусу различать
Там меш у модели отдельно, ручками отделяй в отдельную папку и экспорти ассетом для проверки.
Раскидай коллайдеры по переменным и от них отталкивайся.
Вопросец, а насколько тупая идея под каждый элемент этого пазла создавать элемент класса? Т.е если у меня 64 элемента, нужно о каждом его позицию хранить, его цвет, какие-то ещё особенности.
И единственная у меня мысль это двумерный массив классов.
Как бы на такое решение посмотрел человек с опытом?
Мне же типа надо перемещать элементы будет постоянно, поэтому может лучше тут именно классы?
Насколько я понял структуры по значению передаются, что мне несколько не подходит..
И если я правильно понял, то весь массив структур надо сразу инициализировать, у меня не всегда всё поле будет в начале заполнено элементами..
обычно выделяют Модель и Представление, но ты можешь делать по-простому - классами и не парится
глагне вообще сделать
А разве нет какой-то кнопки, которая могла бы скопировать все зависимости для определенной модели? Материалы, меши и все в этом духе?
Для игры в 2D нужно в чём-то сделать анимацию для персонажей.
Что установить, что будет попроще начинающему?
Хочу простым и элегантным методом узнать не выхожу ли я за рамки, что бы не дрочить каждый раз максимальную длинну массива.
есть ли какой-то метод о котором я не знаю, типа IndexOf , но для многомерного массива?
метод расширения напиши
public static class EM_Array2D
{
public static bool IsInBounds<T> (this T[,] array, int x, int y)
{
return x >= array.GetLowerBound(0) && x <= array.GetUpperBound(0)
&& y >= array.GetLowerBound(1) && y <= array.GetUpperBound(1);
}
}
можно оптимизировать кстати
А где качать?..
Нужен именно мой персонаж, ему нужна огромная куча реакций: радость с поднятыми лапками, печаль, когда хватается за голову. И тд, и тп.
всё есть.. был бы гугл
Схуяли в энити это не так. Ты в юнити программируешь на каком-то юнити шарп или что?
Дал товарищу он зашел с моего акка на своем компе, лицензия есть базовая бесплатная и она активирована, но на моем пк это не работает.
Да
Может, есть нормальный видеогайд по 2D?
Посмотрел туториал, в Shader выбрал Universal Render Pipeline/Lit, и все заработало.
Но как теперь вернуть нормальный Inspector? Чтобы transform объекта был, чтобы можно было компоненты объекту добавлять?
Куда все пропало?
Вопрос с хуяли тебя это ебет? Зачем ты работу в проверки пихаешь?
Мне нужно отображать иконку на экране, которая указывает местоположение объекта в игровом мире (нужно учитывать все 3 координаты). Эдакий HUD. Когда камера смотрит на этот объект, то это легко сделать через:
var screenPoint = _camera.WorldToScreenPoint(element.WorldPosition);
Но мне нужно, чтобы иконка всегда отображалась, даже если камера отвернулась от объекта. В этом случае иконка должна быть на краю экрана, в той точке, которая указывает направление к объекту.
Примерно понимаю как сделать. Нужно представить условный круг с радиусом Screen.Width * 0.5, в центре которого будет экран. Далее через Cos/Sin получить позицию и обрезать её, если она выходит за пределы экрана. Но вот как получить нужный угол я вообще не понял. Уже всякое перепробовал с Vector3.SignedAngle, получается херня.
Получи направление камеры, получи вектор от камеры до объекта. Вычисли угол между ними. В чем проблема?
>Вычисли угол между ними
Как именно? И как ты его используешь? Vector3.SignedAngle я уже пробовал использовать, у меня не получилось из полученного угла правильно высчитать положение иконки на экране. Только с Mathf.Atan2 и InverseTransformDirection что-то вразумительное получилось, но всё равно не точное решение.
1280x720, 0:29
Бро, спасибо! Но есть проблемка. Когда я отворачиваюсь и начинаю смотреть вверх, то иконка тоже уходит вверх (на видео с 16 секунды), хотя по логике она должна оставаться снизу. У тебя такая же проблема? Или я что-то не так сделал.
забыл написать, что алгоритм не идеальный и его можно улучшить
Поэтому сюда нельзя ничего выкладывать