Нейросети в разработке игр на Unity
Статья о моем опыте использования ИИ в контексте разработки игр. От создания идеи до ассетов и баланса!
Если вы никогда не пробовали их использовать или хотите узнать какие на данный момент лучшие - советую прочесть статью!
Статья о моем опыте использования ИИ в контексте разработки игр. От создания идеи до ассетов и баланса!
Если вы никогда не пробовали их использовать или хотите узнать какие на данный момент лучшие - советую прочесть статью!
Telegraph
Нейросети в разработке игр на Unity
Как ни странно, данная статья полностью написана мной. Я хочу донести до вас свой опыт использование нейронок во всевозможных ситуациях в рамках разработки. Здесь не будет кучи ссылок на непонятные и дорогие сервисы. Моя задача предоставить вам лучшие варианты…
Как я докатился до жизни такой часть 3
Начало истории
Естественно, с таким багажом никто брать не хотел.
В феврале я все таки нашел вакансию на ХедХантере, где я прошел собеседование и начал работать. Но было один подвох - 20к в месяц. За такие деньги в Питере хватит максимум на еду. А руководство требовало делать невыполнимые задачи.
Как вы поняли, долго я там не задержался. Через неделю уже уволился, даже не рассчитали...
Пошел дальше на hh.ru. Около недели я откликался и неожиданно меня пригласили на ПК проект в стим, еще и с очень интересной идеей!
Прошел собеседование, ответил на вопросы, и дал оценку по времени выполнения проекта - 3 месяца. Это было максимально сжатые сроки, за которые я скорее всего успел.
Но и тут оказался небольшой подвох! Меня попросили сжать сроки еще больше! Мол, 3 месяца для такого проекта слишком много... Естественно, когда ты устраиваешься на первую работу, ты готов демпинговать, лишь бы взяли. Пришлось сказать 1,5 месяца.
В итоге: за первый месяц - я не успел практически ничего. Прошло 2 месяца - я сделал меньше половины, но менеджер сказал, что дает мне еще времени. Прошло 3 месяца - я все еще делал проект...
Если вы думали, что все так просто - не переживайте, все еще впереди! Жду комментарии от вас, если хотите узнать финал истории)
Продолжение
#ЖизньArtemiZ
Начало истории
Естественно, с таким багажом никто брать не хотел.
В феврале я все таки нашел вакансию на ХедХантере, где я прошел собеседование и начал работать. Но было один подвох - 20к в месяц. За такие деньги в Питере хватит максимум на еду. А руководство требовало делать невыполнимые задачи.
Как вы поняли, долго я там не задержался. Через неделю уже уволился, даже не рассчитали...
Пошел дальше на hh.ru. Около недели я откликался и неожиданно меня пригласили на ПК проект в стим, еще и с очень интересной идеей!
Прошел собеседование, ответил на вопросы, и дал оценку по времени выполнения проекта - 3 месяца. Это было максимально сжатые сроки, за которые я скорее всего успел.
Но и тут оказался небольшой подвох! Меня попросили сжать сроки еще больше! Мол, 3 месяца для такого проекта слишком много... Естественно, когда ты устраиваешься на первую работу, ты готов демпинговать, лишь бы взяли. Пришлось сказать 1,5 месяца.
В итоге: за первый месяц - я не успел практически ничего. Прошло 2 месяца - я сделал меньше половины, но менеджер сказал, что дает мне еще времени. Прошло 3 месяца - я все еще делал проект...
Продолжение
#ЖизньArtemiZ
Telegram
Готова ли Игра?
Как я докатился до жизни такой часть 1
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
🚀 Как правильно использовать Update() и не убить производительность
Привет, геймдев! Сегодня разберёмсамую частую ошибку джунов - неправильное использование Update().
⚡️ Почему это важно?
Update() вызывается КАЖДЫЙ КАДР для КАЖДОГО активного скрипта. На 100 объектах при 60 FPS это уже 6000 вызовов в секунду!
🛠 Три золотых правила оптимизации Update():
3. Используйте правильные события:
- FixedUpdate() - для физики
- LateUpdate() - для камеры
- Update() - для инпута и геймплея
🎯 Результат:
- Стабильный FPS
- Меньше нагрузка на CPU
- Счастливые игроки
#Фишки
Привет, геймдев! Сегодня разберём
⚡️ Почему это важно?
Update() вызывается КАЖДЫЙ КАДР для КАЖДОГО активного скрипта. На 100 объектах при 60 FPS это уже 6000 вызовов в секунду!
🛠 Три золотых правила оптимизации Update():
1. Кэшируйте компоненты:// Плохо ❌
void Update() {
GetComponent<Rigidbody>().velocity = Vector3.up;
}
// Хорошо ✅
Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
}
void Update() {
rb.velocity = Vector3.up;
}
2. Избегайте Find и GetComponent в Update:// Очень плохо ❌
void Update() {
GameObject.Find("Player").transform.position;
}
3. Используйте правильные события:
- FixedUpdate() - для физики
- LateUpdate() - для камеры
- Update() - для инпута и геймплея
💡 Лайфхак: Для редких проверок используйте корутины:// Вместо проверки каждый кадр
IEnumerator CheckEverySecond() {
while (true) {
CheckSomething();
yield return new WaitForSeconds(1f);
}
}
🎯 Результат:
- Стабильный FPS
- Меньше нагрузка на CPU
- Счастливые игроки
#Фишки
Жду новые вопросы под этим постом! В следующую пятницу отвечу на один из них)
Если вы стесняетесь написать лично, можете оставить анонимный вопрос через специального бота
Если вы стесняетесь написать лично, можете оставить анонимный вопрос через специального бота
Telegram
Анонимный вопрос
❓ Бот для получения анонимных вопросов
👋 Поддержка - @quesupport
👋 Поддержка - @quesupport
Усердно готовлюсь к выпуску первого ролика! Техническая часть уже готова - осталось написать сценарий и записать все это)
Сроков никаких не даю, хочу сделать все максимально качественно и интересно:)
Немного контекста: как то давно я вел свой ютуб канал, набрал практически 1000 подписчиков и бросил. Сейчас хочу возобновиться с новым опытом и знаниями!)
Сроков никаких не даю, хочу сделать все максимально качественно и интересно:)
Мы продолжаем работу над авто-чесом. Недавно утвердили концепт первой локации, пробуем делать подобную локацию. А в это время я все еще сражаюсь с трудностями мультиплеера.
На прошлом созвоне мы постестили билд, но не без проблем. Минут 30 мы пытались запуститься в одно лобби)))
Однако, несмотря на все страдания, этот билд оказался первым, который не вылетал, не крашился, все работало!!!
Да, были некоторые баги, но это не столь важно. Мы наконец-то перешли на этап фикса визуальных багов, а не геймплейных и логических.
В общем, постепенно продвигаемся))
#Спойлер
На прошлом созвоне мы постестили билд, но не без проблем. Минут 30 мы пытались запуститься в одно лобби)))
Однако, несмотря на все страдания, этот билд оказался первым, который не вылетал, не крашился, все работало!!!
Да, были некоторые баги, но это не столь важно. Мы наконец-то перешли на этап фикса визуальных багов, а не геймплейных и логических.
В общем, постепенно продвигаемся))
#Спойлер
Как я докатился до жизни такой часть 4
Начало истории
Ах да, я же вам не рассказал еще одну деталь. Во время заключения договора на разработки игры я указывал срок работы и оплату после окончания проекта. Да - оплата была проектная, а значит чем дольше я его делал, тем меньше в месяц я бы получил. А указал я в договоре не сильно большую сумму, а за 3 месяця я скатился до уровня первой работы и даже ниже. В общем, все было ужасно, еще и сроки поджимали...
Внезапно мне предлагают пройти собеседование в зарубежный стартап. К слову, на протяжении всего времени я периодически откликался на различные вакансии. Но тут было что-то странное, мне предложили работу за рубежом с окладомв 10 раз больше!
Я думаю, вы не сомневаетесь, что я сделал: написал своему работодателю, что увольняюсь... Если бы все было так просто...
По договору, если я не сдаю работу, то обязан заплатить неустойку. Но продолжать работать мне не особо хотелось, учитывая предложение от нового работодателя.
В общем, я заплатил неустойку и, уже больше полгода, работаю в великолепном коллективе из 5 человек, с великолепными условиями. Я уже получил огромный опыт, и сейчас я могу смело назвать себя хорошим разработчиком, а не просто кодером, который только начинает изучать сферу)
#ЖизньArtemiZ
Начало истории
Ах да, я же вам не рассказал еще одну деталь. Во время заключения договора на разработки игры я указывал срок работы и оплату после окончания проекта. Да - оплата была проектная, а значит чем дольше я его делал, тем меньше в месяц я бы получил. А указал я в договоре не сильно большую сумму, а за 3 месяця я скатился до уровня первой работы и даже ниже. В общем, все было ужасно, еще и сроки поджимали...
Внезапно мне предлагают пройти собеседование в зарубежный стартап. К слову, на протяжении всего времени я периодически откликался на различные вакансии. Но тут было что-то странное, мне предложили работу за рубежом с окладом
Я думаю, вы не сомневаетесь, что я сделал: написал своему работодателю, что увольняюсь... Если бы все было так просто...
По договору, если я не сдаю работу, то обязан заплатить неустойку. Но продолжать работать мне не особо хотелось, учитывая предложение от нового работодателя.
В общем, я заплатил неустойку и, уже больше полгода, работаю в великолепном коллективе из 5 человек, с великолепными условиями. Я уже получил огромный опыт, и сейчас я могу смело назвать себя хорошим разработчиком, а не просто кодером, который только начинает изучать сферу)
#ЖизньArtemiZ
Telegram
Готова ли Игра?
Как я докатился до жизни такой часть 1
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Меня зовут - Артем. Я очень люблю игры! Особенно их создавать)
4 года мне понадобилось, чтобы пройти путь «От идеи до реализации», а точнее от желания начать создавать игры, до работы мечты!
В конце 11 класса передо…
Режим, планы, все это конечно важно. Но когда приходит вдохновение, я предпочитаю делать до конца:)
🎮 Как оптимизировать физику и перестать терять FPS
Сегодня разберём, почему ваша игра может тормозить из-за физики и как это исправить.
🔥 Главная ошибка: использование слишком сложных коллайдеров
Вот что нужно знать:
⚡️ Золотое правило: используйте составные примитивы вместо Mesh Collider
🛠 Три быстрых способа оптимизировать физику:
1. Используйте слои столкновений:
2. Отключайте Rigidbody когда можно:
3. Используйте физические материалы с правильными настройками трения:
💡 Профи-совет:
Включите Wireframe mode в Scene View (Shading mode -> Wireframe), выделите все объекты и проверьте, нет ли лишних коллайдеров.
🎯 Результат: Стабильный FPS даже при большом количестве объектов
#Фишки
Сегодня разберём, почему ваша игра может тормозить из-за физики и как это исправить.
🔥 Главная ошибка: использование слишком сложных коллайдеров
Вот что нужно знать:
// Скорость расчётов (от быстрого к медленному):
1. Sphere Collider
2. Box Collider
3. Capsule Collider
4. Mesh Collider (convex)
5. Mesh Collider (non-convex) 💀
⚡️ Золотое правило: используйте составные примитивы вместо Mesh Collider
// Плохо ❌
- Один сложный Mesh Collider для всего персонажа
// Хорошо ✅
- Capsule Collider для тела
- Box Collider для оружия
- Sphere Collider для головы
🛠 Три быстрых способа оптимизировать физику:
1. Используйте слои столкновений:
// В Physics Settings настройте матрицу
// чтобы враги не проверяли столкновения друг с другом
[SerializeField] private LayerMask _enemyLayer;
private void OnCollisionEnter(Collision other)
{
if (other.gameObject.layer == _enemyLayer)
{
// Do something
}
}
2. Отключайте Rigidbody когда можно:
_rb.isKinematic = true; // для неподвижных объектов
3. Используйте физические материалы с правильными настройками трения:
// Для скользких поверхностей
_physicMaterial.friction = 0;
_physicMaterial.bounciness = 0;
💡 Профи-совет:
Включите Wireframe mode в Scene View (Shading mode -> Wireframe), выделите все объекты и проверьте, нет ли лишних коллайдеров.
🎯 Результат: Стабильный FPS даже при большом количестве объектов
#Фишки
Жду новые вопросы под этим постом! В следующую пятницу отвечу на один из них)
Если вы стесняетесь написать лично, можете оставить анонимный вопрос через специального бота
Если вы стесняетесь написать лично, можете оставить анонимный вопрос через специального бота
Telegram
Анонимный вопрос
❓ Бот для получения анонимных вопросов
👋 Поддержка - @quesupport
👋 Поддержка - @quesupport
Если хотите, могу скинуть исходники (как подключиться и использовать GigaChat).
P.S. Если что, нигде нет инфы как подключиться именно к Unity.
P.P.S. Если спросите, почему именно GigaChat а не что то другое, отвечаю: единственная нейронка, у которой есть бесплатные токены + она официально доступна для РФ (это очень важно для меня, так как я хочу с ее использованием податься на конкурс)
P.S. Если что, нигде нет инфы как подключиться именно к Unity.
P.P.S. Если спросите, почему именно GigaChat а не что то другое, отвечаю: единственная нейронка, у которой есть бесплатные токены + она официально доступна для РФ (это очень важно для меня, так как я хочу с ее использованием податься на конкурс)
GigaChat.unitypackage
4.7 KB
Все, что вам нужно сделать, зарегаться на сайте и получить ключ авторизации (вставить его в ScriptableObject). Теперь на сцене выбираем камеру, на ней весит скрипт, куда нужно вводить запрос и все!
Фрэймворки переоценены
В последнее время меня часто спрашивают, пользуюсь ли я какими-то фреймворкими, и меня возникает вопрос, почему вокруг них такой хайп?
Лично я не пользуюсь практически ничем. Единственное, сейчас делаем мультиплеер, следовательно изучил Photon. Но в остальном, я считаю, что они практически бесполезны…
Не торопитесь кидаться тапками, есть пару но!
В каких случаях сторонние ресурсы бесполезны:
1. Вы новичок!
Если у вас нет базы, вы не понимаете как составляется архитектура базовых приложений и не уверены в языке, на котором пишете: фреймворки вам не помогут
2. Вы делаете типичный проект:
Фреймворки, как правило, решают специфические проблемы, которые вы не встретите в 50% проектов.
В каких случаях они нужны:
1. Если вам нужно решить специфическую задачу (мультиплеер, сторонный сервер, нейронка и тд)
2. Вы много лет работаете, на 100% уверены в том, что пишете и вам хочется развиваться.
В остальных случаях я не советую из использовать. Почему?
Неопытный программист может не просто не получить никакой пользы, а еще и привыкнуть к неправильным практикам и загубить себе несколько лет работы.
В Unity встроено достаточно функций, чтобы реализовать практически все, что угодно. И лучше сделать это самому, чем использовать сторонний код. Так вы будете быстрее развиваться и углублять знания.
#Мнение
В последнее время меня часто спрашивают, пользуюсь ли я какими-то фреймворкими, и меня возникает вопрос, почему вокруг них такой хайп?
Лично я не пользуюсь практически ничем. Единственное, сейчас делаем мультиплеер, следовательно изучил Photon. Но в остальном, я считаю, что они практически бесполезны…
Не торопитесь кидаться тапками, есть пару но!
В каких случаях сторонние ресурсы бесполезны:
1. Вы новичок!
Если у вас нет базы, вы не понимаете как составляется архитектура базовых приложений и не уверены в языке, на котором пишете: фреймворки вам не помогут
2. Вы делаете типичный проект:
Фреймворки, как правило, решают специфические проблемы, которые вы не встретите в 50% проектов.
В каких случаях они нужны:
1. Если вам нужно решить специфическую задачу (мультиплеер, сторонный сервер, нейронка и тд)
2. Вы много лет работаете, на 100% уверены в том, что пишете и вам хочется развиваться.
В остальных случаях я не советую из использовать. Почему?
Неопытный программист может не просто не получить никакой пользы, а еще и привыкнуть к неправильным практикам и загубить себе несколько лет работы.
В Unity встроено достаточно функций, чтобы реализовать практически все, что угодно. И лучше сделать это самому, чем использовать сторонний код. Так вы будете быстрее развиваться и углублять знания.
#Мнение
🎮Чистый код в Unity для начинающих
Привет! Сегодня поговорим об основах архитектуры кода в Unity. Это то, что отличает начинающего разработчика от профессионала.
📝 Основные принципы чистого кода:
1. Правильное именование
2. Один скрипт - одна задача
3. Кэширование компонентов
💡 Полезные советы:
- Используйте [SerializeField] вместо public для инспектора
- Группируйте похожие переменные
- Добавляйте XML-комментарии к публичным методам
🎯 Простой пример правильной структуры:
📚 Что изучать дальше:
- SOLID принципы
- Паттерны проектирования
- Dependency Injection
- Событийно-ориентированная архитектура
⚡️ Совет: Начните применять эти принципы в маленьких проектах. Со временем чистый код войдет в привычку.
#Фишки
Привет! Сегодня поговорим об основах архитектуры кода в Unity. Это то, что отличает начинающего разработчика от профессионала.
📝 Основные принципы чистого кода:
1. Правильное именование
// ❌ Плохо
public class plController : MonoBehaviour
{
private float spd = 5f;
public void mv() { }
}
// ✅ Хорошо
public class PlayerController : MonoBehaviour
{
private float _moveSpeed = 5f;
public void Move() { }
}
2. Один скрипт - одна задача
// ❌ Плохо
public class Player : MonoBehaviour
{
public void Move() { }
public void Attack() { }
public void UpdateUI() { }
public void SaveGame() { }
}
// ✅ Хорошо
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float _moveSpeed = 5f;
private Rigidbody2D _rb;
private void Awake()
{
_rb = GetComponent<Rigidbody2D>();
}
public void Move(Vector2 direction)
{
_rb.velocity = direction * _moveSpeed;
}
}
3. Кэширование компонентов
// ❌ Плохо
private void Update()
{
GetComponent<Rigidbody2D>().velocity = Vector2.right;
}
// ✅ Хорошо
private Rigidbody2D _rb;
private void Awake()
{
_rb = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
_rb.velocity = Vector2.right;
}
💡 Полезные советы:
- Используйте [SerializeField] вместо public для инспектора
- Группируйте похожие переменные
- Добавляйте XML-комментарии к публичным методам
/// <summary>
/// Наносит урон игроку.
/// </summary>
/// <param name="damage">Количество урона.</param>
/// <returns>Оставшееся здоровье.</returns>
public float TakeDamage(float damage)
{
_currentHealth -= damage;
return _currentHealth;
}
🎯 Простой пример правильной структуры:
public class PlayerHealth : MonoBehaviour
{
[SerializeField] private float _maxHealth = 100f;
private float _currentHealth;
public event System.Action<float> OnHealthChanged;
private void Awake()
{
_currentHealth = _maxHealth;
}
public void TakeDamage(float damage)
{
_currentHealth = Mathf.Max(0f, _currentHealth - damage);
OnHealthChanged?.Invoke(_currentHealth);
}
public void Heal(float amount)
{
_currentHealth = Mathf.Min(_maxHealth, _currentHealth + amount);
OnHealthChanged?.Invoke(_currentHealth);
}
}
📚 Что изучать дальше:
- SOLID принципы
- Паттерны проектирования
- Dependency Injection
- Событийно-ориентированная архитектура
⚡️ Совет: Начните применять эти принципы в маленьких проектах. Со временем чистый код войдет в привычку.
#Фишки
Странная ситуация получается, вроде и опыта у меня много и над проектами крупными работал, а ни одной игры в сторе нет…
Надо бы исправлять это)
Как вы относитесь к ритм играм?)
Надо бы исправлять это)
Как вы относитесь к ритм играм?)