Воскресенье, 15 Сентября 2019, 21:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 18
  • 1
  • 2
  • 3
  • 17
  • 18
  • »
Форум игроделов » Записи участника » BlackFix [353]
Результаты поиска
BlackFixДата: Понедельник, 30 Июля 2018, 19:28 | Сообщение # 1 | Тема: [2D] - Pepoland: The Stoned Wars (Early Access)
постоянный участник
Сейчас нет на сайте


Жанр игры: Simulator / Clicker / RPG / MMO
На каком движке/конструкторе: Unity
В каком пространстве: 2D
Какой вид в игре: Сбоку
Какой Язык Пр. используется в игре: C#; PHP; Java;
Для какой платформы: Android, Windows 10;
Предоставление исходного кода игры: Не предоставляется
Какой тип лицензии распространения: F2P / Premium
Текущая версия игры: v.0.3.0 (Ранний доступ).
Возрастной рейтинг: 18+ (Россия); 16+ (Европа);

Разработчик: CodeBits Interactive
Дата выхода (Early Access): 28.07.2018
Релиз: 30.08.2018
Языки интерфейса: Русский, Английский;
Язык озвучки: Русский;

Описание игры:
Улицы города заполонило безумие! Каждый стремится ухватиться за свой лакомый кусочек и доказать свое превосходство. Окунитесь в мир безумия, треша и нескончаемых воин за власть.

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

Возможности / Особенности игры:
- Создайте и развивайте вашего уникального героя;
- Варите и сбывайте леденцы, зарабатывая деньги;
- Исследуйте новые возможности и обновляйте интерьер вашего дома;
- Сражайтесь с десятками уникальных противников и боссов;
- Выполняйте задания и проходите сюжетную линию;
- Вступите в бой с другими игроками в PVP-режиме!
- Множество уникальных мини-игр и интересных квестов;
- Полностью русская озвучка;

Планируется ввести в v.0.4.0


Скриншоты:


Скачать на Google Play
(Бесплатно и без рекламы)

Добавлено (13 Августа 2018, 14:57)
---------------------------------------------
Добавили трейлер:


Обновили игру до v.0.5.0a


CodeBits Interactive.
BlackFixДата: Четверг, 01 Февраля 2018, 05:06 | Сообщение # 2 | Тема: [2D] Shitpuke demon [action]
постоянный участник
Сейчас нет на сайте
Ну... Это просто верх развития видеоигр.

CodeBits Interactive.
BlackFixДата: Среда, 31 Января 2018, 06:46 | Сообщение # 3 | Тема: [2D] - Lords of Sword (Beta) - [MMORPG/TurnBased]
постоянный участник
Сейчас нет на сайте


Жанр игры: MMORPG / Turn-Based RPG
На каком движке/конструкторе: Unity
В каком пространстве: 2D
Какой вид в игре: Сбоку
Какой Язык Пр. используется в игре: C# + PHP + Java + JavaScript
Для какой платформы: Android, iOS (В разработке), Веб (Вконтакте).
Предоставление исходного кода игры: Не предоставляется
Какой тип лицензии распространения: Free2Play
Текущая версия игры: v.0.5.1 (Открытая бета).
Графика: Купленная

Разработчик: CodeBits Interactive
Сообщество вконтакте: Сообщество игры
Дата выхода (ОБТ): 10.01.2018
Языки интерфейса: Русский, Английский (в разработке);
Язык озвучки: Английский (в разработке);

Описание игры:
Бесконечные кровопролитные битвы за титул Лорда Клинка ждут вас. Снарядите своего героя и выступайте в бой!
Достигните успеха, сражаясь с мутантами и другими игроками в динамичных пошаговых боях, прокачивайте своего персонажа и откройте перед собой удивительный и опасный мир Эуриона.
В вашем распоряжении будет доступна гибкая система прокачки персонажа и игровых предметов, PVP-баталии, выслеживание опасных существ и многое другое.

Возможности / Особенности игры:
- Пошаговые PVP-бои;
- Развитие героя и его характеристик;
- Покупка и улучшение большого количества экипировки;
- Изучение магических заклинаний;
- Найм спутников, сражающихся на вашей стороне в бою;
- PVE-испытания;
- Достижения, рейтинги игроков;
- Клановая система;
- Постройка владений;
- Социальные функции;
- Выбор божества;

В будущих обновлениях:
- PVP бои 2x2, 3x3, "В темную";
- Клановые войны;
- Нападения на владения других игроков;
- PVE походы на боссов (до 5-ти участников);
- Вызов друзей на бой;
- Гильдии;
- Сюжетные и ежедневные задания;
- Легендарные предметы;
- Классы и особые умения;
- И многое другое;

Скриншоты из игры:


Скачать игру:
Скачать на Google Play (Бета-версия)
Играть вконтакте (Бета-версия)


CodeBits Interactive.
BlackFixДата: Понедельник, 06 Ноября 2017, 00:54 | Сообщение # 4 | Тема: [2D] GrAv GrAv GraVity [Realese]
постоянный участник
Сейчас нет на сайте
Неплохая игрушка. Успехов в развитии!

CodeBits Interactive.
BlackFixДата: Суббота, 04 Ноября 2017, 13:00 | Сообщение # 5 | Тема: [2D] - Circus Stacker: Tower Puzzle
постоянный участник
Сейчас нет на сайте
Клево! Успехов вам!

CodeBits Interactive.
BlackFixДата: Пятница, 03 Ноября 2017, 12:32 | Сообщение # 6 | Тема: Непобедимый рубеж
постоянный участник
Сейчас нет на сайте
Главного героя надо дорабатывать. Успехов в реализации!

CodeBits Interactive.
BlackFixДата: Четверг, 02 Ноября 2017, 21:58 | Сообщение # 7 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата MyDreamForever ()
Блин, как же круто сделано. Удачи вам!
Главное не забыть о игре когда на андроид релизнетесь.


Спасибо за поддержку!
Андроид одна из основых платформ и поддержка будет одинакова для всех платформ.


CodeBits Interactive.
BlackFixДата: Четверг, 02 Ноября 2017, 03:17 | Сообщение # 8 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата black_house ()
Ого, классный проект назревает


Спасибо за поддержку!


CodeBits Interactive.
BlackFixДата: Среда, 01 Ноября 2017, 07:43 | Сообщение # 9 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата Глюк ()
BlackFix, В озвучке косяк, нигра говорит в конце "что-то там по мере доступности будут поступать новые ПРЕДЛОЖЕНИЯ", говоря в это время о приложениях)


Да, есть такое) Оговорился человек)


CodeBits Interactive.
BlackFixДата: Среда, 01 Ноября 2017, 06:16 | Сообщение # 10 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата k0fe ()
Будет грустно, когда игру выкупит Мейлру.


Не выкупят. У нас свой издатель, который не давит на нас, а лишь проводит PR-кампании и забирает с этого процент.

Добавлено (27 октября 2017, 08:11)
---------------------------------------------

Цитата k0fe ()
Всё очень круто пока что. Правда анимация на смене причёски уже заколебала (немного разнообразить, не более).


Да, можно обсудить с коллегами этот момент думаю.

Добавлено (27 октября 2017, 08:12)
---------------------------------------------

Цитата k0fe ()
Старайтесь обращать внимание на конструктивную критику, а то так весь энтузиазм и спустите


Да я понимаю что это троллинг) Не первый день в интернете. Просто скучно было ночью никто не писал, решил ответить ему)

Добавлено (28 октября 2017, 01:55)
---------------------------------------------
Up. Добавил видосик с тестом липсинка

Добавлено (01 ноября 2017, 06:16)
---------------------------------------------
Up. Добавлен первый геймплейный трейлер на Русском языке (в трейлере знакомство с персонажем Большой Лу). Второй геймплейный ролик уже скоро.


CodeBits Interactive.
BlackFixДата: Воскресенье, 29 Октября 2017, 08:13 | Сообщение # 11 | Тема: [Tutorial] Использование Singleton в Unity3D
постоянный участник
Сейчас нет на сайте
Цитата litovets ()
Синглтон - это та еще зараза. Из-за него в коде получается очень сильная связность кода, что совсем не хорошо. Мое мнение - старайтесь использовать синглтон как можно реже. 1-2 на весь проект как раз нормально.


Согласен. Нам в качестве хранилища обобщенных библиотек заходит. Но логика самих игр естественно не зашита и не сильно завязана на них.


CodeBits Interactive.
BlackFixДата: Воскресенье, 29 Октября 2017, 06:59 | Сообщение # 12 | Тема: [Tutorial] Использование Singleton в Unity3D
постоянный участник
Сейчас нет на сайте
Вступление
Организация любого, хотя-бы малость серьезного проекта требует хорошей организации кода. Проекты, разрабатываемые в среде Unity3D не являются исключением и, по мере роста проекта, его организация может сыграть не малую роль в качестве исходного продукта.

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

