Unity сериализует все компоненты игрового объекта анонимно - PullRequest
0 голосов
/ 24 февраля 2019

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

В настоящее время у меня есть что-то вроде этого

public class NetworkedEntity : Monobehavior

public Guid guid;

awake()
{
    /* serialize all components in game object, 
    *  broadcast to the server to then be instantiated on all
    *  players machines
    */
}

public void SendSync(object obj) {
    /* Send some JSON over TCP */
}

public void SendAsync(object obj) {
   /* Send some JSON over UDP */
}

У меня есть вторичный класс, который является одноэлементным для моих соединений TCP / UDP.Теперь у меня возник вопрос: могу ли я использовать Newtonsoft или JsonUtility для отправки компонента (списка) JSON и создания его (их) экземпляров?

Какой-то псевдо-код о том, как я хочу обработать его,

   new NetworkContainer { Guid = this.guid, Components = GetAllComponents() }
   // send over TCP

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

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

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

...