{"id":12342,"date":"2021-10-15T20:28:54","date_gmt":"2021-10-15T18:28:54","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=12342"},"modified":"2021-10-15T20:30:50","modified_gmt":"2021-10-15T18:30:50","slug":"mejorar-el-rendimiento-en-unity","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/","title":{"rendered":"Mejorar el rendimiento en Unity"},"content":{"rendered":"<p>En este art\u00edculo vamos a aprender a como mejorar el rendimiento de nuestros proyectos en Unity. Cuando nosotros estamos dise\u00f1ando un proyecto, una parte fundamental es que todo funcione correctamente y fluido, para as\u00ed disfrutar de la experiencia completa de nuestro proyecto. Vamos a repasar algunos puntos que van a mejorar el rendimiento de tus proyectos.<\/p>\n<h2>Mantenlo simple<\/h2>\n<p>Pongo esto en primer lugar, ya que deber\u00eda ser una regla general para cualquier juego que construyas. Siempre que dise\u00f1amos un juego, debemos determinar espec\u00edficamente lo que necesita y, lo que es m\u00e1s importante, lo que <strong>no necesita incluir<\/strong>.<\/p>\n<p>Al crear un proyecto, piensa teniendo en cuenta el rendimiento cuando lo dise\u00f1es por primera vez. No te limites demasiado, pero comprende que es m\u00e1s f\u00e1cil crear un juego eficaz desde el principio que intentar reestructurar las cosas para que funcionen mejor m\u00e1s adelante.<\/p>\n<h2>Usa el profiler<\/h2>\n<p>Antes de comenzar a eliminar l\u00edneas de c\u00f3digo, refinar las casas prefabricadas y tratar de que todo funcione, debes saber qu\u00e9 est\u00e1 causando realmente los problemas de rendimiento.<\/p>\n<p>Si nuestro juego tiene problemas de rendimiento, lo primero que debemos hacer es usar la ventana <strong>Profiler de Unity<\/strong> para establecer si nuestros problemas de rendimiento se deben a que la CPU no puede completar sus tareas a tiempo. <strong>Window\/Analysis\/Profiler<\/strong>.<\/p>\n<p>Deber\u00e1s mantener la ventana visible mientras juegas. Mostrar\u00e1 categor\u00edas como uso de CPU, uso de GPU, renderizado, f\u00edsica, audio y m\u00e1s. A continuaci\u00f3n, puede reducir a\u00fan m\u00e1s los detalles dentro de cada categor\u00eda.<\/p>\n<p>Una vez establecido esto, debemos determinar si los scripts de usuario son la causa del problema, o si el problema es causado por alguna otra parte de nuestro juego: f\u00edsica compleja o animaciones, por ejemplo.<\/p>\n<p>Tutorial de c\u00f3mo usar el <a href=\"https:\/\/learn.unity.com\/tutorial\/diagnosing-performance-problems\"><strong>Profiler<\/strong><\/a>.<\/p>\n<p><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\" rel=\"attachment wp-att-12380\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12380\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\" alt=\"\" width=\"1238\" height=\"649\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png 1238w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler-300x157.png 300w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler-1024x537.png 1024w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler-768x403.png 768w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler-700x367.png 700w\" sizes=\"auto, (max-width: 1238px) 100vw, 1238px\" \/><\/a><\/p>\n<p>Tambi\u00e9n podemos mirar en la pesta\u00f1a <strong>Stats<\/strong> cualquier informaci\u00f3n extra de nuestra escena.<\/p>\n<h2>Agrupamiento de Draw Calls<\/h2>\n<p>Para dibujar un objeto en la pantalla, el motor tiene que emitir un draw call (llamado de dibujo) al API de gr\u00e1ficas (OpenGL o Direct3D). Los Draw Calls a menudo son costosos, con el API de gr\u00e1ficas haciendo un trabajo significante para cada draw call, causando una sobrecarga en el rendimiento por el lado del CPU. Esto en su mayor\u00eda es causado por los cambios de estado hechos entre los draw calls (cambiando a un material diferente), que causa pasos de validaci\u00f3n costosos y de translaci\u00f3n en el driver gr\u00e1fico.<\/p>\n<p>Unity utiliza varias t\u00e9cnicas para abordar esto:<\/p>\n<ul>\n<li>Dynamic Batching: para una cantidad peque\u00f1a de meshes, transforma sus vertices en el CPU, agrupa aquellos bastantes similares, y los dibuja en una sola pasada.<\/li>\n<li>Static Batching: combina objetos est\u00e1ticos (i.e. sin movimiento) a meshes grandes, y los renderiza de una manera r\u00e1pida.<\/li>\n<\/ul>\n<p>El procesamiento por batching (lotes) integrado ofrece varios beneficios en comparaci\u00f3n con la fusi\u00f3n manual de GameObjects; lo m\u00e1s notable, los GameObjects todav\u00eda se pueden seleccionar de forma individual. Sin embargo, tambi\u00e9n tiene algunas desventajas; el procesamiento por lotes est\u00e1tico genera una sobrecarga de memoria y almacenamiento, y el dynamic batching (procesamiento de lotes din\u00e1micos) genera cierta sobrecarga de la CPU.<\/p>\n<p>Puedes encender y apagar el Dynamic and Static batching en el <strong>Player Settings\/Other Settings.<\/strong><\/p>\n<h2>Reduce y re\u00fasa texturas<\/h2>\n<p>Solamente los objetos compartiendo el mismo material pueden ser batched juntos. Por lo tanto, si queremos lograr un buen batching, necesitamos compartir el mismo material entre diferentes objetos lo m\u00e1ximo posible.<\/p>\n<p>Si tenemos dos materiales id\u00e9nticos que difieren solo en texturas, podemos combinar esas texturas a una sola gran textura, un proceso llamado texture atlasing. ( <a href=\"https:\/\/en.wikipedia.org\/wiki\/Texture_atlas\">https:\/\/en.wikipedia.org\/wiki\/Texture_atlas<\/a>). Una vez las texturas est\u00e9n en el mismo atlas, podemos utilizar un solo material.<\/p>\n<p><a href=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/textureatlas.png\" rel=\"attachment wp-att-12382\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12382\" src=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/textureatlas.png\" alt=\"\" width=\"658\" height=\"329\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/textureatlas.png 658w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/textureatlas-300x150.png 300w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/a><\/p>\n<p>Si necesitas acceder las propiedades compartidas del material desde los scripts, entonces es importante tener en cuenta que modificar Renderer.material va a crear una copia del material. En vez, debes utilizar Renderer.sharedMaterial para mantener el material compartido.<\/p>\n<h2>Optimizar los c\u00e1lculos f\u00edsicos<\/h2>\n<ul>\n<li><strong>Raycasts<\/strong><\/li>\n<\/ul>\n<p>Los Raycasts se utilizan a menudo para detectar otros objetos para diversas cosas, como comprobar la distancia, los impactos de armas, la direcci\u00f3n, el espacio libre, etc. Encuentra solo lo que necesitas cuando uses un Raycast. No use varios rayos si uno es suficiente y no los extienda m\u00e1s all\u00e1 de la longitud que necesita para viajar.<\/p>\n<p>Cuanto menos necesite detectar, mejor. Con algo como Physics.Raycast, tiene la opci\u00f3n de utilizar una <strong>LayerMask<\/strong> que le permite detectar solo objetos en una capa espec\u00edfica.<\/p>\n<ul>\n<li><strong>Colliders<\/strong><\/li>\n<\/ul>\n<p>Dentro de Unity, tenemos distintos tipos de colliders (colisiones), desde box, capsule, hasta de malla (se adapta al modelo). Para mejorar el rendimiento de nuestros proyectos es recomendable usar siempre colliders primitivos (Box, Sphere, Capsule). Los colliders de malla (Mesh Colliders) toman la forma de la malla que indiquemos.<\/p>\n<p>Esto es incre\u00edblemente caro de usar y debe evitarse si es posible. Si es absolutamente necesario, podemos crear una versi\u00f3n con pocos pol\u00edgonos para el collider.<\/p>\n<ul>\n<li><strong>RigidBody<\/strong><\/li>\n<\/ul>\n<p>Los Rigidbody, se utilizan normalmente para a\u00f1adir peso a un objeto. Si un objeto tiene un RigidBody adjunto, puede verse afectado por la f\u00edsica, como la gravedad y otras fuerzas.<\/p>\n<p>Es importante tener en cuenta que tener demasiados objetos Rigidbody dentro de su juego afectar\u00e1 negativamente al rendimiento. Reducirlos a la cantidad m\u00ednima que necesita es el primer paso. Tambi\u00e9n puedes mejorar el rendimiento de los Rigidbodies que est\u00e1 utilizando determinando cu\u00e1ndo deben dormir o kinematic.<\/p>\n<h2>Optimizar el c\u00f3digo<\/h2>\n<p>Cuando creamos nuestro juego, Unity empaqueta todo lo necesario para ejecutar nuestro juego en un programa que puede ser ejecutado por nuestro dispositivo objetivo. Las CPU solo pueden ejecutar c\u00f3digo escrito en lenguajes muy simples conocidos como c\u00f3digo m\u00e1quina o c\u00f3digo nativo; no pueden ejecutar c\u00f3digo escrito en lenguajes m\u00e1s complejos como C #. Esto significa que Unity debe traducir nuestro c\u00f3digo a otros idiomas. Este proceso de traducci\u00f3n se llama compilaci\u00f3n.<\/p>\n<p>El c\u00f3digo que a\u00fan no se ha compilado se conoce como c\u00f3digo fuente. El c\u00f3digo fuente que escribimos determina la estructura y el contenido del c\u00f3digo compilado.<\/p>\n<p>En su mayor parte, el c\u00f3digo fuente bien estructurado y eficiente dar\u00e1 como resultado un c\u00f3digo compilado bien estructurado y eficiente. Sin embargo, es \u00fatil para nosotros saber un poco sobre el c\u00f3digo nativo para que podamos entender mejor por qu\u00e9 algunos c\u00f3digos fuente se compilan en un c\u00f3digo nativo m\u00e1s eficiente.<\/p>\n<p>En primer lugar, algunas instrucciones de la CPU tardan m\u00e1s en ejecutarse que otras. Un ejemplo de esto es calcular una ra\u00edz cuadrada. Este c\u00e1lculo requiere m\u00e1s tiempo para que la CPU se ejecute que, por ejemplo, multiplicar dos n\u00fameros. La diferencia entre una sola instrucci\u00f3n de CPU r\u00e1pida y una sola instrucci\u00f3n de CPU lenta es muy peque\u00f1a, pero es \u00fatil para nosotros entender que, fundamentalmente, algunas instrucciones son simplemente m\u00e1s r\u00e1pidas que otras.<\/p>\n<h2>Saque el c\u00f3digo de los bucles cuando sea posible<\/h2>\n<p>Los bucles son un lugar com\u00fan para que se produzcan ineficiencias, especialmente cuando est\u00e1n anidados. Las ineficiencias pueden sumarse si est\u00e1n en un bucle que se ejecuta con mucha frecuencia, especialmente si este c\u00f3digo se encuentra en muchos GameObjects de nuestro juego.<\/p>\n<p>En el siguiente ejemplo simple, nuestro c\u00f3digo itera a trav\u00e9s del ciclo cada vez que se llama a Update() , independientemente de si se cumple la condici\u00f3n.<\/p>\n<pre>void Update()\r\n{\r\n    for (int i = 0; i &lt; myArray.Length; i++)\r\n    {\r\n        if (ejemploBool)\r\n        {\r\n            EjemploFuncion(myArray[i]);\r\n        }\r\n    }\r\n}<\/pre>\n<p>Podemos mejorar el c\u00f3digo, itera a trav\u00e9s del ciclo solo si se cumple la condici\u00f3n.<\/p>\n<pre>void Update()\r\n{\r\n    if (ejemploBool)\r\n    {\r\n        for (int i = 0; i &lt; myArray.Length; i++)\r\n        {\r\n            EjemploFuncion(myArray[i]);\r\n        }\r\n    }\r\n}<\/pre>\n<p>Este es un ejemplo simplificado, pero ilustra un ahorro real que podemos hacer. Deber\u00edamos examinar nuestro c\u00f3digo en busca de lugares en los que hemos estructurado mal nuestros bucles.<\/p>\n<h2>Considere si el c\u00f3digo debe ejecutar cada fotograma<\/h2>\n<p>Update () es una funci\u00f3n que Unity ejecuta una vez por fotograma. Update () es un lugar conveniente para colocar el c\u00f3digo que debe llamarse con frecuencia o el c\u00f3digo que debe responder a cambios frecuentes. Sin embargo, no es necesario que todo este c\u00f3digo ejecute todos los fotogramas. Sacar el c\u00f3digo de Update () para que se ejecute solo cuando sea necesario puede ser una buena forma de mejorar el rendimiento.<\/p>\n<h2>Ejecute c\u00f3digo solo cuando las cosas cambien<\/h2>\n<p>Veamos un ejemplo muy simple de optimizaci\u00f3n de c\u00f3digo para que solo se ejecute cuando las cosas cambien. En el siguiente c\u00f3digo, Ense\u00f1arScore () se llama en Update () . Sin embargo, es posible que el valor de la puntuaci\u00f3n no cambie con cada fotograma. Esto significa que estamos llamando innecesariamente a Ense\u00f1arScore () .<\/p>\n<pre>private int score;\r\npublic void SubirScore(int scoreExtra)\r\n{\r\n    score += scoreExtra;\r\n}\r\nvoid Update()\r\n{\r\n    Ense\u00f1arScore(score);\r\n}<\/pre>\n<p>Con un simple cambio, ahora nos aseguramos de que Ense\u00f1arScore () se llame solo cuando el valor de la puntuaci\u00f3n haya cambiado.<\/p>\n<pre>private int score;\r\npublic void SubirScore(int scoreExtra)\r\n{\r\n    score += scoreExtra;\r\n    Ense\u00f1arScore(score);\r\n}\r\n\r\n<\/pre>\n<h2>Usar almacenamiento en cach\u00e9<\/h2>\n<p>Si nuestro c\u00f3digo llama repetidamente a funciones costosas que devuelven un resultado y luego descarta esos resultados, esta puede ser una oportunidad para la optimizaci\u00f3n. El almacenamiento y la reutilizaci\u00f3n de referencias a estos resultados puede resultar m\u00e1s eficaz. Esta t\u00e9cnica se conoce como almacenamiento en cach\u00e9 .<\/p>\n<p>En Unity, es com\u00fan llamar a GetComponent () para acceder a los componentes. En el siguiente ejemplo, llamamos a GetComponent () en Update () para acceder a un componente de Renderer antes de pasarlo a otra funci\u00f3n. Este c\u00f3digo funciona, pero es ineficaz debido a la llamada repetida a GetComponent () .<\/p>\n<pre>void Update()\r\n{\r\n  \u00a0 Renderer myRenderer = GetComponent&lt;Renderer&gt;();\r\n  \u00a0 ExampleFunction(myRenderer);\r\n}<\/pre>\n<p>El siguiente c\u00f3digo llama a GetComponent () solo una vez, ya que el resultado de la funci\u00f3n se almacena en cach\u00e9. El resultado almacenado en cach\u00e9 se puede reutilizar en Update () sin m\u00e1s llamadas a GetComponent () .<\/p>\n<pre>private Renderer myRenderer;\r\nvoid Start()\r\n{\r\n    myRenderer = GetComponent&lt;Renderer&gt;();\r\n}\r\nvoid Update()\r\n{\r\n    ExampleFunction(myRenderer);\r\n}<\/pre>\n<p>Deber\u00edamos examinar nuestro c\u00f3digo en busca de casos en los que hacemos llamadas frecuentes a funciones que devuelven un resultado. Es posible que podamos reducir el costo de estas llamadas utilizando el almacenamiento en cach\u00e9.<\/p>\n<h2>Usar Object Pooling<\/h2>\n<p>Por lo general, es m\u00e1s costoso crear una instancia y destruir un objeto que desactivarlo y reactivarlo. Esto es especialmente cierto si el objeto contiene c\u00f3digo de inicio, como llamadas a GetComponent () en una funci\u00f3n Awake () o Start (). Si necesitamos generar y deshacernos de muchas copias del mismo objeto, como balas en un juego de disparos, entonces podemos beneficiarnos de la <strong>Object Pooling .<\/strong><\/p>\n<p><strong>El object Pooling<\/strong> es una t\u00e9cnica en la que, en lugar de crear y destruir instancias de un objeto, los objetos se desactivan temporalmente y luego se reciclan y reactivan seg\u00fan sea necesario. Aunque es una t\u00e9cnica muy conocida para administrar el uso de la memoria, <strong>object pooling<\/strong> tambi\u00e9n puede ser \u00fatil como t\u00e9cnica para reducir el uso excesivo de la CPU.<\/p>\n<h2>Evitar llamadas costosas:<\/h2>\n<ul>\n<li><strong>SendMessage () y BroadcastMessage () <\/strong>son funciones muy flexibles que requieren poco conocimiento, estas funciones son muy \u00fatiles para la creaci\u00f3n de prototipos o para la creaci\u00f3n de scripts de nivel principiante. Sin embargo, su uso es extremadamente caro. Esto se debe a que estas funciones hacen uso de la reflexi\u00f3n. Reflexi\u00f3n es el t\u00e9rmino para cuando el c\u00f3digo examina y toma decisiones sobre s\u00ed mismo en tiempo de ejecuci\u00f3n en lugar de en tiempo de compilaci\u00f3n. El c\u00f3digo que usa la reflexi\u00f3n da como resultado mucho m\u00e1s trabajo para la CPU que el c\u00f3digo que no usa la reflexi\u00f3n.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Find()<\/strong> y las funciones relacionadas son potentes pero caras. Estas funciones requieren que Unity itere sobre cada GameObject y Component en la memoria. Esto significa que no son particularmente exigentes en proyectos peque\u00f1os y simples, pero su uso se vuelve m\u00e1s costoso a medida que aumenta la complejidad de un proyecto. Es mejor usar Find () y funciones similares con poca frecuencia y almacenar en cach\u00e9 los resultados cuando sea posible. Algunas t\u00e9cnicas simples que pueden ayudarnos a reducir el uso de Find () en nuestro c\u00f3digo incluyen establecer referencias a objetos <strong>usando el panel Inspector<\/strong> cuando sea posible, o crear scripts que administren referencias a cosas que se buscan com\u00fanmente. Si necesita buscar un objeto de esta manera, podr\u00eda ser mejor usar <strong>FindWithTag (\u00abMyTag\u00bb)<\/strong> o <strong>FindObjectOfType&lt;&gt;<\/strong> .<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>Transform: <\/strong>Establecer la posici\u00f3n o rotaci\u00f3n de una transformaci\u00f3n hace que un evento interno OnTransformChanged se propague a todos los hijos de esa transformaci\u00f3n. Esto significa que es relativamente caro establecer los valores de rotaci\u00f3n y posici\u00f3n de una transformaci\u00f3n, especialmente en transformaciones que tienen muchos hijos. Para limitar el n\u00famero de estos eventos internos, debemos evitar establecer el valor de estas propiedades con m\u00e1s frecuencia de la necesaria. En este ejemplo, deber\u00edamos considerar copiar la posici\u00f3n de la transformaci\u00f3n en un Vector3, realizar los c\u00e1lculos necesarios en ese Vector3 y luego establecer la posici\u00f3n de la transformaci\u00f3n en el valor de ese Vector3. Esto dar\u00eda como resultado un solo evento OnTransformChanged. position es un ejemplo de un descriptor de acceso que da como resultado un c\u00e1lculo entre bastidores. Esto se puede contrastar con Transform.localPosition . El valor de localPosition se almacena en la transformaci\u00f3n y la llamada a Transform.localPosition simplemente devuelve este valor. Sin embargo, la posici\u00f3n mundial de la transformaci\u00f3n se calcula cada vez que llamamos a Transform.position. Si nuestro c\u00f3digo hace un uso frecuente de Transform.position y podemos usar Transform.localPosition en su lugar, esto dar\u00e1 como resultado menos instrucciones de CPU y, en \u00faltima instancia, puede beneficiar el rendimiento. Si hacemos un uso frecuente de Transform.position, deber\u00edamos almacenarlo en cach\u00e9 siempre que sea posible.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li><strong>LateUpdate () , Update () <\/strong>y otras funciones de eventos parecen funciones simples, pero tienen una sobrecarga oculta. Estas funciones requieren la comunicaci\u00f3n entre el c\u00f3digo del motor y el c\u00f3digo administrado cada vez que se llaman. Adem\u00e1s de esto, Unity lleva a cabo una serie de comprobaciones de seguridad antes de llamar a estas funciones. Las comprobaciones de seguridad garantizan que el GameObject est\u00e9 en un estado v\u00e1lido, que no se haya destruido, etc. Esta sobrecarga no es particularmente grande para una sola llamada, pero puede sumarse en un juego que tiene miles de MonoBehaviours. Por esta raz\u00f3n, las llamadas vac\u00edas a Update () pueden ser un desperdicio particular.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Estos son algunos consejos que os mejoraran el rendimiento en Unity, para ver toda la informaci\u00f3n que da Unity pulse <a href=\"https:\/\/learn.unity.com\/tutorial\/fixing-performance-problems-2019-3#\">aqu\u00ed<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos. Entra para subir el nivel desarrollando de videojuegos.<\/p>\n","protected":false},"author":37,"featured_media":12380,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[379,5],"tags":[528,89,213,798,37,322],"class_list":["post-12342","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-productividad","category-programacion","tag-escola-espai","tag-programacion-2","tag-render","tag-rendimiento","tag-tutorial","tag-unity"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mejorar el rendimiento en Unity - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mejorar el rendimiento en Unity - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-15T18:28:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-15T18:30:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1238\" \/>\n\t<meta property=\"og:image:height\" content=\"649\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"David Roca\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Roca\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\"},\"author\":{\"name\":\"David Roca\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\"},\"headline\":\"Mejorar el rendimiento en Unity\",\"datePublished\":\"2021-10-15T18:28:54+00:00\",\"dateModified\":\"2021-10-15T18:30:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\"},\"wordCount\":2460,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\",\"keywords\":[\"Escola Espai\",\"programaci\u00f3n\",\"Render\",\"rendimiento\",\"tutorial\",\"unity\"],\"articleSection\":[\"Productividad\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\",\"name\":\"Mejorar el rendimiento en Unity - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\",\"datePublished\":\"2021-10-15T18:28:54+00:00\",\"dateModified\":\"2021-10-15T18:30:50+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\"},\"description\":\"Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png\",\"width\":1238,\"height\":649},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mejorar el rendimiento en Unity\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a\",\"name\":\"David Roca\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g\",\"caption\":\"David Roca\"},\"description\":\"\u00a1Muy buenas a todos! Mi nombre es David, soy T\u00e9cnico en Animaci\u00f3n 3D, desarrollo de videojuegos y entornos interactivos. En mi carrera, me he especializado en la Realidad Aumentada, Realidad Virtual y la programaci\u00f3n en C#. Siempre me he decantado por la rama de programaci\u00f3n, y me he familiarizado por cuenta propia con distintos lenguajes de programaci\u00f3n. Mi hobby siempre ha sido analizar cada uno de los videojuegos que he tenido la ocasi\u00f3n de probar, y pensar en c\u00f3mo est\u00e1n hechos y programados. Desde que acab\u00e9 mis estudios he permanecido en el sector de la educaci\u00f3n, trabajando como profesor de programaci\u00f3n y como profesor de tiempo libre. Una de mis motivaciones, es la de poder transmitir esa energ\u00eda y esa ilusi\u00f3n por la programaci\u00f3n a los alumnos. Actualmente, estoy compaginando mi trabajo como profesor del \u00e1rea de programaci\u00f3n en la Escuela Espai, con un Grado Universitario de multimedia.\",\"url\":\"https:\/\/www.espai.es\/blog\/author\/davidroca\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mejorar el rendimiento en Unity - Blog Escola Espai","description":"Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/","og_locale":"es_ES","og_type":"article","og_title":"Mejorar el rendimiento en Unity - Blog Escola Espai","og_description":"Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos.","og_url":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/","og_site_name":"Blog Escola Espai","article_published_time":"2021-10-15T18:28:54+00:00","article_modified_time":"2021-10-15T18:30:50+00:00","og_image":[{"width":1238,"height":649,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png","type":"image\/png"}],"author":"David Roca","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"David Roca","Tiempo de lectura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/"},"author":{"name":"David Roca","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a"},"headline":"Mejorar el rendimiento en Unity","datePublished":"2021-10-15T18:28:54+00:00","dateModified":"2021-10-15T18:30:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/"},"wordCount":2460,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png","keywords":["Escola Espai","programaci\u00f3n","Render","rendimiento","tutorial","unity"],"articleSection":["Productividad","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/","url":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/","name":"Mejorar el rendimiento en Unity - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png","datePublished":"2021-10-15T18:28:54+00:00","dateModified":"2021-10-15T18:30:50+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a"},"description":"Art\u00edculo para mejorar el rendimiento de tus proyectos en Unity. Optimizando el c\u00f3digo, los c\u00e1lculos f\u00edsicos y los modelos.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png","width":1238,"height":649},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2021\/10\/mejorar-el-rendimiento-en-unity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"Mejorar el rendimiento en Unity"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/868ce068b4c6412eb54c2d7943697a2a","name":"David Roca","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ffeeeb048688da23ed965545d7821176228acaac77f93c2234007020c27cfd4e?s=96&d=mm&r=g","caption":"David Roca"},"description":"\u00a1Muy buenas a todos! Mi nombre es David, soy T\u00e9cnico en Animaci\u00f3n 3D, desarrollo de videojuegos y entornos interactivos. En mi carrera, me he especializado en la Realidad Aumentada, Realidad Virtual y la programaci\u00f3n en C#. Siempre me he decantado por la rama de programaci\u00f3n, y me he familiarizado por cuenta propia con distintos lenguajes de programaci\u00f3n. Mi hobby siempre ha sido analizar cada uno de los videojuegos que he tenido la ocasi\u00f3n de probar, y pensar en c\u00f3mo est\u00e1n hechos y programados. Desde que acab\u00e9 mis estudios he permanecido en el sector de la educaci\u00f3n, trabajando como profesor de programaci\u00f3n y como profesor de tiempo libre. Una de mis motivaciones, es la de poder transmitir esa energ\u00eda y esa ilusi\u00f3n por la programaci\u00f3n a los alumnos. Actualmente, estoy compaginando mi trabajo como profesor del \u00e1rea de programaci\u00f3n en la Escuela Espai, con un Grado Universitario de multimedia.","url":"https:\/\/www.espai.es\/blog\/author\/davidroca\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/Profiler.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/12342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/37"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=12342"}],"version-history":[{"count":25,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/12342\/revisions"}],"predecessor-version":[{"id":12462,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/12342\/revisions\/12462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/12380"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=12342"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=12342"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=12342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}