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

Бильярд 3D: Русский бильярд

Симуляторы, Спорт, Настольные

Играть

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

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

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

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

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

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

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

Unity + Мат

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

Gamedev Разработка Инди Инди игра Игры YouTube Компьютерные игры Юмор Негатив Скриншот Волна постов Политика Комментарии на Пикабу Картинка с текстом Все
21 пост сначала свежее
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
11
ZorkiTipaFED.ZK
ZorkiTipaFED.ZK
4 месяца назад
Лига Разработчиков Видеоигр

Есть ли техническая возможность отредактировать локализацию в чужой игре?⁠⁠

И насколько это трудоёмкая задача для человека с нулевым бэкграундом в ИТ?

Есть ли техническая возможность отредактировать локализацию в чужой игре? Gamedev, Unity, Перевод, Трудности перевода, Локализация, Игры, Компьютерные игры, Видеоигра, Симулятор, Негодование, Мат, Длиннопост

Я люто зол на Game Hunters (Gunsmith Simulator). Эти дебилы либо использовали инструмент автоперевода Unity либо наняли других дебилов, которые впердолили всё в херовый онлайн-переводчик или старые ИИ-модели. У них нормально переведены только самые употребимые узлы оружия типа "ствол", хотя с таким уёбищным качеством локализации я всё ещё жду, что в какой-нибудь волыне будет "бочка" вместо ствола. Всё, что сложнее ствола, курка, спусковой скобы/спускового крючка - пизда рулям!

Есть ли техническая возможность отредактировать локализацию в чужой игре? Gamedev, Unity, Перевод, Трудности перевода, Локализация, Игры, Компьютерные игры, Видеоигра, Симулятор, Негодование, Мат, Длиннопост

Впервые в жизни вижу настолько уёбищную локализацию, и впервые в жизни мне хочется сьездить в Польшу и переебать с вертухи этим турбо-ляхам!

Есть ли техническая возможность отредактировать локализацию в чужой игре? Gamedev, Unity, Перевод, Трудности перевода, Локализация, Игры, Компьютерные игры, Видеоигра, Симулятор, Негодование, Мат, Длиннопост

У меня как у лингвиста ИЯ с изрядными, сука, компетенциями в гуглении технической и академической информации есть знания для того, чтобы собрать правильные термины и заняться ручным переводом игры. Но про редакторы игровых текстов я не в курсе, ибо моя квалификация лишь немного захватывает АВП, игровых переводов не касался. Тем не менее, будучи активным гамером, я не хочу видеть херовый перевод в хороших играх.

На две головы с ИИ-ассистентом поковыряли файлы в директории игры - блокнотом, ноутпадом, ILSpy, Asset Studio, ни хера не поняли.

Может, есть какой-то убер-простой способ определения и редактирования текстовых фрагментов в ресурсах/ассетах/где там этот текст находится?

Содержимое директории выглядит так:

Есть ли техническая возможность отредактировать локализацию в чужой игре? Gamedev, Unity, Перевод, Трудности перевода, Локализация, Игры, Компьютерные игры, Видеоигра, Симулятор, Негодование, Мат, Длиннопост
Есть ли техническая возможность отредактировать локализацию в чужой игре? Gamedev, Unity, Перевод, Трудности перевода, Локализация, Игры, Компьютерные игры, Видеоигра, Симулятор, Негодование, Мат, Длиннопост
Показать полностью 4
[моё] Gamedev Unity Перевод Трудности перевода Локализация Игры Компьютерные игры Видеоигра Симулятор Негодование Мат Длиннопост
32
Партнёрский материал Реклама
specials
specials

А сколько у вас?⁠⁠

Вы когда-нибудь считали, сколько экономите с вашим кешбэком и скидками? Предлагаем провести небольшие вычисления (потому что считать выгоду всегда приятно).

Реклама Реклама. ПАО «Банк ВТБ», ИНН: 7702070139

Калькулятор Выгода
4728
OneMorePikabuer
OneMorePikabuer
4 месяца назад
Лига Разработчиков Видеоигр

Ответ на пост «Лучшие курсы по геймдизайну»⁠⁠1

Ответ на пост «Лучшие курсы по геймдизайну» Обучение, Игры, Unity, Unreal Engine, Gamedev, Картинка с текстом, Мат, Ответ на пост
Показать полностью 1
[моё] Обучение Игры Unity Unreal Engine Gamedev Картинка с текстом Мат Ответ на пост
325
4
GamedevForge
GamedevForge
6 месяцев назад

Unity .NET и Mono — галопом по компонентам⁠⁠

Полистал курсы от коробок навыков, мозгов гика и даже великого Романа Сакутина и не нашел ответа на дефолтный вопрос с джуновых собеседований: "Что же такое .NET, Mono, компилятор, рантайм и прочие ругательства"

Справедливости ради, там эти ответы и не обязаны быть. Курсы дают всего лишь более или менее общий набор знаний, который каждый применяет как хочет. Также большинство из них и не дают навыков и знаний для поиска работы, в чем и кроется моя главная претензия к курсам. "Возьми кредит на 200к и получи дефолтные знания".

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

Unity .NET и Mono — галопом по компонентам Unity, Gamedev, Игры, Мат, Длиннопост

P.S. ничего не имею против морпеха, наоборот считаю самым удобным ECS фреймворком, но когда создаешь новые компоненты не через их менюшку, то приходится лезть в другие компоненты и копипастить тэги. Пока не догадаешься сделать темплейты в райдере для этого))

Но если вернуться к теме поиска работы, то вопрос про платформу и ее компоненты часто ставит начинающих разработчиков в тупик. Где-то на подкорке существует отдаленное понимание что такое компилятор и рантайм. Но формализовать это знание в четкий ответ рекрутеру, да если еще и волнуешься на первых собеседованиях... Целое дело

Поэтому давайте кратко пробежимся по компонентам .NET и Mono платформ, что у них общего и различного и для чего каждый компонент нужен.

Также в конце приложу ссылки для тех кому интересней копнуть в одну из тем более подробно.

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

.NET

Согласно dotnet.microsoft.com ".NET — это бесплатная платформа приложений с открытым кодом, поддерживаемая корпорацией Майкрософт."

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

Первая версия .NET Framework была создана в 2002, а первая версия Unity - в 2005. Отсюда резонный вопрос, почему Unity не работает целиком на .NET

В то время, .NET был ориентирован только создание приложений под Windows. И для движка ориентированного на любые платформы это было критичным. Соответственно юнитеки (Unity Technologies) подобрали реализацию такой же платформы от компании Xamarin, которая в то же время развивала собственное решение для разработки приложения - платформу Mono

Mono забрала из .NET язык и его базовые библиотеки (знакомые нам по неймспейсу System), а остальные компоненты такие как компилятор, рантайм, сборщик мусора переписала под свои нужны

Важной частью реализации была поддержка AOT (ahead of time) компиляции, которая в то время отсутствовала в .NET. А это было немаловажно для того же самого IOS, в котором жит компиляция запрещена (из соображений безопасности).

Также были преимущества в виде наличия библиотек для работы с мобильными устройствами, их сенсорами, камерами геолокацией, разными графическими библиотеками и возможностью работы на процессорах с разными архитектурами. Ведь .NET в то время ориентировалась на классические х86/х64

Компоненты

Рассмотрим основные компоненты платформ и для чего они нужны

Компилятор — это программа, которая переводит исходный код, написанный на языке программирования высокого уровня (в нашем случае, C#), в машинный код, который может быть выполнен компьютером. Этот процесс называется компиляцией.

Язык, в который компилируется наш C# называется Intermediate Language или просто IL. В контексте реализаций платформ, и .NET и Mono самостоятельно реализовали этот язык. Но обе версии полностью соответствуют определенному стандарту настолько, что любая версия может выполнятся на любой платформе.

Дальше в бой вступает такая штука как рантайм. В .NET он называется CLR (или Common Language Runtime), в Mono - просто Mono runtime.

И он выполняет кучу всего с нашим il кодом:

  • компиляция в машинный код для целевого устройства. В зависимости от целевого устройства он может делать это прямо во время выполнения кода (т.н. JIT или Just in time компиляция) или заранее скомпилирует весь код для устройств где такая компиляция запрещена (AOT). То есть в первую очередь рантайм включает в себя набор компиляторов под все целевые платформы, а также дополнительные инструменты для такой компиляции (например, IL2CPP, про него позднее)

  • управление памятью, которым занимается всеми известный сборщик мусора

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

Рассмотрим пару его компонентов:

IL2CPP

Средство для компиляции кода для устройств, поддерживающих только AOT компиляцию.

Как и следует из названия, этот инструмент переводит код из IL в C++, чтобы в последствии при помощи компилятора конкретной платформы.

Зачем он нужен? Да банально для того чтобы юнитекам не приходилось писать собственные компиляторы и можно было использовать стандартные компиляторы для целевых платформ которые давным-давно написаны.

Сборщик мусора

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

Какие есть основные особенности у сборщика мусора в .NET:

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

  • компактирование памяти - после сборки мусора у вас может остаться множество разбросанных по всей памяти объектов. И такое их хаотичное расположение может послужить проблемам. Например, что большие объекты могут не найти себе места в памяти, ведь раз текущие объекты разбросаны, то между ними не окажется достаточно много места для нового.

Хотя Mono поставляется сразу с двумя сборщиками мусора, Unity использует только один из них - boehm или bdw gc, более старый но при этом более легковесный что важно для тех же мобильных платформ.

В нем отсутствуют вышеперечисленные фишки, но зато существует так называемся инкрементальная сборка, которая позволяет размазывать процесс сборки на несколько кадров.

Также оба сборщика немного отличаются по своему принципу работы.

Верхнеуровнево они оба анализируют стек и глобальные объекты на предмет ссылок на объекты в куче, а потом и остальные объекты на наличие прочих ссылок. Те, на которые по итоге не ведут никакие ссылки, помечаются для удаления.

Но .NET сборщик мусора всегда точно знает какие объекты памяти являются ссылками на другие объекты, тогда как boehm анализирует все объекты в памяти которые потенциально могут быть ссылками на объект. Поэтому такой сборщик потенциально может оставлять в памяти объекты, на которые по итогу и не существует ни одной ссылки. То есть если в вашем объекте есть int поле которое по значению совпадает ссылкой на какой-то объект, то этот объект не удалится.

P.S. Дополнительная инфа про GC для заинтересованных прилинкована внизу статьи.

Штош, таким образом мы примерно представляем как устроена Mono и .NET и сможем ответить на этот вопрос на собесе (в остальном это все и нахуй не надо)

Подписывайтесь на канал чтобы узнавать еще больше и делать хорошие игры за хорошие деньги

Спасибо!

Дополнительная информация о GC:

Серия постов как работает GC в Unity под капотом

Всего лишь статья из Википедии, но тоже довольно подробная

Статья от My.Games про GC

Показать полностью
[моё] Unity Gamedev Игры Мат Длиннопост
1
1
Grazyka
Grazyka
8 месяцев назад
Серия Похождения разработчика в дикой среде

Почему твоя идея ничего не стоит⁠⁠

На протяжении трех лет я тащил за собой идею, которая (по моему мнению) приведет меня к успеху. А именно: создание симулятора выращивания растений на мобилке. Будучи инди разработчиком, я истинно верил, что моя идея гениальна и будет приносить сотни тысяч сессий в месяц (теперь я понимаю что даже 1к было бы вау как не плохо). Итак, начнем по порядку.

Моя идея гениальна, такой игры нет в рынке!

Так как комментаторы раскрыли всю суть минут за 10 после публикации первого поста (хотя в ВК никто не разу не проводил такой аналогии) скрывать нечего - я хотел сделать симулятор выращивания растений, взяв и перерисовав в pixel-art оранжерею из Вега-Микса, придумать более глубокий и детальный цикл посадки-роста-продажи растения и в дальнейшем развития этой идеи (добавление новой локации в виде города, несколько оранжерей, которые можно прокачивать, персонажи для каждого здания, таблица лидеров, звания, ачивки, глобальный чат и т.д.).

В моей голове все складывалось идеально: взять из игр косвенную механику выращивания растений (по типу PvZ) и сделать ее кор геймплеем в своем проекте. Прошерстив весь интернет, я, на тот момент, не увидел ни одного долбаеба конкурента с похожей идеей. Следовательно это идея - будущий хит. Разве не так?

Почему твоя идея ничего не стоит Gamedev, Инди, Инди игра, Unity, Видео, Мат, Длиннопост

Старт без старта

Идея не возникла внезапно. Я долго ходил с желанием сделать свой первый крупный инди проект, придумать что-то универсальное, простое, но в тоже время затягивающее и не входящее в ту группу бесконечно штампующих дешевых и безвкусных ГК, сеттинг и геймплей которых в 90% случаев зависит от текущих трендов (вспомните сколько говна было в гп после выхода Игры в кальмара или Хаги ваги), переполнненых рекламой, собранных на коленке из бесплатных ассетов и заставит игрока зайти в игру от силы раза два.

Нет! Я не такой, я создам действительно затягивающую игру. В то время при раздумывании я выделил для себя три вдохновения: Orna, Clash of Clans и Вега-микс. Сочентание трех абсолютно разных игр в моей голове укладывалось идеально

  • С Клешки взять идею медитативного развития своей базы (оранжереи)

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

  • С Вега-микса взять графику и перерисовать ее в пиксель арт (навыки рисования были слабенькими, а воображение было хуже чем у 5-ти летнего ребенка)

Собрав всю эту калловую массу в кучу, я, постепенно, начал развивать свою идею в реальность. Но вот в чем подвох. Отсутствие документации и как следствие четкого плана и фиксрование мыслей, сделали из моей идеи непонятную вязкую массу. Внезапное возникновение идеи, половина которой забывалось либо переиначивалась в процессе разработки, либо которые я в силу своих возможностей не мог реализовать прямо сейчас, а понимал это когда уже сделал половину. Из-за этого можно заметить пустующие кнопки в отдельных меню или здания в городе без какой либо логики, которые как-бы подразумевают, что если ты сейчас если тыкнешь на них, то куда-то попадешь, но по факту лишь появляется предупреждающий текст вверху экрана по типу "Совсем скоро". Да, да, скоро...

Почему твоя идея ничего не стоит Gamedev, Инди, Инди игра, Unity, Видео, Мат, Длиннопост

Лишь спустя месяцы разработки я случайно наткнутся на опг группировку небольшой клуб разработчиков, с которыми я общался в дискорде (Press F) и уже они дали мне понять как нужно организовывать свое время, этапы разработки, что такое роад мап, зачем нужно участие в питчах, диздок, ведение карточек трелло, гит и т.д.

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

Та самая петля

В отдельной статье я подробно описывал что такое "Петля перезапуска" и как с этим бороться. В нашем контексте этот феномен привел к бесконечным переделкам, доработкам и псевдо-улучшениям геймплея, которые затянули разработку не самой сложной игры на три с лишним года.

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

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

Отсутствие внешней поддержки

В глубине души хотелось повторить успех Terraia и Stardew Valley, где чуваки в одиночку сделали хиты. Не подумайте не правильно, я не псих, трезво оценивая все за и против я считал для себя успехом около 0.0001% от успеха этих проектов, но, как оказлось, и такого значения получить оказалось делом недостежимым.

Отсутствие внешней поддержки, а именно издателя, спонсора (короче говоря инвестиций в мою идею) привели к ожидаемому результату. Ведь с моими небольшими амбициями на первый крупный проект, не успех по меркам издателя, успех по меркам моего ожидания. Издатели один за другим не просто отказывались от в помощи ведения проекта (важно подчекрнуть, абсолютно все издатели, а их было не мало, приходили ко мне сами и предлагали свои услуги, хотя после первых A/B тестов игра с тресков проваливалась), а наоборот кричали как один, что игру срочно нужно портировать на ПК, никаких мобилок, немного (по их мнению) переделать геймплей и выпускать в бескрайние просторы стима.

Но сделано уже было слишком много и разрабатывать все по новому крайне не хотелось (некоторые ахуевшие издатели предлагали переделать игру в 3d, нарисовав мне пару шакальных лоу поли моделек растений, а от текущего билда полностью отказаться), а опубликовать проект уже нужно было из принципа, не просто так же я его делаю?

А че по итогу?

Итог ожидаемо печален. Спустя около трех месяцев оффициального релиза игра наскребла от силы 100 скачиваний. Даже не смотря на то, что результат ожидаем, я несколько месяцев отстранился от разработки, выпустив лишь пару небольших фиксов, чтобы даже те несколько человек в день могли насладиться моим творением без вылетов и зависаний (наверное).

Почему твоя идея ничего не стоит Gamedev, Инди, Инди игра, Unity, Видео, Мат, Длиннопост

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

Выводы

Реализация гениальной механики не есть гарантированный успех. Все зависит от самой реализации и грамотного маркетинга (а без него сейчас никуда). Рынку категорички срать, какая гениальная идея пришла тебе в голову и ты сел за комп ее показать миру. Сколько поделок в стиме, которые действительно стоят внимания, но они собирают по 20 отзывов. А сколько второсортных недоигр клепают ГК издатели на волне опредленного хайпа и собирают миллионы инсталлов. Ну и на последок, вспомните кликер Banana который залетел в топ Стима и сказал "Хомяк, подвинься". Берегите себя, до завтра!

Бесполезные ссылки:

Объект всей шумихи, которую я тут развел

Телега, там я новую игру освещаю, будет весело (честно):

Ну а остальные ссылки в самой игре (не байт, просто чтобы пикабу не подумал что это самоотсос самопиар ради 3 новых сабов и инсталов).

Показать полностью 3 1
[моё] Gamedev Инди Инди игра Unity Видео Мат Длиннопост
8
24
alrocraft
alrocraft
11 месяцев назад
Лига Разработчиков Видеоигр
Серия Разработка игры -> Restoration of Teim

Процедурный мир из огромных гексов (ч.1)⁠⁠

Как я создаю себе несложный процедурный мир не привлекая внимания санитаров

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

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

Но что делать если ты рукожоп не хочешь особо заморачиваться с качественной процедуркой игрового мира?

Сделать мир из огромных гексагонов? Звучит как хуета отличная идея! 💡

1. Генерируем двумерную карту

Перед тем как создавать гексагоны надо сначала создать/сгенерировать сам ландшафт в виде двумерной матрицы, где будет вообще ландшафт, перепады высот, какие будут в каком биоме и.т.д.

Предварительно я разделил для себя мир на несколько "слоёв":

1. Карта поверхности, на ней будет определена структура мира, в каких ячейках гексы вообще будут существовать собственно. База одним словом

2. Карта высот. На этой карте будут заданы группы высот для гексов, чтоб мир был не "плоский"

3. Карта биомов. На этой карте мы сформируем будущие группы биомов.

4. Карта рек и озер. Несмотря на "крупногексагональный" форм-фактор будущего мира, я хочу чтоб по нему текли реки и были озера. Эта карта пометит условный гекс (или же ячейку массива) как имеющую реку, а там разберёмся

Вот они, слева направо, их боялся весь проект

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

"Чё ты там нахуевертил" - Скажите вы щурясь как азиат из мема

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Я художник! Я так вижу! На самом деле это техническая визуализация уже сформированного мира в 2D матрице, мне же надо было как-то смотреть на то что там выходит вообще.

"И шо ты, пёс, даже не расскажешь как ты это генерировал?" - спросит моя воображаемая аудитория.

А я вам отвечу! Нет. Сейчас все обьясню! И так, А-а-а-а-втомобиль лгоритм в студию!

Смотрите, существуют адекватные разработчики, которые, когда речь заходит за процедурную генерацию, в первую очередь думают в сторону шумов, тот же Шум перлина (Perlin Noise) это идеальный способ выстроить и попиксельную 2д карту ландшафта, с перепадами высот (чем темнее пиксель тем выше). Выглядит он вот так:

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Но причём тут адекватные разработчики, и я)

Я сделал это по принципу который придумал себе ещё на первом курсе, саморастущие ядра (шо?)

Если вкратце, в двумерном массиве ограниченном размере мира (например сетка 64×64 ячейки) в случайных местах создается расчетное количество "ядер" генерации, каждое ядро помечает свой адрес как будущую поверхность сразу, и помимо этого несёт в себе случайное количество "зарядов".

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

Выглядит это вот так, и в принципе формируется нормальный +- ландшафт:

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Жёлтые - ядро
Синие - захваченные ядром ячейки

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

Создаются группы высот которым назначаются высоты, которые при генерации самих гексов собсна говоря и передадутся.

В этот раз ядра, это ромбики, а разным цветом обозначеныгруппы высот:

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Ну и абсолютно тот же принцип с биомами, только в ячейках групп биомов хранится ссылка на соответствующий экземпляр класса Biome

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Круто! Теперь у нас есть карты двумерных массивов содержащие все необходимые данные для генерации крупногексагонального мира

Используя гайды из Habr свои навыки и умения, я написал скрипт в котором циклом производится проходка по, сохраненным ранее в двумерные массивы, картам данных, и на основе этих данных формируется... Пока только гексагональная 3д структура с разными высотами:

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Красиво, но пусто, а давайте запустим туда нашего персонажика которого я создал "за кадром"

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Теперь вообще и пусто и некрасиво... Миша все хуня давай по новой! Тебе так никто денег не даст!

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

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Во, уже лучше! Это правда "биомы" пока условные, просто гексы те же, с разными структурками, на итоговый вид это особо не повлияет. Так что нужно на гекс навесить деталей. Tiling time!

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Во, так лучше, только надо вот эти стыки на ровной поверхности убрать.

А ещё добавлю "детали" какие нибудь, пусть будут ёлочки в биоме "лес", пока с временной графикой, пара текстурок.

Сделаю банальной "россыпью" этих елочек на каждый гекс

Процедурный мир из огромных гексов (ч.1) Разработка, Gamedev, Unity, Компьютерные игры, Мат, Длиннопост

Уже что-то похожее на мир! На этом пока все, впереди ещё туева хуча работы, оптимизация отрисовки деталей (LOD), механизм генерации структур в мире (всякие замки, руины, домики набигающие) и.т.д

+ Мне ещё предстоит решить проблему как игроку перемещаться между гексами с сильными перепадами высот... Лестницы? Винтовые пещеры? Прыгучие платформы? Лианы? Надо думать...

p.s. У самих гексов реализован LOD, и их детализация уменьшается на отдаленном расстоянии от игрока, а дальше и вовсе отключается. Так же я сделаю с деталями на гексах я думаю.

Спасибо всем тем двум людям которые дочитают эту тягомотину до конца!

Показать полностью 11
[моё] Разработка Gamedev Unity Компьютерные игры Мат Длиннопост
8
Партнёрский материал Реклама
specials
specials

Раз проценты, два проценты⁠⁠

Звучит приятно, если речь о выгоде и начисленном кешбэке. Сделали самый приятный калькулятор, который считает исключительно выгоду!

Реклама Реклама. ПАО «Банк ВТБ», ИНН: 7702070139

Калькулятор Выгода
356
Sergey09r
Sergey09r
1 год назад
Лига Разработчиков Видеоигр
Серия World of Stickman Classic RTS

Добавил нового персонажа в свою игру⁠⁠

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