Итак, в этой статье мы затронем следующие моменты:

  • Введение
  • Как работает Singleton
  • Реализация Singleton в Unity3D
  • Взаимодействие с Singleton
  • О плюсах и минусах Singleton
  • Немного практических примеров
  • Заключение


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

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

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

На схеме ниже мы изобразили схему работы на примере мобильной пошаговой онлайн-игры:


Чтобы иметь полную картину, рассмотрим архитектуру этой игры. В данном случае помимо объектов Singleton у нас будут присутствовать следующие элементы:
1. Объекты для подгрузки Singleton (Так называемый Bootstrap-класс)
2. Объекты игровой логики (объекты управления сценариями)
3. Контроллеры (Например: контроллер игрока)
4. Модели данных (объекты для сериализации данных, получаемых с сервера)
5. Объекты интерфейса
6. Прочие статические игровые объекты

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

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

Классы-Менеджеры
Основа всего метода проектирования — собственно сами классы менеджеры, которые находятся в игре в единственном экземпляре и могут быть вызваны в любой момент. Для создания такого класса менеджера мы можем описать следующий код:

Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//=============================================
//   Audio Manager
//=============================================
public class AudioManager: MonoBehaviour {
    public static AudioManager instance = null; // Экземпляр объекта

    // Метод, выполняемый при старте игры
    void Start () {
        // Теперь, проверяем существование экземпляра
    if (instance == null) { // Экземпляр менеджера был найден
     instance = this; // Задаем ссылку на экземпляр объекта
    } else if(instance == this){ // Экземпляр объекта уже существует на сцене
     Destroy(gameObject); // Удаляем объект
    }

        // Теперь нам нужно указать, чтобы объект не уничтожался
        // при переходе на другую сцену игры
    DontDestroyOnLoad(gameObject);

    // И запускаем собственно инициализатор
    InitializeManager();
    }

    // Метод инициализации менеджера
    private void InitializeManager(){
        /* TODO: Здесь мы будем проводить инициализацию */
    }
}


На примере выше мы создали основу для одного из игровых менеджеров (в нашем случае это менеджер Audio). Не обязательно проводить инициализацию через метод Start(). Вы также можете использовать для этого метод Awake(), чтобы ваш объект был готов еще до старта сцены.

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//=============================================
//   Audio Manager
//=============================================
public class AudioManager: MonoBehaviour {
    public static AudioManager instance = null; // Экземпляр объекта
    public static bool music = true; // Параметр доступности музыки
    public static bool sounds = true; // Параметр доступности звуков

    // Метод, выполняемый при старте игры
    void Start () {
        // Теперь, проверяем существование экземпляра
    if (instance == null) { // Экземпляр менеджера был найден
     instance = this; // Задаем ссылку на экземпляр объекта
    } else if(instance == this){ // Экземпляр объекта уже существует на сцене
     Destroy(gameObject); // Удаляем объект
    }

        // Теперь нам нужно указать, чтобы объект не уничтожался
        // при переходе на другую сцену игры
    DontDestroyOnLoad(gameObject);

    // И запускаем собственно инициализатор
    InitializeManager();
    }

    // Метод инициализации менеджера
    private void InitializeManager(){
        // Здесь мы загружаем и конвертируем настройки из PlayerPrefs
        music = System.Convert.ToBoolean (PlayerPrefs.GetString ("music", "true"));
    sounds = System.Convert.ToBoolean (PlayerPrefs.GetString ("sounds", "true"));
    }

    // Метод для сохранения текущих настроек
    public static void saveSettings(){
    PlayerPrefs.SetString ("music", music.ToString ()); // Применяем параметр музыки
    PlayerPrefs.SetString ("sounds", sounds.ToString ()); // Применяем параметр звуков
    PlayerPrefs.Save(); // Сохраняем настройки
    }
}


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

Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//=============================================
//    Audio Muter Class
//=============================================
public class AudioMuter : MonoBehaviour {
    // Публичные параметры
    public bool is_music = false; // Это объект с музыкой?

    // Приватные параметры
    private AudioSource _as; // Audio Source
    private float base_volume = 1F; // Базовая громкость

    // Инициализация компонента при старте игры
    void Start () {
    _as = this.gameObject.GetComponent<AudioSource> (); // Получаем компонент AS
    base_volume = _as.volume; // Получаем базовую громкость из AS
    }

    // Каждый кадр мы проверяем параметры и устанавливаем громкость
    void Update () {
    // Для начала проверим, музыка это или нет
    if (is_music) {
     _as.volume = (AudioManager.music)?base_volume:0F;
    } else {
     _as.volume = (AudioManager.sounds)?base_volume:0F;
    }
    }
}


На примере выше мы создали компонент, позволяющий нам автоматически включать/отключать AudioSource на объекте на основе статичных полей music и sounds в нашем менеджере.



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

Рассмотрим наш класс Boostrap-а:
Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//=============================================
//    Game Classes Loader
//=============================================
public class GameLoader : MonoBehaviour {
    // Ссылки на менеджеров
    public GameObject game_manager; // Game Base Manager
    public GameObject audio_manager; // Audio Manager
    public GameObject lang_manager; // Language Manager
    public GameObject net_manager; // Network Manager

    // Метод пробуждения объекта (перед стартом игры)
    void Awake () {
        // Инициализация игровой базы
    if (GameBase.instance == null) {
     Instantiate (game_manager);
    }

    // Инициализация аудио менеджера
    if (AudioManager.instance == null) {
     Instantiate (audio_manager);
    }

    // Инициализация менеджера языков
    if (LangManager.instance == null) {
     Instantiate (lang_manager);
    }

    // Инициализация сетевого менеджера
    if (NetworkManager.instance == null) {
     Instantiate (net_manager);
    }
    }
}


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

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

В нашем случае после запроса к серверу мы будем выгружать полученные данные в модели и обрабатывать их данные. Рассмотрим простейшую модель данных:
Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class responceModel{
    public bool complete = false; // Статус операции
    public string message = ""; // Сообщение об ошибке (в случае если complete = false)
}


На примере выше у нас изображена модель данных, которая будет служить для обработки базовых статусов, получаемых с сервера в формате JSON. Таким образом, когда мы обращаемся к нашему игровому серверу мы получаем 2 вида ответа:

При успешном обращении мы получаем ответ следующего вида:
Код

{
    complete: true, // Статус операции
    data: {} // Объект с запрошенными данными
}


А при ошибке мы получаем ответ следующего вида:
Код

{
    complete: false, // Статус операции
    message: "" // Сообщение об ошике
}


Таким образом мы можем парсить ответ сервера при помощи JSON десериализации и нашей модели данных:
Код

responceModel responce = JsonUtility.FromJson<responceModel>(request.text); // Парсинг JSON
if(responce.complete){
    /* TODO: Делаем что-то с полученными данными */
    Debug.Log(responce.data);
}else{
    /* TODO: Выводим ошибку */
    Debug.Log(responce.message);
}


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

Пример простого контроллера игрока:
Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//=============================================
//    PLAYER CONTROLLER
//=============================================
public class PlayerController : MonoBehaviour {
    // Публичные объекты
    [Header ("Player Body Parts")]
    public GameObject[] hairs;
    public GameObject[] faces;
    public GameObject[] special;

    // Инициализация компонента
    void Start () {
    }
    
    // Апдейт фрейма
    void Update () {
    }

    // Обновить на игроке его части тела
    public void updateParts (){
    // Работа с волосами
    for (int i = 0; i < hairs.Length; i++) {
  if (i == NetworkManager.instance.auth.player_data.profile_data.body.hairs) {
   hairs [i].SetActive (true);
  } else {
   hairs [i].SetActive (false);
  }
    }

    /* TODO: Тоже самое для других частей тела */
    }
}


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

Рассмотрим данную строку:
Код

if (i == NetworkManager.instance.auth.player_data.profile_data.body.hairs){


Здесь мы видим, что идет сравнение индекса в цикле с идентификатором волос в модели данных игрока. Данная модель представлена в экземпляре объекта менеджера сети (NetworkManager), где был инициализирован объект для работы с авторизацией (auth), внутри которого размещены модели данных (player_data => profile_data => body).

Взаимодействие с Singleton
Для взаимодействия с менеджерами мы будем использовать либо экземпляр объекта (instance), либо прямое обращение для статических параметров.

Пример работы с instance:
Код

public bool _hair = NetworkManager.instance.auth.player_data.profile_data.body.hairs;


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

Пример прямого взаимодействия со static-параметрами:
Код

public bool _sounds = AudioManager.sounds;


На примере выше мы обратились напрямую к статичному свойству sounds в менеджере AudioManager.

О плюсах и минусах Singleton
Плюсы:
+ Нет необходимости постоянной настройки и описаний полей скриптов в инспекторе
+ К менеджерам можно обращаться через свойство instance
+ Удобный рефакторинг кода
+ Компактность кода

Минусы:
— Сильная зависимость кода
— Доступ только к скриптам-менеджерам в единственном экземпляре

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

Рассмотрим данный пример:
Код

// Задаем функции-делегаты
public delegate void OnComplete();
public delegate void OnError(string message);

// Создаем наш метод, использующий делегаты
public void checkNumber(int number, OnComplete success, OnError fail){
    if(number<10){
         success(); // Вызываем метод OnComplete
    }else{
        fail("Вы ввели число большее 10!"); // Вызываем метод с ошибкой
    }
}


На простом примере выше мы создали метод, который вызываем функцию success, если параметр number был меньше 10 и функцию error, когда параметр был больше или равен 10 соответственно.

Использовать данный метод можно следующим способом:
Код

public void testMethod(){
    int _number = Random.Range(0,50); // Случайное число

    // Вызываем созданный нами метод проверки числа
    checkNumber(_number, (()=>{ // Здесь вызывается метод Success
        /* TODO: Делаем что-то при успешном выполнении */
        Debug.Log("Все хорошо!");
    }), ((string text)=>{ // Здесь вызывается метод Fail
        Debug.Log(text); // Выводим текст, полученный в аргументе Callback функции
        testMethod(); // Перезапускаем метод до тех пор, пока число не станет <10
    }));
}


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

Делегаты в связке с Coroutine в Singleton
Для наиболее удобного и правильного взаимодействия с сервером мы можем использовать связку Coroutine-функций и делегатов, тем самым получая возможность отправлять асинхронные запросы и обрабатывать ответ сервера. Ниже мы подготовили пример NetworkManager-а с использованием Coroutine-функций и делегатов.

Рассмотрим данный пример NetworkManager-а:
Код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//=============================================
//    Network Manager
//=============================================
public class NetworkManager : MonoBehaviour {
    // Публичные параметры
    public static NetworkManager instance = null; // Экземпляр менеджера
    public static string server = "https://mysite.com/api"; // URL сервера

    // Публичные ссылки на подобъекты менеджера
    public APIAuth auth; // Объект авторизации
    public APIUtils utils; // Объект утилит

    // Инициализация менеджера
    void Awake () {
        // Проверяем экземпляр объекта
    if (instance == null) {
     instance = this;
    } else if(instance == this){
     Destroy(gameObject);
    }

        // Даем понять движку, что его не нужно уничтожать
    DontDestroyOnLoad(gameObject);

    // Инициализируем нашего менеджера
    InitializeManager();
    }

    // Инициализация менеджера
    public void InitializeManager(){
    auth = new APIAuth (server + "/auth/"); // Подключаем подобъект авторизации
    utils = new APIUtils (server + "/utils/"); // Подключаем подобъект утилит
    }
}

//=============================================
//    API Auth Manager
//=============================================
public class APIAuth{
    // Приватные параметры
    private string controllerURL = ""; // Controller URL

    //=============================================
    //   Конструктор объекта
    //=============================================
    public APIAuth(string controller){
    controllerURL = controller;
    }

    //=============================================
    //    Метод для авторизации
    //=============================================
    public delegate void OnLoginComplete();
    public delegate void OnLoginError(string message);
    public IEnumerator SingIn(string login, string password, OnLoginComplete complete, OnLoginError error){
        // Формируем данные для отправки
    WWWForm data = new WWWForm();
    data.AddField("login", login);
    data.AddField("password", password);
    data.AddField("lang", LangManager.language);

    // Отправляем запрос на сервер
    WWW request = new WWW(controllerURL + "/login/", data);
    yield return request;

    // Обрабатываем ответ сервера
    if (request.error != null) { // Ошибка отправки запроса
     error ("Не удалось отправить запрос на сервер");
    } else { // Ошибок при отправке не было
     try{
                responceModel responce = JsonUtility.FromJson<responceModel>(request.text);
  if(responce.complete){
      complete(); // Вызываем Success Callback
  }else{
      error (responce.message); // Do error
      Debug.Log("API Error: " + responce.message);
  }
     }catch{
  error ("Не удалось обработать ответ сервера");
  Debug.Log("Ошибка обработки ответа сервера. Данные ответа: " + request.text);
     }
    }
    }
    

    /* TODO: Здесь будут остальные методы для работы с авторизацией */
}

//=============================================
//    Теперь создаем подобъект утилит по образу и подобию авторизации
//=============================================
public class APIUtils{
    private string controllerURL = "";

    // Аналогичный конструктор класса
    public APIUtils(string controller){
        controllerURL = controller;
    }

    //=============================================
    //    Проверка версии клиента игры
    //=============================================
    public delegate void OnClientVersionChecked();
    public delegate void OnClientVersionError(string message);
    public IEnumerator CheckClientVersion(string version, OnClientVersionChecked complete, OnClientVersionError error){
        // Создаем данные
        WWWForm data = new WWWForm();
    data.AddField("version", version);
    data.AddField("lang", LangManager.language);

        // Отправляем запрос
    WWW request = new WWW(controllerURL + "/checkVersion/", data);
    yield return request;

    // Обрабатываем ответ
    if (request.error != null) {
     error ("Не удалось отправить запрос на сервер");
    } else {
     try{
  responceModel responce = JsonUtility.FromJson<responceModel>(request.text);
  if(responce.complete){
      complete();
  }else{
      error (responce.message);
      Debug.Log("API Error: " + responce.message);
  }
      }catch{
          error ("Не удалось обработать ответ сервера");
   Debug.Log("Ошибка обработки ответа сервера. Данные ответа: " + request.text);
      }
    }
    }
}


Теперь мы можем использовать это по назначению:
Код

// Простая функция для вызова проверки
public void checkMyGame(){
    StartCoroutine(NetworkManager.instance.utils.CheckClientVersion(Application.version,
    (()=>{ // Если все прошло успешно
        /* TODO: Здесь мы выполняем загрузку игры после успешной проверки версии игры */
    }), ((string msg) => { // Если возникла ошибка
    /* TODO: Здесь мы просим пользователя обновить версию клиента игры */
        Debug.Log(msg);
    })));
}


Таким образом, вы можете выполнять код NetworkManager и управлять его методами при помощи Callback-функций из любой сцены игры.

Заключение
Вообще, тема Singleton-ов и паттернов в целом в рамках проектов на Unity3D заслуживает отдельной книги и рассказать все в одной статье не получится. Ниже мы прикрепили несколько полезных материалов, где вы можете почитать об этом подробнее.

Список полезных материалов:
Делегаты в C#
Unity и MVC
Методы организации взаимодействия между скриптами в Unity3D

В общем, друзья, это мой первый туториал в таком формате. Хотелось бы услышать ваши комментарии и стоит ли мне писать такое в дальнейшем?
Надеюсь, данная статья вам поможет!


CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 22:13 | Сообщение # 13 | Тема: [Armored Kitten] - Доступна страница в стиме!
постоянный участник
Сейчас нет на сайте
It's fckn awesome!

CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 08:40 | Сообщение # 14 | Тема: "PIXEL GLADIATOR" (РЕЛИЗ!!!)
постоянный участник
Сейчас нет на сайте
Круто!

CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 05:42 | Сообщение # 15 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата CAMUVI ()
Лучше бы что то свое придумали в стиле аниме, а не плагиатили американцев, потенциального врага России матушки.


А аниме с какого перепуга стало "своим"?
Ну и если США ваш враг народа, перестаньте пользоваться интернетом.


CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 03:14 | Сообщение # 16 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата Ordan ()
Амбиции хорошие, надеюсь сможете воплотить их в жизнь.


Тоже надеемся) Слишком много денег из нашего кошелька пошло на реализацию (ну конечно по меркам обычных смертных, а не мегакорпорации) :D


CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 02:46 | Сообщение # 17 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте
Цитата Глюк ()
Игра конечно крутая, но не нарушает ли она авторские права?) Если нет, то я только рад)


У нас только рисовка немного схожая. Все остальное оригинальное. Авторские права это не нарушает.


CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 02:16 | Сообщение # 18 | Тема: Hard Life of the President
постоянный участник
Сейчас нет на сайте
Когда решил собрать поделку за 10 минут

CodeBits Interactive.
BlackFixДата: Пятница, 27 Октября 2017, 01:38 | Сообщение # 19 | Тема: [2D] - Челопундрия: Война Синдикатов - [MMORPG/Turn-Based]
постоянный участник
Сейчас нет на сайте


Жанр игры: MMORPG / Turn-Based RPG
На каком движке/конструкторе: Unity3D + CodeBits Platform (Server)
В каком пространстве: 2D
Какой вид в игре: Сбоку
Какие есть похожие игры: South Park: Stick of Truth, Челопундрия (Искомая)
Какой Язык Пр. используется в игре: C# + PHP
Для какой платформы: Android, iOS, Windows (PC), Браузер, Социальные сети (VK, Facebook), XBox One
Предоставление исходного кода игры: Не предоставляется
Какой тип лицензии распространения: F2P / Premium

Сроки разработки: 2015 - 2017
Состав имеющейся команды: Художник, Программист, Продюссер, Саунд-Дизайнер, Актеры озвучки, Гейм-Дизайнер
Разработчик: CodeBits Interactive
Сообщество вконтакте: Сообщество Челопундрии
Сайт игры: Сайт игры
Дата выхода (ЗБТ): 20.11.17
Дата выхода (ОБТ): 12.12.17
Языки интерфейса: Русский, Английский, Испанский, Итальянский, Французский, Немецкий;
Язык озвучки: Только Русский

Описание игры:
Челопундрия: Война Синдикатов - перезагрузка некогда разработанной нами игры для социальной сети вконтакте. В этот раз мы переработали игру с нуля, добавив ей атмосферы, живости, сюжетный режим и поддержку множества платформ для комфортной игры (ну и конечно же купили сервера, ибо с этим были большие проблемы). Проект представляет собой многопользовательскую ролевую игру с пошаговой боевой системой и одиночным сюжетным режимом. Разрабатывается игра на движке Unity3D.

Место действия:
Действие игры происходит в вымышленном американском городе Лос-Рояль. После убийства мера города одним из приближенных здешнего наркобарона в городе воцарился хаос. И без того наполнявшая город преступность начала кровопролитную войну за власть между собой. Главный герой игры - только что вышедший из тюрьмы бывший гангста, готовый объединиться со своими бывшими корешами, чтобы навалять остальным представителям преступного мира и взять под контроль город.

Возможности / Особенности игры:
- Открытый для исследования мир с разнообразными заданиями, боссами, мини-играми и интересными местами.
- Полностью озвученные и анимированные персонажи
- Одиночное прохождение сюжетной линии
- Мультиплеер (бои PVP 1x1, лиги, кланы и др.)
- Более 50-ти видов экипировки
- Густонаселенный мир с уникальными обитателями у каждого из которых свои отношения и цели в игре
- Прокачка персонажа и его компаньона (питомца)

Фракции в игре:
- Бомжи - Обитают преимущественно на свалках и в канализации. Лидер группировки - бомж по кличке Боярышник.
- Люди наркобарона - Безумные и кровавые гэнста, готовые в любой момент отметелить игрока и его друзей.
- Девушки легкого поведения - Подконтрольные Лепрекону, обитающие в борделе.
- Банкиры-Сектанты - Злобные еврейские морды, обитающие в финансовом районе с Главным банкиром в лидерах.
- Контрабандисты - Обитают в порту. Командование контрабандистов берет на себя некий Мичман.
- Полицейские - Продажные копы, появляющиеся в некоторых одиночных и кооперативных заданиях.

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

Некоторые скриншоты/арт:


Первые геймплейный трейлер (Сюжет, Большой Лу):


Второй геймплейный трейлер (Битва с бомжами):


Озвучка игры:
Уже сейчас стартовал подбор актеров и первый этап озвучки персонажей. Ознакомиться с этим делом можно здесь:
Примеры озвучки игры

Тест Lipsync в игре:


CodeBits Interactive.

Сообщение отредактировал BlackFix - Среда, 01 Ноября 2017, 06:15
BlackFixДата: Четверг, 11 Мая 2017, 07:51 | Сообщение # 20 | Тема: [2D] Undefined Kingdom - [Action / Platformer]
постоянный участник
Сейчас нет на сайте
Сундучки в игре будут взрываться, вызывая фонтан монет, за которыми придется бегать :D Демо ниже.


CodeBits Interactive.
Форум игроделов » Записи участника » BlackFix [353]
  • Страница 1 из 18
  • 1
  • 2
  • 3
  • 17
  • 18
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг