tgindex
Night Train Code - разработка игр

Night Train Code - разработка игр

Статистика

🖤 Разработка игр на Unity 🖤 Программирование на C# Наш форум: @ntc_forum Наш легаси-чат: @ntc_chat

Последний пост
1 янв.
Последнее чтение
11:49
Постов за неделю
0
Всего постов
20
Тип
открытый
Язык
русский
Категория
Технологии
В каталоге с
13 авг.
Подписчики
1 500
−1 за 4 дн.
Сутки
0
0,00%
Неделя
 
Месяц
 
Просмотров на пост
4 051
20 постов
Вовлечённость
270,1%
к подписчикам
Постов в день
0,0
всего 20
Упоминаний
0
каналов
Охват размещения
оценка
1/24сутки в ленте
1/48двое суток
1/72трое суток

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 1 янв.1 81181

    а теперь всех с Новым годом!) 🔴

  • 31 дек.1 75794

    Всех с наступающим Новым годом!!! 🎄✨

  • В Unity есть удобный метод Vector3.Distance, которым мы все так часто пользуемся, но почему не всегда он — лучший выбор? Дело в том, что Vector3.Distance вычисляет корень из квадрата евклидова расстояния между двумя векторами для вычисления реального значения, а это относительно дорогая операция. В некоторых случаях мы можем избежать излишнего извлечения корня, воспользовавшись следующим методом: public static float SqrDistance(Vector3 first, Vector3 second) { float deltaX = first.x - second.x; float deltaY = first.y - second.y; float deltaZ = first.z - second.z; return deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; } Мы поняли, что получение квадрата расстояния — это более дешевая операция, чем получение обычного. Но где нам это может пригодиться? Например, мы можем использовать квадрат расстояния там, где важно сравнение расстояний, а не само значение: public static bool WithinRadius(Vector3 first, Vector3 second, float distance) { return SqrDistance(first, second) < distance * distance; } Этот метод проверяет, находится ли один объект внутри определённого радиуса другого. Как видите, здесь нет необходимости в использовании обычного метода Vector3.Distance и мы можем легко оптимизировать этот процесс. В качестве бонуса покажу ещё один пример. Для того, чтобы найти ближайший к точке объект из коллекции, нам тоже будет достаточно использовать метод SqrDistance вместо Vector3.Distance: public static T GetClosest<T>(this IEnumerable<T> components, Vector3 position) where T : Component { T closest = null; var minSqrDistance = float.MaxValue; foreach (T component in components) { Transform transform = component.transform; float sqrDistance = SqrDistance(transform.position, position); if (sqrDistance < minSqrDistance) { closest = component; minSqrDistance = sqrDistance; } } return closest; } Night Train Code

  • С Днём Великой Победы!

  • Писать методы расширения в C# можно и к кортежам Например, можно легко узнать прогресс пройденного времени с результатом от 0 до 1. То есть если пройдёт одна секунда из двух, то мы получим значение 0.5 private void CalculateProgress() { _progress.Value = (_elapsedTime, _settings.Duration).Progress01(); } Само расширение: public static float Progress01(this (float a, float b) tuple) { return Mathf.Clamp01(tuple.a / PreventZero(tuple.b)); } На ноль делить нельзя, поэтому я написал метод PreventZero(), который принимает в себя float и, при необходимости, заменит 0 на float.Epsilon с сохранением знака числа (плюса или минуса) public static float PreventZero(this float value) { return Mathf.Approximately(value, 0) ? Mathf.Sign(value) * float.Epsilon : value; } Night Train Code

  • без подписи

  • Опробовал я и ООП, и ECS, и реактивное программирование. Как итог, давно уже использую последнее на постоянной основе. Сначала пользовался своим решением, а популярный UniRx не зацепил меня в своё время и я благополучно его пропустил. Затем я решил не вставать на путь скуфа и начал отстаивать свои зумерские права, пробуя что-то новое, в чём мне успешно помогла новая библиотека R3. Вот небольшой кусок кода из документации, демонстрирующий её мощь (обратите внимание на формирование свойства IsDead в конструкторе): public class Enemy { public ReactiveProperty<long> CurrentHp { get; private set; } public ReactiveProperty<bool> IsDead { get; private set; } public Enemy(int initialHp) { CurrentHp = new ReactiveProperty<long>(initialHp); IsDead = CurrentHp.Select(health => health <= 0).ToReactiveProperty(); } } Здесь точно есть, где разгуляться, а использовать все фишки этой библиотеки вместе с MVVM (и другими паттернами этого семейства) одно удовольствие. Так сказать, UniRx на стероидах. ❔ По какой причине я перешёл на реактивное программирование помимо разных фишек R3? Из-за банальной экономии времени, ибо здесь можно легко повторно использовать ранее написанные механики, так как здесь идёт работа именно с данными, а не с конкретными сущностями. Ещё и меньше кода получится, в отличие от того же ECS. Рекомендую попробовать этот подход тем, кто ещё не попробовал. Возможно, это то, что вы ищете.

  • С Новым годом!!! ☃️✨

  • без подписи

  • без подписи

  • Всех с наступающим Новым годом! 🎄☃️ Желаю всем хорошо встретить 2025 и отдохнуть 🥛 А своими ёлками хвастаться можно здесь 🏡

  • Недавно я обновил библиотеку OverlapSugar из видео про реализацию атак в Unity. Произвёл оптимизацию методов TryFind и немного улучшил удобство использования Кстати, поздно рассказываю, но в Unity успели отменить Runtime Fee, что было очень даже ожидаемо https://github.com/MeeXaSiK/OverlapSugar

  • без подписи

  • Сдерживаю обещание 😎🔥 Новое видео уже на канале! Материалы из ролика вы сможете найти здесь. https://www.youtube.com/watch?v=VPfqGRlyoFU

  • Всем привет! Сегодня мне исполняется 22 года 🎂 И, по традиции, делаю пост в свой день рождения 🙃 Прошу прощения за то, что снова пропал после одного из последних постов. Честно сказать, у меня не было сильной мотивации делать контент как раньше, хочется больше свободного времени проводить с близкими после работы За 22 года жизни я понял, что лучше ничего, никому и никогда не обещать, но я всё же рискну и пообещаю, что выпущу новый ролик до конца этого лета. Мне очень некомфортно на душе из-за очередного длительного перерыва. Всех обнял! ❤️

  • С Днём Победы!!!

  • Всем спасибо за 8К на YouTube! ❤️ Как думаете, уже пора потихоньку возвращаться с новым контентом? 😏 Вдохновение снова начинает появляться, а я как раз про Night Pool новое видео ещё не записывал, но сюжет писать начинал аж несколько месяцев назад. 🫠 Думаю, начнём с него, а там я уже и расчехлю другой интересный материал из запылившегося контент плана!)

  • Для тех, кто не в теме... https://telegra.ph/Unity-6-proshchaetsya-s-C-i-obyavlyaet-o-perehode-na-C-04-01

  • Простенький пример оптимизированного передвижения персонажа в Unity с применением крутых паттернов Стоит ли чаще постить такую годноту? Кстати, все уже слышали о переходе Unity 6 с C# на C++? 😬

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