Усердно готовлюсь к выпуску первого ролика! Техническая часть уже готова - осталось написать сценарий и записать все это)
Сроков никаких не даю, хочу сделать все максимально качественно и интересно:)
Немного контекста: как то давно я вел свой ютуб канал, набрал практически 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
- Событийно-ориентированная архитектура
⚡️ Совет: Начните применять эти принципы в маленьких проектах. Со временем чистый код войдет в привычку.
#Фишки
Странная ситуация получается, вроде и опыта у меня много и над проектами крупными работал, а ни одной игры в сторе нет…
Надо бы исправлять это)
Как вы относитесь к ритм играм?)
Надо бы исправлять это)
Как вы относитесь к ритм играм?)
This media is not supported in your browser
VIEW IN TELEGRAM
За пару дней сделал вот такой вот детектор битов. Работает не идеально, нужно настраивать чувствительность и другие параметры. Но все же, меня устраивает)
Audio
А еще, я для этой игры буду генерировать музыку с помощью нейронки. Сейчас сижу, пробую и знаете что?
Уже десятые раз переслушиваю одну песню... Никогда не верил в то, что нейронка сможет такое сделать, но это случилось)
На слова не обращайте внимания)
Уже десятые раз переслушиваю одну песню... Никогда не верил в то, что нейронка сможет такое сделать, но это случилось)