Проект «Искореженный металл» по мотивам Twisted Metal 4. UNITY. Часть 7

Поделиться.

Всем привет, в этой статье мы сделаем сетевое взаимодействие. Для этого в Unity есть целая система и называется она Unity Networking в нее входят множество компонентов и библиотека функций помогающие передавать данные между сервером и клиентом. Начнем, для начала создадим на сцене пустой объект и назовём его  NetworkControl, теперь добавим на него компонент Network Manager — он отвечает за параметры подключения и создания игроков на сцене.Указываем в качестве online scene нашу сцену, а в качестве player prefab — prefab нашего авто. Далее добавим компонент Network Manager HUD — он создает меню с помощью которого можно создавать сервер или подключаться к серверу. 

Подготовим нашу машину к сетевой игре, для этого добавим ей несколько компонентов, первым будет Network Identiry — он показывает, что наш игрок может быть сервером и управление должно функционировать. Второй компонент называется Network Transform — он нужен для синхронизации позиции игроков между всеми клиентами и сервером в том числе.

Посмотрим что вышло.

Соединение установлено, поворот и позиция синхронизируется, но вот незадача я управляю сразу двумя автомобилями с одного компьютера, это из за того, что у них одинаковые компоненты, которые реагируют на одинаковые команды. Как это исправить? Я отключу все  компоненты на машине и буду включать их только у локального игрока, то есть если моя машина моя, управление включается. Пишем скрипт и вешаем его на prifab машины.

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

namespace UnityStandardAssets.Vehicles.Car
{
public class LanControll : NetworkBehaviour {

public Camera Cam;
public AudioListener Alist;
public GameObject CameraMenu;
public GameObject Gun;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void FixedUpdate () {
if (isLocalPlayer) {
CameraMenu = GameObject.FindGameObjectWithTag («CameraMenu»);
if (CameraMenu != null) {
CameraMenu.SetActive (false);
}
Cam.enabled = true;
Alist.enabled = true;
Gun.GetComponent<Shoot>().enabled = true;
gameObject.GetComponent<CarUserControl>().enabled = true;
}
}
}
}

Смотрим что получилось.

Отлично. В следующей статье мы будем синхронизировать миры и события. Всем удачи и до скорых встреч :)!


Поделиться.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *