Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - iRobb

#1
Recursos / No odiais el Invoke?
Marzo 29, 2020, 11:06:50 PM
Pues una manera de solventarlo muy elegante. Usando una extensión en MonoBehaviour y cambiándolo por una coroutine y delegate:
 
https://wp.flyingshapes.com/dont-use-monobehaviour-invoke-or-how-to-properly-invoke-a-method/
#2
Proyectos / FPS HH alpha01
Marzo 29, 2020, 09:33:13 AM
Desarrollo en Unity 2019.3. Una primera aproximación a un FPS sin prácticamente optimización más allá de los lightmaps del entorno. Es posible utilizar diferentes FX dependiendo del material de contacto. He utilizado algunos assets de pago y otros gratuitos en los apartados de diseño solamente. El código y la integración es mío desde cero.
 
 
 


   
eature=oembed">

 
 
#3
Scripting / Optimización de scripting en Unity
Marzo 06, 2020, 09:31:45 PM
Estoy leyendo el libro "Unity Game Optimization" que está en Packt y la tercera edición es de noviembre de 2019. He hecho un resumen de los apartados dedicados a scripting que me parecen muy buenos. Algunos los conoceréis, otros no y otros es posible que no supiérais porqué utilizar una manera u otra. En todos los casos el concepto de optimización ve sus frutos cuando es un desarrollo de cierto tamaño. Desde mi punto de vista, si empiezas con buenos hábitos, luego no tendrás los mismos problemas de rendimiento que el resto de desarrolladores. La optimización se debe realizar desde el día 1. Paso a relatar.
 
Optimización 1

Eliminar las callbacks vacías de Start() y Update() al crear un script si no son necesarias. El tenerlas afectará a la inicialización de la scene y al instanciar prefabs. La de OnGUI() es especialmente problemática ya que puede llamarse más de una vez por frame. En la de Update() se realiza un Native-Managed Bridge, o sea, hay que enlazar el modo managed de C# con el del código nativo dependiente de plataforma. En general no dejar nunca una callback vacía. 
 
Optimización 2

Cómo obtener los componentes de un GameObject. Hay tres maneras de hacerlo, aunque a la práctica se utilizan dos de ellas. Los datos hablan por si mismos para 30.000 objetos.
 

// 6413 ms
test = (TestComponent)GetComponent("TestComponent");
// 89 ms
test = GetComponent<TestComponent>();
// 95 ms
test = (TestComponent)GetComponent(typeof(TestComponent));

 
El mejor es del uso del template o tipo genérico. Como en C++ ;)
 
Optimización 3

Cachear los GetComponent, preferiblemente en el Awake. Esto es realmente crítico si se realiza en el Update. Al final obtendremos un mejor rendimiento a cambio de un coste de memoria mínimo (entre 32 ó 64 bytes por item dependiendo de la plataforma).
 
Optimización 4

El uso de funciones dentro de Update. Si las acciones no requieren se llamadas en cada frame es mucho mejor convertirlo a un InvokeRepeating que puede llamarse en el Start y cancelarse en el OnDestroy:
 

private void Start() {  
InvokeRepeating("ProcessAI", 0f, _aiProcessDelay);
}

 
Optimización 5

La comparación de objetos null. La llamada directa de "gameobject == null" genera una conversión Native-Managed Bridge con la consiguiente sobrecarga. Es mucho mejor utilizar el ReferenceEquals que no utiliza la conversión. Por eso se incluyó en Unity:
 

if (!System.Object.ReferenceEquals(gameObject, null)) {
  // No es null
}

 
Optimización 6

La comprobación con Tag directa genera memoria adicional y hará actuar al GC posteriormente. Utilizar el CompareTag no utiliza memoria ya que evita el Native-Managed Bridge completamente y tarda la mitad de tiempo:
 

// Asignación de memoria y GC. Tarda el doble de tiempo
if (gameObject.tag == "Player") {
  // realizar acción
}
// Evita el Native-Managed Bridge totalmente. No asigna memoria adicional
if (gameObject.CompareTag ("Player")) {
  // realizar acción
}

 
Optimización 7

Dictionary vs List. Las List son mejores para iteraciones. Los Dictionary son mejores para búsquedas aleatorias. El Dictionary es peor para las iteraciones debido a que debe realizar una comparación hash para cada uno de los elementos. De todos modos tener los dos tipos en algunas situaciones no es mala idea.
 
Optimización 8

La Transform. Cuando instanciamos un nuevo GameObject con GameObject.Instantiate(), uno de sus argumentos es el componente de la Transform del parent que queremos asignar, que por defecto es null y colocará el GameObject en el root. Todas las Transforms que está a nivel root necesitar crear un buffer de memoria para poder almacenar los children que tienen más aquellos que vendrán después. Esto no ocurre con las Transforms que son child. Pero si una Transform en root le cambiamos el parent una vez creada y la reasignamos, se procederá a descartar el buffer de memoria que iniciamos en el Instantiate. Para evitar esto es mejor proveer del parent en la función.
 
Otro apartado interesante es que, hay una propiedad en la Transform llamada hierarchyCapacity. Si somos capaces de estimar el número de Transform child de este objeto root, podremos reducir el número de asignaciones de memoria.
 
Optimización 9

World Position, World Rotation, World Scale. Cuánto más profundo esté en la jerarquía un objeto mayores cálculos son necesarios para determinar el resultado final de su estado. Esto significa que es mucho más eficiente utilizar los elementos de Local que de World.
 
Optimización 10

Cambios en la Transform. Si es posible, agrupar todos los cambios en una Transform y no realizarlos hasta el final de todos los cálculos y en FixedUpdate. Esto evitará movimientos extraños o teleportaciones de los objetos debido a que Unity lanza eventos internos cada vez que una Transform es modificada.
 

private bool _positionChanged;
private Vector3 _newPosition;
public void SetPosition(Vector3 position) {
     _newPosition = position;  
_positionChanged = true;
}
private void FixedUpdate() {  
if (_positionChanged) {    
   transform.position = _newPosition;    
   _positionChanged = false;  
}
}

 
Optimización 11

SendMessage y Find.

El método SendMessage() y la familia de métodos GameObject.Find() so especialmente costosos y deben evitarse en su totalidad. El método SendMessage() es como 2,000 veces más lento que una simple llamada a una función, y el coste de Find() se escala pobremente según la complejidad de la scene aumente ya que tiene que iterar por todos los GameObject de la misma.
 
Optimización 12

No solamente Occlusion Culling/Frustum Culling. Para los objetos que solamente tienen renderizado es factible utilizarlas únicamente. Otros objetos que utilicen cálculos internos de manera constante continuarán consumiendo a pesar del Culling.
 
Una buena solución a este problema es utilizar las callbacks OnBecameVisible() y OnBecameInvisible(). Como los nombres dicen, estas callbacks son invocadas cuando un objeto renderizado se ha vuelto visible a una cámara o invisible respecto a todas las cámaras de la scene. Además, cuando hay múltiples cámara en la scene (por ejemplo en un juego multiplayer) las callbacks son solamente invocadas cuando es visible para una cámara o invisible para todas ellas de igual modo. Esto significa que las callback serán llamadas en el momento preciso que se necesitan. Si nadie puede ver el objeto se llamará a OnBecameInvisible(), si como mínimo un player puede verlo se llamará a OnBecameVisible(). 
 
Optimización 13

Distance vs sqrMagnitude. El cálculo de raíces cuadradas para las CPU implica bastante proceso comparado con otras instrucciones. Cuando tengamos que utilizar un cálculo de distancia, y si no requerimos de una precisión extrema, es mejor utilizar sqrMagnitude y valor a comparar por su potencia de 2.
 

// Utilizar la raíz cuadrada en Distance()
float distance = (transform.position – other.transform.position).Distance();
if (distance < targetDistance) {
  // dentro de distancia
}
// No realiza el proceso anterior
float distanceSqrd = (transform.position – other.transform.position).sqrMagnitude;
if (distanceSqrd < (targetDistance * targetDistance)) {  
  // dentro de distancia
}

 
Optimización 14

Datos de Prefab a un Scriptable Object.

Si tenemos muchos diferentes tipos de Prefabs que contienen datos que pueden compartirse entre ellos, como fuerza, velocidad, puntos, etc. entonces todos estos datos serán serializados en cada Prefab que luego se instancie. Una mejor solución es serializar estos datos en un ScriptableObject. Esto reduce la cantidad de datos a serializar en el Prefab, el tiempo de deserialización y el tamaño del Prefab en sí mismo reduciendo el tiempo de acciones que serán repetitivas.
 
Optimización 15

Update().

Una mejor solución al problema del Update() es no utilizar nunca, o mejor dicho, una sola vez. Cuando Unity llama al callback Update(), o cualquiera relacionado, cruza la ya comentada frontera del Native-Managed Bridge que es una tarea costosa en términos relativos. En otras palabras, el coste de procesamiento de 1.000 Update() independiente será mucho más costoso que la ejecución de un Update() con 1.000 funciones. Para poder minimizar este problema es mejor agrupar todos los Update() en un solo Update() global que luego llame a las diferentes funciones que requieran la acción.

 
#4
Scripting / 3 objetos random
Febrero 10, 2020, 11:33:22 PM
Tengo que colocar tres objetos en tres casillas (0, 1, 2) y quiero que siempre sea random. ¿Cual sería la mejor manera óptima por código? Yo ya tengo una idea. A ver que proponéis.
#5
Arte / Imágenes ARCore
Febrero 04, 2020, 10:21:08 PM
Hola a todos
 
No está costando horrores crear imágenes dibujadas que sean reconocidas por el ARCore. Las compruebo con el arcoreimage que lleva el SDK dentro y para llegar a un 100% solamente me funciona  metiéndole un QR que ocupe el 40% del espacio, cosa que lo hace horrible. He googleado mil y no encuentro un patrón claro a seguir, más allá de contrastes, tamaños, etc.
 
Necesitamos dibujar unas letras para ser reconocidas (A, B, C) por separado nada más. Así de chorra. Alguien con experiencia en el tema?
 
Saludos!
 
 
#6
Otras Especialidades / Aviso: Unity & Vuforia
Enero 23, 2020, 11:42:34 AM
Hola
 
Os informo de que Vuforia se está poniendo las pilas con las licencias. Si publicáis un app que les llama la atención, no podréis usar la licencia de developer y os pedirán que paguéis por la licencia. El problema es, si habéis publicado con la de developer, no podréis comprar la standard sino la Pro que vale una pasta al año.
 
Os recomiendo que si empezáis un proyecto de AR, os miréis y lo hagáis con el ARFoundation de Unity.
 
Saludos
 
 
#7
Proyectos / New Ghosts on the Block
Octubre 24, 2019, 12:14:22 PM


   
eature=oembed">

 
Un mini juego para Halloween para probar el AR Foundations de Unity 2019.2. La publicaré en breve. Espero os guste.
#8
Proyectos / Guía turística para un Ayuntamiento
Septiembre 25, 2019, 12:24:36 PM
Os presento una guía turística que hemos realizado para un Ayuntamiento. Incluye localización en mapa por GPS y puntos de interés o POIS. Los POIS contienen imágenes 360, audio localizado, realidad aumentada y modelos 3D. En Google Play y App Store.
 


   
eature=oembed">

 


   
eature=oembed">

 
Saludos!
#9
Proyectos / Proyecto VR para un Ayuntamiento
Agosto 25, 2019, 08:14:57 PM
Para VR Cardboard. Se publicará en Android/iOS en Septiembre de 2019. 
 
 
 
https://www.youtube.com/watch?v=BVv9WwLauZI
 
https://www.youtube.com/watch?v=aUI9X622Yzw
 
 
 
El audio tiene algunos lapsus. Luego vendrá la versión editada de promo. Es más enseñar el proyecto a nivel de Unity.
 
Saludos
#10
Arte / Problemas de baking
Agosto 09, 2019, 04:03:30 PM
Hola!
 
Tengo un proyecto en Unity 2018.4.5f1, modo VR y el LWRP. Toda la iluminación es por baking por motivos obvios de rendimiento. Lo que me sorprende es que un simple cubo no se visualiza correctamente apareciendo artefactos sobre él. Pongo el ejemplo del cubo ya que el resto de meshes están igual o peor que el cubo. Tengo una directional en baked, la GI es solo color casi blanco.
 
Adjunto imágenes:
 

 
Se pueden ver unas bandas horizontales.
 

 
He subido los valores de lightmap a valores absurdos intentando reducir o eliminar el problema y nada de nada.
 
A ver si hay algún experto en 3d que me pueda echar una mano.
 
Gracias y saludos!
#11
Hola, buenos días
 
Somos una pequeña empresa que realizamos apps en Unity/C# para el sector turístico. Requerimos de un freelance que tenga experiencia en la migración a iOS de un app, y para los dos próximos meses 2 apps más. Para ello debe tener las herramientas necesarias. Es un proyecto cerrado en presupuesto u horas con un cierto nivel de flexibilidad. Se puede realizar remotamente.
 
Contactad conmigo, Robert Casas, a través de mensaje privado.
 
Un saludo a todos
 
 
#12
General (Antiguo) / TextMesh Pro Gratuito!
Marzo 22, 2017, 11:26:47 AM
Parece ser que Unity ha comprado el asset y lo ha puesto gratuito para todos. La diferencia entre el de pago y este es sencillamente que viene empaquetado en una dll el código fuente, sin embargo la funcionalidad es exactamente la misma.
 
https://www.assetstore.unity3d.com/en/#!/content/84126
 
Saludos
#13
General (Antiguo) / No hay UI Mask en Cardboard build
Diciembre 29, 2016, 12:02:51 PM
Hola!
 
Estoy con la technical preview (5.4.2 GVR13) y al utilizar el UI Mask para realizar un scrollview resulta que en el editor funciona y en el dispositivo móvil no. Es lo único que llevo hasta ahora que no funciona igual. Alguien se ha encontrado con lo mismo?
#14


   

      Saludos a todos, os presento un proyecto que combina una App de Unity con un espectáculo de magia.
   

   

       
   

   

      

   

      

            

                  

                        

                              

                                    

                                          

                                                

                                                      

                                                            

                                                                  

                                                                        

                                                                              


                                                                                 ¡Vive el Aeropuerto de Castellón y disfruta de la magia de Yunke!
                                                                              


                                                                              


                                                                                 El 9 de diciembre por la tarde tienes una cita en la plaza Mayor de Castellón con la tecnología 360º
                                                                              


                                                                              
                                                                                 Acércate el viernes 9 de diciembre de 2016, de 17.30 a 21h, a la plaza Mayor de Castellón y descubre el Aeropuerto de Castellón y algunos de los rincones más emblemáticos de la ciudad con la app Amazing City: Play in Castellón y la tecnología de realidad virtual en 360º.  


                                                                                 El evento contará con la participación del Mago Yunke


                                                                                 Ven a disfrutar de la magia de Yunke y participa con tu móvil en el truco que ofrecerá durante el evento del 9 de diciembre por la tarde en la plaza Mayor de Castellón. 

                                                                                  

                                                                                 - Descárgate "Amazing City Castellón" de Google Play.

                                                                                 - En la pantalla inicial haz click en el botón "Evento Truco".

                                                                                 - Descárgate "Evento Truco" de Google Play.

                                                                                 - Ejecuta la app. Un contador de tiempo te mostrará cuándo empezará la magia.

                                                                                 - No pierdas de vista la cuenta atrás y ¡diviértete con Yunke!
                                                                              
                                                                              
                                                                                 ¿Todavía no te las has instalado? https://www.google.com/url?hl=es&q=http://amazingcity.us9.list-manage.com/track/click?u%3D605b85fafbeadb8caf07a572a%26id%3Dcac31d5aa6%26e%3Dc26387045e&source=gmail&ust=1481122566200000&usg=AFQjCNFdx7mNivyGkSjAU48OUK_w1y3EVw" href="http://amazingcity.us9.list-manage.com/track/click?u=605b85fafbeadb8caf07a572a&id=cac31d5aa6&e=c26387045e" target="_blank" rel="external nofollow">Bájatela en Android o en https://www.google.com/url?hl=es&q=http://amazingcity.us9.list-manage1.com/track/click?u%3D605b85fafbeadb8caf07a572a%26id%3D8a10c069d3%26e%3Dc26387045e&source=gmail&ust=1481122566200000&usg=AFQjCNFmp5sSjUsCl73hbHIEclUu70fj9Q" href="http://amazingcity.us9.list-manage1.com/track/click?u=605b85fafbeadb8caf07a572a&id=8a10c069d3&e=c26387045e" target="_blank" rel="external nofollow">Apple y ¡empieza a jugar!
                                                                              
                                                                              
                                                                                 
                                                                           








[/quote]


   

      

         

             
         

      
   

[/quote]
#15
General (Antiguo) / Servidor MMO
Octubre 07, 2016, 01:18:01 PM
Para los que quieran montarse su propio mmo con su servidor, he encontrado ésto:
 
http://m***undation.com/
 
No lo he probado pero tiene de todo para empezar.
 
Saludos
#16
General (Antiguo) / Alerta! ESET NOD32 Agosto 2016
Agosto 30, 2016, 02:05:28 PM
Hola!
 
Si alguien tiene el ESET NOD32 cuidado con la actualización de Agosto 2016 que jode, en mi caso el Windows 10, dejándolo sin poder volver a iniciarlo. 2 días me ha costado la bromita.
 
En la web explican que hay que desinstalarlo y volver a instalarlo desde el instalador de la web. Si a alguien le ha pasado, le explico como recuperar el sistema otra vez si no puede rebotar, ya que deja el disco de boot irreconocible para Windows.
 
Saludos
 
 
#17
General (Antiguo) / Amazon AWS Cognito
Agosto 10, 2016, 07:23:56 PM
Hola!
 
Alguien que tenga conocimientos con la integración del AWS en Unity? Estoy intentando realizar el login a través de FB, luego añadirlo a Cognito y no hay manera. Solo no autenticado, pero nada a través del token de FB.
 
Si alguien los tiene, pongo el código y más detalle.
 
Desesperado me tienen.
 
Saludos
 
 
#18
General (Antiguo) / Integración en Cloud
Julio 27, 2016, 01:51:44 PM
Hola a todos!
 
Donde trabajo ahora, voy a integrar en los próximos días con servicios en cloud. Vamos a dar el salto a plataformas más serias que php + mysql.
 
Entre las propuestas actuales destacan Microsoft Azure y Amazon Web Services. Queremos integrar autenticación openID, bbdd no sql, soporte de archivos multimedia, streaming, notificaciones push. Estos dos proveedores lo soportan perfectamente y las preguntas son:
 
- Conocéis algún otro tipo de proveedor con estas características?
 
- Si alguien ha integrado con alguno de ellos, cual ha sido su experiencia?
 
Muchas gracias por vuestra colaboración
 
 
#19
General (Antiguo) / El éxito del verano
Junio 15, 2016, 10:40:16 AM
Que no os pase na!
 
Jajajajajaja
 
 
 
PD: Muévelo a humor @pioj que me he equivocado!
 
 
 


   
eature=oembed" width="480">

 
 
#20
General (Antiguo) / Canción
Junio 11, 2016, 10:23:52 PM
Hola, hola
 
Apartado nuevo para vosotros, pero ya con algún tiempo para mí. La música siempre ha sido algo inherente a mí. Hice una canción digitalmente con samples, etc. hace bastantes años. Por lo que he visto del archivo pues 2005. Fue un homenaje a Jan Hammer. Los que no sepáis quién es no vale la pena que la escuchéis, sin embargo quién lo conozcáis os ruego que lo hagáis. Allá va.
 
He subido la versión mp3. Evidentemente tengo otra sin compresión o baja (wav, flac).
 
Por favor, comentarios :D
 
 
 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=9656">Liquid Paint.mp3