Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

UniRx, ReactiveExtensions, coroutines

Iniciado por iRobb, Febrero 10, 2016, 09:04:06 PM

Tema anterior - Siguiente tema
Febrero 10, 2016, 09:04:06 PM Ultima modificación: Febrero 10, 2016, 09:06:31 PM por iRobb
Buscando soluciones para otro topic mío, me he encontrado con esto. Una gran solución para las coroutines. Básicamente, en vez de esperar en yields la respuesta de una, se le asigna que acción realizar una vez terminado el proceso (observable). Además, es multithread real y acepta valores de retorno.Pegadle un ojo!https://github.com/neuecc/UniRx 

Estoy leyendo los docs y es mucho más potente de lo que me esperaba. Es toda una filosofía!Lleva la potencia de programación en asíncrono a la enésima potencia. Eso sí, tienes que cambiar totalmente el "approach" al crear un proyecto. Por ejemplo, imaginad que tenéis que recibir un click de ratón en un gameobject que está abajo en la jerarquía. Lo normal sería crear un delegate, recogerlo en la clase de arriba, crear la función del onclick y mostrar lo que sea.En Rx (Reactive Programming) sencillamente asignamos que queremos hacer cuando se lance ese evento y podemos irlo anidando con otras acciones, que se ejecutarán en async. Hay control de errores y permite el reintento de una acción n veces. Hay mucho que leer! http://es.slideshare.net/neuecc/unirx-reactive-extensions-for-unityen 
Un ejemplo de llamada a una url: 
var rx = ObservableWWW.Get("google.com") 
    .Select(result => {
        return (result.ToString());
    })
    .OnErrorRetry((System.Exception ex) =>
        UnityEngine.Debug.LogException(ex), retryCount: 3, delay: System.TimeSpan.FromSeconds(1))
    .Subscribe(x => UnityEngine.Debug.Log("Debug: " + x));
Llamará a la url, reintentará 3 veces si hay error con una espera de 1 segundo. Si tiene éxito, lo mostrará en el debug.log de Unity el resultado.Y todo en async. Ni Coroutines, ni yields ni nada.
No me digáis que no es elegante!

Febrero 11, 2016, 07:27:19 AM #2 Ultima modificación: Febrero 11, 2016, 07:28:02 AM por Arthure
Cita de: iRobb date=1455141710" data-ipsquote="" data-cite="iRobb" class="ipsQuoteY todo en async. Ni Coroutines, ni yields ni nada. No me digáis que no es elegante!
Cuanto minimo, si que se ve algo mucho mas semejante a los threads de "toda la vida" y no como las dichosas corrutinas ... ademas de tener una estructura que se da un aire (salvando mucho las diferencias) a las funciones de detectar los eventos para los elementos de la libreria swing de Java; muchisimo mas facil de leer.Solo tengo una pequeña duda: esto es una libreria que alguien se ha sacado de la manga, o es una clase de sistema ? Porque no la habia visto nunca

Febrero 11, 2016, 10:25:18 AM #3 Ultima modificación: Febrero 11, 2016, 10:27:13 AM por iRobb
La sintaxis que ves es una adaptación de Reactive Programming que se llama UniRx, y se basan en Linq. Un detalle importante es que UniRx, que está en la store, tiene su propia versión de Linq que... funciona en iOS. Aparte de esto, la Reactive Programming está basada en el pattern Observer y forma parte de la especificación de C# para .NET 4.5! (no es que alguien se lo haya sacado de la manga). Esto va a ser grande.En Microsoft:https://msdn.microsoft.com/en-us/data/gg577609.aspx">https://msdn.microsoft.com/en-us/data/gg577609.aspxRespecto a Reactive:http://www.introtorx.com/content/v1.0.10621.0/00_Foreword.html">http://www.introtorx.com/content/v1.0.10621.0/00_Foreword.html 

Pues muchas gracias, esta bien saber que existe esa opcion ... si algun dia me da por ahi (o lo necesito), ya intentare aprenderlo. ThxP.D. Cuando preguntaba si se lo habia sacado de la manga alguien, me referia a si era una libreria que hubiera programado alguien ... que hay gente que le mola muicho esas cosas xD

Pues a ver esos likes que nos cuesta dar Saludotes!

Madre mia que pereza, pero vamos, le pegaré un ojo a ver xD

Etiquetas: