[Optimización] Código Vs Animación

marod

Hola a todos

Un día más vengo con una duda, esta vez se trata de entender cual es la manera más óptima de hacer las cosas.

Imaginaos que tenemos un cubo, y que queremos que este rote sobre sus ejes, sin desplazamiento. Tenemos la opción de hacerlo por código, en el caso de Unity tendriamos Transform.Rotate y le añadimos un Vector3 indicandole los grados por cada eje sobre los que tiene que rotar todo esto en el metodo Update, fácil.

Por otro lado tenemos la opción de animar la propia rotación, sin utilizar un ápice de código, solo indicándole al animator cuando debe realizar la rotación.

Mi pregunta es ¿A la hora de hacer esto, qué es lo más optimo? ¿Y si tuvieramos 1000 cubos rotando a la vez en nuestra escena? ¿Y si fueran sprites, sería lo mismo animarlos por código que haciendo una propia animación?

Gracias y un saludo.

cabron

Entre esto y la preocupación que tenías por el rendimiento de recorrer un array... no sé que habrás leído o te habrán contado para tener esa obsesión con el rendimiento, pero te estás equivocando bastante.

Olvídate del rendimiento, como si no existiese, y preocúpate de que funcione y esté bien hecho, y si en algún momento algo te va lento, entonces ya miras a ver que es.

1 2 respuestas
r2d2rigo

El bottleneck de dibujar 1000 cubos seria infinitamente mayor que lo que preguntas. Como dice #2 olvidate de estas idioteces hasta que estes haciendo un Skyrim o Fallout porque te vas a centrar en cosas que no son importantes en absoluto y vas a perder el rumbo.

1 1 respuesta
VicoViper

#1 Para empezar vamos a discutir el concepto de "optimización", y te diré que en ocasiones (y más aun si estás usando Unity) es más importante la legibilidad del código y sus posibilidades de ampliación que su rendimiento... (Obviamente es importante seguir algunas directrices, y vigilar lo que pones en el update() )pero una cosa es vigilar y otra obsesionarse con el tema.

Y ahora, vamos a por lo que te interesa:
Un cubo girando no es una animación, es un cubo girando, hazlo por código y quítate de problemas. Por norma te recomiendo lo siguiente:

1 - Si no hay deformación, no uses animación (rima y todo).
2 - Si algo es lo bastante sencillo para que puedas hacerlo por código sin complicarte, hazlo.

Así que 1000 cubos girando, que giren por código, que es una línea.

Con respecto a los sprites, lo mismo.
Si hay más de un frame, normalmente usa animación (a no ser que sea algo muy sencillo y prfieras ir alternando frames a mano).
Si lo único que necesitas es que el sprite se mueva, rote, se escale... pues código...

Piensa en la forma más sencilla de hacer las cosas y un 90% de las veces acertarás.
Si te pones a pensar en como hacer para ahorrarte una asignación, acabarás teniendo un código que no comprenderás ni tu mismo.

1 respuesta
marod

#2 #3 #4 Tomo nota.

Mi principal problema es que como estoy empezando en esto del desarrollo de videojuegos y no tengo ni idea de como funcionan las cosas, quiero hacerlo todo "Bien" desde un principio para que a la larga no tenga malas manías, de ahí que pregunte este tipo de gilipolleces.

Está claro que debo pensar primero 100% en simpleza, hacer que las cosas funcionen y después ya ver si se puede optimizar el código.

Muchas gracias

1 respuesta
MTX_Anubis

#5 Hay dos cosas (entre otras muchas xD) que no deberías hacer cuando desarrollas una aplicación: Optimización y abstraciones prematuras.

La primera porque lo más seguro es que vayas a gastar mucho tiempo en optimizaciones que no te van a valer para nada, es mejor hacer una optimización postanálisis para ver que partes son las que empeoran el rendimiento. Hay que contar siempre con una premisa y es tomar decisiones en base a análisis y datos reales, siempre.

Obviamente si sabes que una cosa es mejor que otra y te cuesta lo mismo hacerlas pues vas a por la mejor. Esto viene a decir que no te obsesiones.

Con la segunda pierdes mucha flexibilidad a parte de que tu diseño puede quedar viciado por una primera idea, puede dar lugar a sobrediseño (y mal diseño) arrastrándolo y no ver más alternativas. Aquí nuevamente, cuanta más experiencia se tiene, mejores van siendo los diseños de inicio (que nunca estarán bien del todo seguramente) pero será más fácil identificar clases abstractas, traits, interfaces, etc.

Y como con lo otro pues hay cosas que son obvias y no hay que pensarlas mucho.

1

Usuarios habituales

  • MTX_Anubis
  • marod
  • VicoViper
  • r2d2rigo
  • cabron