danilaxxl danilaxxl

CollectableItemData.cs

[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]

GoloGames GoloGames

vadya_ivan, рад, что вам игра показалась интересной : )

P.S. Кстати уже доступна бесплатная демо-версия в Steam

vadya_ivan vadya_ivan

Визуал, задумка, музыка , механики, все в цель

GoloGames GoloGames

Ato_Ome, спасибо за позитивные эмоции, будем стараться : )

Ato_Ome Ato_Ome

Потрясающий результат, все так четенько, плавненько)
То ли саунд, то ли плавность напомнили мне игрушку World of Goo, удачи вам в разработке и сил побольше дойти до релиза!)

Cute Fox Cute Fox

Graphics are a little cool, good HD content. But this game doesn't cause nary interest me.
However the game is well done.

GMSD3D GMSD3D

Почему действие после всех условий выполняется?
[step another object]

Zemlaynin Zemlaynin

Jusper, Везде, но наугад строить смысла нет. Нужно разведать сперва территорию на наличие ресурсов.

Jusper Jusper

Zemlaynin, а карьеры можно будет везде запихать?
Или под них "особые" зоны будут?

Zemlaynin Zemlaynin

Это так скажем тестовое строительство, а так да у города будет зона влияния которую нужно будет расширять.

Jusper Jusper

А ссылка есть?

Jusper Jusper

Я не оч понял из скриншота, как вообще работает стройка. У игрока будет как бы поле строительства?

split97 split97

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

split97 split97

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

ViktorJaguar ViktorJaguar

Почему я нигде не могу найти нормальный туториал, где покажут как экипировать предмет (например, меч) в определенную (выделенную под оружие) ячейку???

Логотип проекта Unity

Встроенное сетевое решение

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

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

Для начала создадим новую сцену

Получится вот такое:

Встроенное сетевое решение — Unity — DevTribe: инди-игры, разработка, сообщество

Далее выберем нашу основную камеру и создадим новый скрипт, назовем его NetworkExample

В нем создаем класс OnGUI, для реализации графической части нашей наработки:

void OnGUI()
{

}

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

  • bool isServerStarted; // отвечает за то, когда сервер запущен
  • bool isPlayerConnected; // отвечает за то, когда игрок присоединился к серверу
  • string ip = "127.0.0.1"; // сюда мы будем записывать айпи сервера к которому мы будем присоединяться

Теперь мы продолжим работать с классом OnGUI() и добавим вот такую часть кода:

void OnGUI()
{
    if (!isPlayerConnected)
    {
        if (!isServerStarted)
        {
            if (GUILayout.Button("Start Server"))
            {
                Network.InitializeServer(32, 3333, false);
                // 32 - максимальное количество игроков
                // 3333 - порт
                // последний параметр проверка на использование NAT
            }
            if (GUILayout.Button("Connect"))
            {
                Network.Connect(ip, 3333);
            }

            ip = GUILayout.TextArea(ip); // рисуем окно с вводом айпи
        }
        else
        {
            // игрок создал сервер и может начать игру
            if (GUILayout.Button("Spawn"))
            {
                isPlayerConnected = true;
            }
        }
    }
}

Что это значит:

  1. Идет проверка присоединился ли игрок к серверу, если нет, то проверяется не запустил ли игрок сервер, если обе проверки отрицательны то мы рисуем интерфейс для создания сервера и присоединения к существующему.
  2. Если проверка на создания сервера положительна то игрок может начать игру.

Далее добавим вот это

void OnServerInitialized()
{
    isServerStarted = true;
}

void OnConnectedToServer()
{
    isServerStarted = true;
}

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

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

В конец класса мы добавим:

[RPC]
void SpawnBox(string color)
{
    GameObject cube = Instantiate(prefab, new Vector3(0, 25, 0), Quaternion.identity) as GameObject;
    switch (color)
    {
        case "green":
            cube.renderer.material.color = Color.green;
            break;
        case "black":
            cube.renderer.material.color = Color.black;
            break;
        case "white":
            cube.renderer.material.color = Color.white;
            break;
    }
}

Как вы заметили в начале класса появился атрибут [RPC] он ставится перед всеми методами которые мы будем вызывать при сетевой связи.
Внутри метода у нас создание на сцене объекта клона prefab, который мы должны объявить в начале нашего кода:
public GameObject prefab;

Далее мы обрабатываем аргрумент который передается во время вызова метода и меняем цвет кубика.

Теперь осталось дело за малым: создать объект и вызвать все таки этот метод.

Метод OnGUI() у нас немного дополнился:

void OnGUI()
{
    if (!isPlayerConnected)
    {
        if (!isServerStarted)
        {
            if (GUILayout.Button("Start Server"))
            {
                Network.InitializeServer(32, 3333, false);
            }
            if (GUILayout.Button("Connect"))
            {
                Network.Connect(ip, 3333);
            }
            ip = GUILayout.TextArea(ip);
        }
        else
        {
            if (GUILayout.Button("Spawn"))
            {
                isPlayerConnected = true;
            }
        }
    }
    // если игрок соединился даем возможность спавнить кубики
    else
    {
        if (GUILayout.Button("Spawn Box"))
        {
            networkView.RPC("SpawnBox", RPCMode.All, currentcolor);
        }
        // кнопки с цветом кубиков
        if (GUILayout.Button("White"))
        {
            currentcolor = "white";
        }
        if (GUILayout.Button("Black"))
        {
            currentcolor = "black";
        }
        if (GUILayout.Button("Green"))
        {
            currentcolor = "green";
        }
    }
}

У нас появилась переменная currentcolor которую надо не забыть добавить в начало кода:

  • string currentcolor = "white";

Теперь рассмотрим что происходит по нажатии кнопки SpawnBox:
Для вызова сетевых методов мы используем
netowrkView.RPC("метод с атрибутом rpc", RPCMode - этот параметр отвечает за то кому отправлять сообщение о вызове метода, и третий параметр это аргумент метода)

Ну что, теперь с кодом покончено, осталось создать куб который будет появляться на сцене и привязать компонент networkView который требуется для вызова RPC методов. Делается это все просто:

  1. На объект MainCamera Вешаем компонент NetworkView и перетаскиваем скрипт NetworkExample в Observed что-бы получилось вот так:
Встроенное сетевое решение — Unity — DevTribe: инди-игры, разработка, сообщество
  1. Создаем куб и вешаем на него компонент rigidbody
Встроенное сетевое решение — Unity — DevTribe: инди-игры, разработка, сообщество

Далее указываем в скрипте Network Example prefab - тот самый куб

Встроенное сетевое решение — Unity — DevTribe: инди-игры, разработка, сообщество

Еще нужно не забыть в настройках проекта указать работу в бекграунд режиме:
Edit>Project Settings> Player

Встроенное сетевое решение — Unity — DevTribe: инди-игры, разработка, сообщество

Готово! Теперь можно добавить Plane что бы наши кубики не улетали в вечность, или придумать что-то интересней. Если есть вопросы пишите. Извиняюсь за ошибки и неточности, это моя первая статья.
В итоге получим вот такое:

Встроенное сетевое решение — Unity — DevTribe: инди-игры, разработка, сообщество

Исходник

http://devtribe.ru/ext-files/562/129426/Network.rar

Смотрите также:


Комментарии

Здесь еще никто не оставил комментарий

Справка