Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
В Битве Героев вы будете уничтожать монстров, отправляться на приключения со своим кланом. Вас множество локаций, монстров, снаряжения. Приведи своего героя к победе!

Битва Героев

Приключения, Ролевые, Кликер

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Unity + Программирование

С этим тегом используют

Gamedev Разработка Инди Инди игра Игры YouTube Компьютерные игры IT Программист IT юмор Python Картинка с текстом Юмор Все
300 постов сначала свежее
0
Agmioli
Agmioli
1 месяц назад
Искусственный интеллект

Как с нуля, сгенерировать игру или приложение, состоящие из нескольких файлов. Для чайников!⁠⁠

Как с нуля, сгенерировать игру или приложение, состоящие из нескольких файлов. Для чайников! Искусственный интеллект, Нейронные сети, Gamedev, Unity, Приложение, Android разработка, Digital, Программа, Компьютерные игры, Программирование, Программное обеспечение, Python, Гайд, Лайфхак, Чат-бот, Разработка, HTML, Браузерные игры

Как с ноля, сгенерировать игру или приложение, состоящие из нескольких файлов. Для чайников.

Некоторые статьи по создание кода игр при помощи нейросетей, не учитывают один важный нюанс.
Большинство игр и программ для разных платформ, состоит не из одного файла или листа кода, а из нескольких файлов.

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

Чтобы избежать сложностей и путаницы, достаточно в самом начале использовать важную команду, которая выглядит примерно так:
Напиши для каждого файла код игры которая будет запускаться с html-сайта. Суть игры следующая.....

Но если вы создаете игру не на базе html-страниц и сайта, то вместо фразы "которая будет запускаться с html-сайта", вам надо указать типа-платформу игры, или ее среду разработки.

"Напиши для каждого файла код игры", является самой главной фразой, с которой надо начинать любой запрос, если приложение или игра состоят не из одного файла или страницы.

ПРАКТИКА.
Вот полный пример запроса для нейросети, чтобы создать саму примитивную игру, которая запускается в виде веб-страницы в браузере.

ЗАПРОС:
Напиши для каждого файла код игры которая будет запускаться с html-сайта. Суть игры следующая.

Объект-игрок, вид которого задается файлом"image1", управляется при помощи клавиш. Клавиши-стрелки определяют направление стороны движения объекта-игрока.

В пространстве игры, рандомно расположены объекты-препятствия, внешний вид которых задается файлом "image2".

Если Объект-игрок задевает объекты-препятствия, то Объект-игрок отскакивает в сторону.

Фон игры задается файлом "image3".

Код созданный для каждого файла, полностью вставляете в текстовый редактор (например Блокнот), и сохраняете с тем названием и расширением, который указала нейросеть.

Если вы не знаете, в какую директорию/папку игры, вставлять конкретный файл
- наберите в интернет поиске :
"название.расширение файла где должен находиться"
"название.расширение файла где расположен/где находиться"
"название.расширение файла куда положить"
Или просто изучите архитектуру игровой платформы, чтобы решить этот вопрос".

Что касается графический файлов - то их вы должны рисовать в нужном формате в графических редакторах, а потом аналогично размещать в директорию игры, так-же разузнав куда их поместить по аналогии с файлами кодов игры.

Показать полностью
[моё] Искусственный интеллект Нейронные сети Gamedev Unity Приложение Android разработка Digital Программа Компьютерные игры Программирование Программное обеспечение Python Гайд Лайфхак Чат-бот Разработка HTML Браузерные игры
1
2
mars.frontier
mars.frontier
1 месяц назад

Как мы делали мини-игру про ровер на Марсе внутри Telegram WebApp⁠⁠

«Хочется сделать простую карту, чтобы листать её в Telegram». С этого всё и началось. А закончилось — изометрическим движком, авторизацией по WebApp, системой энергии, покупкой участков и боевым ровером с шестью колёсами.

1/3

🚀 С чего всё началось?

В начале всё было очень просто.
Мы сделали простенького бота, о котором я уже как-то тут писал, и бэк рендерил картинки с кусочком карты, где ты находишься.

В целом, даже эта идея была вполне рабочей и первые 300 пользователей с разных источников легко собрались. Мы даже провели на 9 мая конкурс "найди звезду победы" и выплатили победителю небольшой приз :)

Но само собой, что бот - не предел мечтаний, нужно было пилить полноценный мини-апп.

На боте лишь проверили гипотезу, отладили механики, типа уменьшения энергии, подзарядки аккумулятора в течении времени, пока не заходишь в игру.

Первый шаг в сторону мини-аппки - сделали вебстраничку, где можно было листать мышкой или пальцем — просто ради визуализации. Прямоугольная сетка, тайлы, немного стилей. Telegram WebApp проглатывал HTML5 на ура. Тогда не было никакой логики, просто подгрузка текстур и картинка под пальцем.

Вот как это выглядело:

  • Пользователь заходил и видел карту Марса.

  • Никакого взаимодействия — только “глянуть”.

🎮 А потом захотелось интерактивности

Следующим шагом стало добавление изометрии — чтобы выглядело как псевдо-3D. Самое интересное, что даже не потребовалось изменять текстуры. Серьезно :) Они по-прежнему те же самые, квадратные, 64 х 64. И не используется никакой 3д - движок.

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


🧠 Основная идея:

Каждый квадратный тайл поворачивается на 45° и масштабируется по вертикали, чтобы получился ромб (изометрическая проекция). Вместо привычной сетки (x, y) мы рассчитываем экранные координаты (left, top) по формуле:


📐 Формулы для отображения:

При размере одного тайла T:

  • W = T * sqrt(2) — изометрическая ширина (диагональ квадрата).

  • H = W / 2 — изометрическая высота (высота ромба).

  • WX2 = W / 2, HX2 = H / 2 — половинки для смещения от центра.

Переход от логических координат (dx, dy) к пиксельным:

isoX = (dx - dy) * WX2 + centerX; isoY = (dx + dy) * HX2 + centerY;


🧩 Что это даёт:

  • (dx - dy) — смещает тайл по горизонтали.

  • (dx + dy) — смещает тайл по вертикали.

  • centerX, centerY — центр экрана, чтобы карта строилась относительно игрока.


🎯 В результате:

  • Из обычной квадратной сетки (x, y) формируется ромбовидная карта, где видны и горизонтальные, и вертикальные соседние тайлы.

  • Центральная клетка (текущий игрок) — всегда по центру, а остальные располагаются вокруг.

    Ну а дальше уже дело техники - придумали алгоритм перемещения в 8 направлениях: вверх, вниз, влево, вправо, плюс диагонали.

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

    Задали запреты на воду, скалы и занятую клетку, чтобы не было “читов”.

🔐 Само собой - авторизация

Чтобы пользователь не “прыгал” по чужим роверам и участкам, мы внедрили Telegram WebApp InitData (это такая строка с хешем, которую фронт передает нам в бэк, а мы - уже на сервере телеграм с токеном бота валидируем подпись. Если сошлась - то пользователь зашел к нам через телегу. Если нет - скорее всего он просто открыл веб-страницу как сайт, или что-то пытается поломать, подделать :)

Если кратко:

  • Telegram сам отдаёт токен с подписью.

  • Мы проверяем подпись на бэке по HMAC SHA256.

  • Получаем ID пользователя, сохраняем его в сессии.

Теперь всё честно: ровер – только твой, кристаллы – только твои.

🪐 Стало красивее: добавили кристаллы и рамки

Потом появились:

  • Кристаллы на клетках — можно собирать.

  • Подсветка клеток: белая рамка — твоя, красная — чужая.

  • Имена владельцев, чтобы было видно, кто что захватил.

    В планах: Покупка участков за кристаллы. Это было в текстовом боте. И ползая по карте, даже видны купленные тобой (белым) и оппонентами (красным) участки.

⚡️ Оптимизация и загрузка ассетов

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

  • Добавили прелоадер, который подгружает PNG-шки перед игрой.

  • Сделали показ спиннера на любом действии (движение, загрузка).

  • Кэшируем тайлы и обновляем только при движении.

🤖 Как выглядит сейчас

Игрок:

  • Заходит в Telegram Mini App.

  • Авторизуется за доли секунды.

  • Видит изометрическую карту с ровером, кристаллами, участками, рекламными баннерами.

  • Может двигаться по клеткам, собирать кристаллы (в будущем - бурить и находить ресурсы, торговать ими, покупать землю).

А мы — всё это рисуем прямо в DOM.
Никаких Canvas, WebGL, или тяжелых движков. Только HTML, CSS и немного магии на JS.


💬 Если интересно — покажу, как это выглядит вживую.
Тестить можно тут. А если зайдёт — добавим NFT, фермы и квесты на выживание 😄

Показать полностью 3
[моё] Gamedev Разработка Программирование Telegram Javascript Python Unity Frontend Backend Web Web-программирование Ton HTML CSS Верстка Длиннопост
9
1
Asmagor
1 месяц назад

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 1⁠⁠

Простите, мне пипец как стыдно просить помощи, но данный материал пока пишется с целью получения хоть каких нибудь денег... Блять, испанский стыд... докатился....

Итак... игра.

