Estoy tratando de mantener mi lógica de juego API-agnóstica. Al hacerlo, no quiero usar la estructura Vector3 de Unity3D, o XNA, etc. ¿Cuál es la mejor manera de hacer esto? Parece que sería terriblemente pesado si implementara mi propia estructura Vector3 y simplemente escribiera convertidores implícitos para las diversas implementaciones de API.
¿Hay una mejor práctica para este tipo de cosas? No es como si pudiera pedirle a Microsoft, Unity, etc. que hagan un picnic y se adhieran a una interfaz común.
Parece que las implementaciones de XNA y Unity de Vector3 son realmente similares, la principal diferencia es el caso de los nombres de propiedad. Lástima que no hay forma de implementar propiedades de extensión.
Lo que podría hacer es crear un conjunto de métodos de extensión , junto con alguna compilación condicional ( #if UNITY_3_3 o #if XNA ) y usar exclusivamente esos métodos de extensión para recuperar valores en su código agnóstico de API. Esto aún le permitiría pasar el objeto Vector3 sin modificar al código específico de la plataforma que requiere Vector3 sin toneladas de conversión.
Según mi experiencia, seleccionaría una plataforma para escribir su lógica y luego, en la otra plataforma, crearía una implementación coincidente con conversiones a los tipos nativos de la plataforma. ¡No tiene sentido diseñar y escribir una tercera implementación y luego tener que hacer conversiones a ambas plataformas!
Todas las plataformas son iguales, probablemente preferiría XNA, ya que puede obtener una implementación de código abierto de MonoGame o (eventualmente) ExEn y usar eso.
Sin embargo, en la práctica, creo que es mejor comenzar con la plataforma en la que desea desarrollar (XNA o Unity) y luego crear su capa de compatibilidad una vez que realmente la necesite.