Я работаю над бесплатной многопользовательской игрой и пытаюсь испечь свою собственную сетевую систему.
В настоящее время у меня есть что-то вроде этого
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, которые существуют с ихсетевой гид.Если он существует, мы либо добавляем, либо обновляем компонент, в противном случае создаем экземпляр игрового объекта и добавляем каждый полученный компонент