API-агностик Vector3, Matrix и т. Д.?
Я пытаюсь сохранить свою игровую логику API-независимой. При этом я не хочу использовать Vector3-структуру Unity3D или XNA и т. Д. Каков наилучший способ сделать это? Кажется, что было бы ужасно бросить вызов, если бы я свернул свою собственную структуру Vector3 и просто написал неявные конвертеры для различных реализаций API.
Есть ли лучшая практика для такого рода вещей? Я не могу попросить Microsoft, Unity и т. Д. Устроить пикник и придерживаться общего интерфейса.
2 ответа
Похоже, реализации XNA и Unity Vector3
действительно похожи, главное отличие в случае имен свойств. Жаль, что нет способа реализовать свойства расширения.
То, что вы могли бы сделать, это создать набор методов расширения вместе с некоторой условной компиляцией (#if UNITY_3_3
или же #if XNA
) и исключительно использовать эти методы расширения для получения значений в вашем коде, не зависящем от API. Это по-прежнему позволит вам передавать объект Vector3 без изменений в специфичный для платформы код, требующий Vector3 без тонны приведения.
Исходя из моего опыта, я бы выбрал одну платформу для записи вашей логики, а затем, на другой платформе, создал бы соответствующую реализацию с преобразованиями в нативные типы платформы. Нет смысла разрабатывать и писать третью реализацию, а затем выполнять преобразования для обеих платформ!
При всех равных платформах я бы предпочел XNA, поскольку вы можете получить реализацию с открытым исходным кодом из MonoGame или (в конечном итоге) ExEn и использовать ее.
Однако на практике я думаю, что вам, вероятно, лучше начать с платформы, на которой вы собираетесь разрабатывать (XNA или Unity), а затем создать свой уровень совместимости, когда он вам действительно понадобится.