Посмотрев на то, что народ публикует под вывеской - "Я сделялъ" (тут картинка, где почки показывают мозгу камни) - я немного офигел и подумав решил, что буду делать игру RTS/RPG в космосе.
Почему RTS/RPG? Достойный вызов, изумруд в портфолио, да и не солидно делать, вот эти вот покатушки шариком, бесконечный бегун (runners)...


Поизучав игры, я вначале хотел сделать игру на мобильный телефон (прекрати называть ЭТО телефоном - запомни, это - устройство) на Android, но слегка приуныл от нехватки знаний.


Почему в космосе, спросят самые любопытные? А, потому, что в этом случае надо меньше объектов.

В итоге посмотрев ещё несколько видосов от CodeMonkey (хитрый дядька, но об этом потом) я понял, что:
1. Сэттинг - будущее, 2250 год, космос.
2. Жанр - RTS/RPG
3. Платформа: Windows
4. Распространение: Steam
5. Тип: Singleplayer (пока что)

Задача максимум:
31.05.2025 - создать MVP* и опубликовать игру в раннем доступе по сходной цене.


*Шо такое MVP - Minimal Viable Product, тобишь, по-нашему, это будет - Минимально Жизнеспособный Продукт.

Я пропущу такие моменты (они, кстати, очень важны. Пожалуйста - не пренебрегайте.):

1. Составление Game Design Document
2. Составление Technical Design Document

Итак, немного о предстоящей игре.... Я вдохновлялся следующими играми: EVE Online, Homeworld2, Star Wolves 3: Civil War, X4

Игровой мир: Галактика, звездные системы, соединенные прыжковыми вратами или черными дырами, кстати галактика планируется на 60+ систем, но для начала попробую сделать хотя бы 10
4 Основные фракции - Калгарцы, Аракибы, Воссолны, Сларусы.
Второстепенные фракции - Пираты, Мусорщики, Наемники, Исследователи (ещё думаю).

Игровой мир (диспозиция): Основные фракции развиваются, конкурируют между собой, но цель одна - одна фракция будет владеть Галактикой. Игрок может влиять на это дело, а может и забить на это дело и заниматься своими делами.

Сюжет: В процессе т.к. еще не готова система диалогов и квестов.

Фишки игры: Ага, так я вам и сказал ) Узнаете в процессе.

Итак, начнем. Начнем мы с того, что будем использовать паттерн - Единая Точка Входа. Хотя следует сначала определится (где твоё место и что ты за птица (с)) c архитектурой проекта и его структурой.

1. Открываем Unity Hub
2. Качаем версию LTS 2023.3.61f1

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 1 Unity, Российский игрострой, Программирование, Странный юмор, Мат, Длиннопост

Так выглядит Unity 2023.3.61f1

3. Создаём проект на BRP (Built-in Render Pipeline)*
*Да, знаю, что будут делать URP (Universal Render Pipeline) проекты в новых версиях Unity по-умолчанию и дело движется к деприкации BRP.

Итак для себя я решил, что буду использовать следующие полезные (не факт) приобретенные знания:

Игра будет состоять из (пока) 7 сцен:

1. Bootstrapper - отвечает за инициализацию сервисов.
2. MainMenu - главное меню. Позволяет начать новую игру (продолжить - пока не работает), загрузить игру, изменить настройки (применить и сохранить),
3. Gameplay - сцена в которой и будет происходить всё действо.
4. UIScene - сцена загружающаяся поверх Gameplay и отвечающая за отображение HUD и других UI.... Так, надоело... HUD - Heads-Up Display, UI - User Interface.
4. EndGame - Тут будем показывать заставку/видео/кат-сцену Победы/Проигрыша/Секретная_Концовка (пока одна).
5. Utility - по идее должна использоваться для гарантированной выгрузки всего, что было в памяти, дабы предотвратить возможные (я ведь не волшебник, а только учусь) утечки памяти

Где, 1 - Bootstrap сцена, в которой мы будем инициализировать полезные нам сервисы, мэ-э-э-энеджеры и т.д. С этой целью создадим несколько скриптиков (придется попечатать немного):
- Удалить все объекты со сцены.
- Добавить объект, переименовать в Bootstrap (вообще без разницы, как вы его назовете - ни на что не влияет).
- В папочке (см. структуру проекта ниже) создаём скрипт: Bootstrap.cs который будет отвечать за инициализацию сервисов.
- Сервисы мы будем хранить и использовать централизованное (Service Locator шаблон). Более того Service Locator у нас будет не MonoBehaviour, а обычный Plain Old Class Object (POCO).

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 1 Unity, Российский игрострой, Программирование, Странный юмор, Мат, Длиннопост

Структура проекта. Всё красиво разложено по папочкам. Всё как мы любим.


Тут следует сделать небольшое отступление:
Классы которые наследуются от MonoBehaviour ВСЕГДА должны быть компонентом (прикреплены) GameObject и присутствовать на сцене.
*При смене сцены, например (сцена1 -> сцена2) все объекты сцены1 будут выгружены из памяти (т.е. канут в Лету)

В таком случае мы будем использовать шаблон Singleton (Одиночка.... одинокий одиночка.... лол)
Поскольку мы его применяем к Service Locator, следовательно сервисы, зарегистрированные в нем будут присутствовать во всех сценах.

Внимание вопрос:
Каким следует сделать Service Locator - MonoBehviour или POCO. Почему?

Я остановился на POCO:

using System;

using System.Collections.Generic;

using UnityEngine;


namespace SpaceMercsLife

{

/// <summary>

/// ServiceLocator - это паттерн проектирования, который предоставляет глобальную точку доступа к сервисам, не связывая клиентский код с конкретными реализациями этих сервисов.

/// В данном случае мы используем ServiceLocator как POCO класс, что бы он был доступен везде.

/// По окончанию использования вызвать Dispose из другого класса - MonoBehaviour

/// </summary>

/// //: MonoBehaviour

public class ServiceLocator : IDisposable

{

// Словарь для хранения зарегистрированных сервисов. Ключ - тип сервиса, значение - экземпляр сервиса.

private readonly Dictionary<Type, object> _services = new Dictionary<Type, object>();

// Статическое поле для хранения единственного экземпляра ServiceLocator (Singleton).

private static ServiceLocator _instance;

// Статическое свойство для доступа к единственному экземпляру ServiceLocator.

// Ленивая инициализация: экземпляр создается только при первом обращении.

public static ServiceLocator Instance => _instance ??= new ServiceLocator();

/// <summary>

/// Регистрирует сервис указанного типа с предоставленным экземпляром.

/// Если сервис такого типа уже зарегистрирован, он будет перезаписан, о чем будет выведено предупреждение.

/// </summary>

/// <typeparam name="T">Тип регистрируемого сервиса (интерфейс или класс).</typeparam>

/// <param name="service">Экземпляр сервиса для регистрации.</param>

// Событие, вызываемое после регистрации сервиса.

public static event Action<Type, object> ServiceRegistered;


// Событие, вызываемое после отмены регистрации сервиса.

public static event Action<Type> ServiceUnregistered;

/// <summary>

/// Регистрирует сервис указанного типа (интерфейса) с предоставленным экземпляром.

/// Если сервис такого типа уже зарегистрирован, он будет перезаписан, о чем будет выведено предупреждение.

/// </summary>

/// <typeparam name="TInterface">Тип интерфейса регистрируемого сервиса.</typeparam>

/// <typeparam name="TImplementation">Тип конкретной реализации сервиса.</typeparam>

/// <param name="service">Экземпляр сервиса для регистрации.</param>

public void Register<TInterface, TImplementation>(TImplementation service)

where TInterface : class

where TImplementation : class, TInterface

{

var interfaceType = typeof(TInterface);

if (_services.ContainsKey(interfaceType))

{

Debug.LogWarning($"Service {interfaceType} already registered. Overriding with {service.GetType().Name}...");

_services[interfaceType] = service;

}

else

{

_services.Add(interfaceType, service);

ServiceRegistered?.Invoke(interfaceType, service);

}

}

/// <summary>

/// Отменяет регистрацию сервиса указанного типа (интерфейса).

/// </summary>

/// <typeparam name="TInterface">Тип интерфейса сервиса, который необходимо отменить регистрацию.</typeparam>

public void Unregister<TInterface>() where TInterface : class

{

var interfaceType = typeof(TInterface);

if (_services.ContainsKey(interfaceType))

{

_services.Remove(interfaceType);

ServiceUnregistered?.Invoke(interfaceType);

Debug.Log($"Service {interfaceType} unregistered.");

}

}

/// <summary>

/// Получает зарегистрированный сервис указанного типа (интерфейса).

/// </summary>

/// <typeparam name="TInterface">Тип интерфейса запрашиваемого сервиса.</typeparam>

/// <returns>Экземпляр зарегистрированного сервиса.</returns>

/// <exception cref="Exception">Выбрасывает исключение, если сервис указанного типа не найден.</exception>

public TInterface Get<TInterface>() where TInterface : class

{

var interfaceType = typeof(TInterface);

if (!_services.TryGetValue(interfaceType, out var service))

{

throw new Exception($"Service {interfaceType} not found");

}


return (TInterface)service;

}


/// <summary>

/// Пытается получить зарегистрированный сервис указанного типа (интерфейса).

/// </summary>

/// <typeparam name="TInterface">Тип интерфейса запрашиваемого сервиса.</typeparam>

/// <param name="service">Выходной параметр, содержащий экземпляр сервиса, если он найден, иначе null.</param>

/// <returns>True, если сервис найден, иначе false.</returns>

public bool TryGet<TInterface>(out TInterface service) where TInterface : class

{

var interfaceType = typeof(TInterface);

if (_services.TryGetValue(interfaceType, out var obj))

{

service = (TInterface)obj;

return true;

}

service = null;

return false;

}


/// <summary>

/// Удаляет все зарегистрированные сервисы и очищает события.

/// </summary>

public void Clear()

{

_services.Clear();

ServiceRegistered = null;

ServiceUnregistered = null;

// Можно добавить Debug.Log("ServiceLocator cleared.") для обратной связи.

}


/// <summary>

/// Реализация интерфейса IDisposable. Освобождает ресурсы, удерживаемые ServiceLocator.

/// В данном случае, очищает список сервисов, отписывается от событий и обнуляет ссылку на экземпляр.

/// </summary>

public void Dispose()

{

if (_instance != null)

{

_instance.Clear();

_instance = null;

}

GC.SuppressFinalize(this);

}

}

}

А вот на "прям вот сейчас, сию минуту" выглядит Bootstrap.cs

using UnityEngine;

using SpaceMercsLife.Service.Interfaces;

using SpaceMercsLife.Service.Implementation.Mono;

using SpaceMercsLife.Service.Implementation.POCO;

using System.Threading.Tasks;

using UnityEngine.SceneManagement;

using SpaceMercsLife.SLocator;


namespace SpaceMercsLife

{

public class Bootstrap : MonoBehaviour

{

private string configFileName = "game_config";

private string defaultLocale = "en";


private async void Start()

{

MonoBehaviourServicesRegistration();

await POCOServicesRegistration();

ReleaseResources();


await LoadGameSettings();


// Воспроизведение фоновой музыки

var audioService = ServiceLocator.Instance.Get<IAudioService>();

await audioService.PlayBackgroundMusicAsync("main_theme", volume: 1.0f, fadeInDuration: 2.0f);


// Загрузка сцены главного меню

var sceneService = ServiceLocator.Instance.Get<ISceneService>();

await sceneService.LoadSceneAsync("MainMenu", LoadSceneMode.Single, showLoadingScreen: true, uiSceneName: null);

}


private async Task LoadGameSettings()

{

// Загрузка графических настроек

var graphicsService = ServiceLocator.Instance.Get<IGraphicsService>();

await graphicsService.LoadSettingsAsync();


// Загрузка настроек ввода

var inputService = ServiceLocator.Instance.Get<IInputService>();

await inputService.LoadBindingsAsync();


// Загрузка настроек VFX

var vfxService = ServiceLocator.Instance.Get<IVFXService>();

await vfxService.LoadSettingsAsync();


// Загрузка настроек UI

var uiService = ServiceLocator.Instance.Get<IUIService>();

await uiService.LoadSettingsAsync();


// Инициализация камеры

var cameraService = ServiceLocator.Instance.Get<ICameraService>();

var mainCamera = cameraService.CreateCamera("MainCamera");

cameraService.SetMainCamera(mainCamera);


// Загрузка настроек камеры и мыши

await cameraService.LoadSettingsAsync();

}


private void MonoBehaviourServicesRegistration()

{

VFXService vfxServicePrefab = Resources.Load<VFXService>("Prefabs/VFXService");

SceneService sceneServicePrefab = Resources.Load<SceneService>("Prefabs/SceneService");


var vfxService = Instantiate(vfxServicePrefab);

DontDestroyOnLoad(vfxService.gameObject);

vfxService.Initialize(ServiceLocator.Instance.Get<IConfigurationService>());

ServiceLocator.Instance.Register<IVFXService, VFXService>(vfxService);


var sceneService = Instantiate(sceneServicePrefab);

DontDestroyOnLoad(sceneService.gameObject);

ServiceLocator.Instance.Register<ISceneService, SceneService>(sceneService);

}


private void ConfigInitialization()

{

var configService = new SimpleConfigurationService();

configService.LoadConfig($"Config/{configFileName}");

ServiceLocator.Instance.Register<IConfigurationService, SimpleConfigurationService>(configService);


var audioService = new AudioService(configService);

ServiceLocator.Instance.Register<IAudioService, AudioService>(audioService);


var graphicsService = new GraphicsService(configService);

ServiceLocator.Instance.Register<IGraphicsService, GraphicsService>(graphicsService);


var inputService = new InputService(configService);

ServiceLocator.Instance.Register<IInputService, InputService>(inputService);


var cameraService = new CameraService(configService);

ServiceLocator.Instance.Register<ICameraService, CameraService>(cameraService);


var uiService = new UIService(configService);

ServiceLocator.Instance.Register<IUIService, UIService>(uiService);


var localizationService = new SimpleLocalizationService();

localizationService.SetLocale(defaultLocale);

ServiceLocator.Instance.Register<ILocalizationService, SimpleLocalizationService>(localizationService);

}


private async Task POCOServicesRegistration()

{

ConfigInitialization();


ServiceLocator.Instance.Register<IResourceService, ResourceService>(new ResourceService());

ServiceLocator.Instance.Register<IPhysicsService, PhysicsService>(new PhysicsService());

ServiceLocator.Instance.Register<IEventBus, EventBus>(new EventBus());

ServiceLocator.Instance.Register<IStateMachineService, SimpleStateMachineService>(new SimpleStateMachineService());


var binaryDataService = new BinaryDataService();

await binaryDataService.InitializeAsync();

ServiceLocator.Instance.Register<IDataService, BinaryDataService>(binaryDataService);

}


private void ReleaseResources()

{

Resources.UnloadUnusedAssets();

}

}

}

А вот так вот выглядят все сервисы

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 1 Unity, Российский игрострой, Программирование, Странный юмор, Мат, Длиннопост
Показать полностью 3
[моё] Unity Российский игрострой Программирование Странный юмор Мат Длиннопост
17
1
Asmagor
1 месяц назад

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 0⁠⁠

Я не являюсь программистом (профильное образование - юрист), я никогда не имел никакого отношения к играм, кроме как поиграть.
Данный пост (как и остальное на FB, YouTube) создается с целью заработать денег (на поддержание штанов) - кто сколько сможет, пока игра не будет опубликована в Steam.
Я понимаю и принимаю все риски связанные с данными публикациями т.е. что меня могут просто опередить и выпустить эту игру раньше меня. Ну да ладно - поживём - увидим.

Добрейшего Всем!


С детства, после Fallout 2, я понял, что моя голубая мечта - создавать игры. Создавать миры, увлекательные истории... Начну я, пожалуй, с начала, так сказать.

Канада, Калгари
01.03.2025
Я уже несколько месяцев на LayOff (это когда временно без работы, но трудовые отношения никто не разрывал). Переиграл во всё, что только можно и нельзя, 1191.3 часа в IronOrder1919, V Rising и Valheim со школьниками. Tarkov - э-э-эхххх.... был бы ноут по-мощнее - вообще бы не вылазил из неё. Вот список игр во что играл/ю:

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 0 Unity, Программирование, Российский игрострой, Странный юмор, Мат, Длиннопост



Но, рано или поздно, безделье надоедает* и я начал подумывать, чем бы занятся и заодно позаработать денег. Вариантов - раз, два и обчелся:

1. Доставка еды / Такси. Не канает - нет машины.
2. Перепродажа б/у вещей с Trift stores и GoodWill - объемисто, долгосрочно, перспективно. Но в одно лицо - это труба. Да и вещи там так, расхватывают, словно ты пытаешься у них эту самую шмотку, что ни на есть - последнюю, забрать.
3. И..... и больше нихрена я не умею.

В далеком 2014 году я уже пробовал в игроделание (почему не пошло - в другой раз, если вспомню), но поскольку время подстерло память (точнее причину), я решил - хочу сделать игру.

Сцука, идея фикс - игра. Итак, ТС, какую же игру ты захотел сделать? Грабить корованы, лол?

Имея на руках ноутбук, мышку, наушники (с микрофоном) :

  • Device name LAPTOP-CFCEROC4

  • Processor Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz 2.21 GHz

  • Installed RAM 12.0 GB (11.8 GB usable)

  • Video GPU:

    NVIDIA GeForce GTX 1050

    Dedicated GPU memory 0.0/4.0 GB

    Shared GPU memory 0.0/5.9 GB

    GPU Memory 0.0/9.9 GB

  • System type 64-bit operating system, x64-based processor

  • Pen and touch No pen or touch input is available for this display

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

Я решил, что я должен сам во все вникнуть и разобраться т.е. уметь сделать игру в одно лицо, без мам, пап и кредитов посторонней помощи и сейчас покажу какими программами я пользуюсь:

1. Игровой движок. Unity.
Почему Unity? UnrealEngine - выкинуло из редактора из-за нехватки ресурсов. Godot - уже не очень помню почему, но - нет.
Unity Personal редакции позволяет заработать достаточно много 100 000 USD - 200 000 USD. Ссылка - https://unity.com/products/pricing-updates

2. Язык программирования. С#
Много лет назад, когда я был ешё молодым и ходил в КА "Шаг" - я учил С++. Поэтому сильно не выбирал. Кстати, обращаю Ваше внимание, что Unity поддерживает следующие языки программирования: C#, C/C++, Rust, IronPython, Lua, Java, JavaScript, SQL, HTML 5, and CSS

Для дальнейшего понимания, следует сделать небольшое отступление: из чего сделана игра? Каким представлением оперирует Unity?

В Unity есть такое понятие как сцена. Сцену еще можно представить как уровень / локацию, для понимания. Сцена - это контейнер.
Сцена состоит из GameObjects (объектов-контейнеров), которые, в свою очередь, состоят из компонентов. (https://docs.unity3d.com/2022.3/Documentation/Manual/Creatin...)

  1. Код. Скрипты. Тут всё понятно - используем выбранный язык программирования и в бой. Но есть нюанс ))))
    2. 3д объекты, которые состоят из mesh.

    Меш (mesh) — это фундаментальный элемент в 3D моделировании, представляющий собой сетку, состоящую из вершин, рёбер и граней.

3. Текстуры. Включая Skybox
4. Материалы.
5. Шейдеры
6. Аудио файлы (музыка, звуки)
7. Видео файлы (если будешь делать кат-сцены или просто видео)
8. Анимации
9. Текстовые файлы
10. Освещение
..... Вроде всё, на пока - хватит )))

И шо же делать, спросят самые непоседливые. А собственно говоря вот:

1. Unity Game Engine
2. VS Code
3. Blender 4
5. AudioCity
6. MeshLab
7. Photoshop


--------------------------------------------------------------------------------------------------------------
Канада, Калгари
03.03.2025
Полон энтузиазма, готов горы свернуть. "В Ютубе всё есть - полно учебных материалов! Бери - нехочу! Все даром рассказывают как делать игры!" Посмори вот тебе ресурсы:


1. Unity documentation (тут понятно - читать не особо весело, неправда ли?*)
2. Youtube - полно видео уроков. (вот тут прям начало припекать)
3. "Тематические" широко-известные в узких кругах сайты, где можно без регистрации и смс скачать книги! (чуть позже выложу свою коллекцию)
4. Парочка русских сайтов.
5. ИИ
6. GitHub

Штошььь... прямо скажем - не густо. Но глаза боятся - руки делают! (с) И я начал читать книжки.

Дабы не томить сильно:
1. ИИ - если ты не знаешь, что/о чём ты спрашиваешь - получишь чушь в ответ. Поэтому читай, для начала.
2. Youtube - для этих, не побоюсь этого слова - П*дарасов, Большой Буквы, есть отдельный котёл, в котором черти будут их жахать кочергой во все дыхательные и пихательные, пока за этим будет наблюдать стая бешеных и голодных собак.
Но следует быть объективным т.е. иметь холодную голову, горячее сердце и чистые руки, и признать что мне попались 3 - 4 годных товарища. От одного я случайно узнал о шаблоне проектирования - Единая Точка Доступа. Это мне помогло.
3. Книги - это просто поле для инфоциганства. Старые болезни.... Переписывают из книги в книгу одно и тоже. используют теже примеры, никакой новизны.*
*Если успею - выпущу свою книжку про Юнити, сцука, и пусть они все охренеют!

Немного отвлечемся:

Так выглядит "изучение":

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 0 Unity, Программирование, Российский игрострой, Странный юмор, Мат, Длиннопост

Открытые вкладки

UNITY3D. RTS/RPG. Уровень: Бестолочь. Часть 0 Unity, Программирование, Российский игрострой, Странный юмор, Мат, Длиннопост

Книжки, Видео-материалы. На любой вкус и цвет.

В завершении нулевой части:

Самое важное в этой писульке от Федота - с чего следует начать (помимо языка программирования):

1. Шаблоны проектирования программного обеспечения.
3. Архитектура приложений / программного обеспечения.

PayPal аккаунт для пожертвований: stas.vdk@gmail.com

Блять, испанский стыд... с этими пожертвованиями конечно....

Показать полностью 3
[моё] Unity Программирование Российский игрострой Странный юмор Мат Длиннопост
4
143
Dehavilland56
2 месяца назад
IT-юмор

Колесо инди разработчика⁠⁠

Колесо инди разработчика Gamedev, Картинка с текстом, IT юмор, Программирование, Telegram (ссылка), Айтишники, Инди игра, Unity, Разработка

Наша телега - https://t.me/memolecules

Gamedev Картинка с текстом IT юмор Программирование Telegram (ссылка) Айтишники Инди игра Unity Разработка
33
653
Dehavilland56
2 месяца назад
IT-юмор

Главное - не сдаваться⁠⁠

Главное - не сдаваться Картинка с текстом, Мемы, Программирование, IT юмор, Gamedev, Программист, Unity, Telegram (ссылка)

Источник - https://t.me/mediamol

Картинка с текстом Мемы Программирование IT юмор Gamedev Программист Unity Telegram (ссылка)
53
8
DevKitchen
DevKitchen
2 месяца назад
Лига Разработчиков Видеоигр
Серия Делаю игру на Unity3d

Делаю игру на Unity3d. Эпизод 5: Система воздействий⁠⁠

Здравствуйте, дорогие Пикабушники и Пикабушницы!

Уже пятница, а значит пора выложить "пятничное моё"!

Заканчивайте работу, расслабляйтесь, смотрите, как можно реализовать в игре систему, позволяющую применять различные типы воздействия на юнитов:

С любыми вопросами приглашаю в комментарии!

[моё] Gamedev Инди Indiedev Инди игра Программирование Разработка Unity Unity3D Компьютерные игры IT IT юмор Мемы Паттерны Юмор Видео YouTube
2
Партнёрский материал Реклама
specials
specials

Сколько нужно времени, чтобы уложить теплый пол?⁠⁠

Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!

Попробовать

Ремонт Теплый пол Текст
6
Dehavilland56
2 месяца назад
Unity

Что я понял за 5 лет в инди геймдеве⁠⁠

  1. Ваша первая игра не взлетит 100%
    Часто вижу людей, у которых есть "гениальная идея", нужно только сделать и всё, миллионы игроков, миллионы долларов на рекламе обеспечены. Опыт показывает, что так не бывает.
    2. Ваша вторая, третья, четвертая игра не взлетят 99%
    К сожалению, это так.
    3. Делайте прототипы
    Игры вообще редко взлетают. Большинство ваших игр провалится. Поэтому имеет смысл делать демо версию игры, прототип, минимальный набросок геймплея с упрощенной графикой и только с ключевыми механиками. Потом нужно дать этот прототип поиграть людям, собрать информацию. Это оптимальный путь.
    Сам лично делал игру полгода, потел, страдал, мечтал. А в итоге она оказалась никому не нужна. После такого успех - не забросить это дело в принципе. Это частая ошибка, я вижу по другим разработчикам. Не доделывайте игры сразу до конца, делайте прототипы!
    4. Не доделывать игры это нормально
    Есть люди, у которых кладбище из недоделанных игр. С ними всё понятно.
    А есть люди, которым стыдно бросать дело на полпути и они в любом случае доделают игру. Но и это не всегда хорошо.
    Идея в том, чтоб сделать прототип, дать поиграть небольшому числу людей.
    Собрать информацию. Если игра более-менее увлекает игроков - покрутить настройки в игре, сделать игру более или менее динамичной, немного изменить механики - это проще пока игра еще не сильно разрослась.
    Но если игра совсем мало кому понравилась и почти не увлекает ваших подопытных игроков - бросайте её. Это не стыдно, это грамотно и правильно.
    5. Вряд ли вам стоит делать игры одному
    Да, делать игры вместе с одним или несколькими людьми на энтузиазме это то еще удовольствие.
    Они будут лениться, перегорать, предлагать взяться за другую игру.
    Но это всё равно лучше, чем делать игру одному.
    Дело в том, что сделать маленькую игру, которая выстрелит, очень сложно.
    Сейчас, когда игр на площадках море, имеет смысл делать более сложные игры.
    Так проще найти свою аудиторию и выделиться среди миллиона игр.
    Но одному сделать игру средней сложности достаточно непросто.
    Бывают исключения, но это всего лишь исключения.
    6. (спорный пункт) Попробуйте делать игры для своих друзей, одногруппников, одноклассников.
    Мне кажется, плохая мотивация и заход для новичка в инди геймдеве делать игру, чтоб потом выложить её в интернет и получить миллион установок, огромный онлайн и донаты. Это слишком плохо коррелирует с тем, что разработчик в итоге получает. А вот сделать игру, чтоб порубиться с друзьями, провести весело время - это совершенно другое. При этом, никто не мешает потом эту же самую игру выложить на площадки, особенно если игра понравилась всем вашим друзьям.

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

    Если вам интересно, подписывайтесь на нас - https://t.me/mediamol

Показать полностью
Gamedev Инди Программирование Инди игра Unity Разработка Текст Telegram (ссылка)
6
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии