Noticias

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

la clase WWW soporta arrays?

Iniciado por castelock, Enero 07, 2016, 05:01:52 PM

Tema anterior - Siguiente tema
Hola,Estoy haciendo un proyecto en el cual dispongo de un servidor con una base de datos mysql y tengo algunos scripts php para realizar operaciones en ella. Utilizo la clase WWW para acceder a los datos de la BD y lo que quería saber es si puedo trabajar con arrays porque quiero devolver una serie de nombres para mostrarlos en mi GUI de Unity pero no he visto la manera de hacerlo.Gracias!!!!Un saludo.

teniendo en cuenta que no tengo experiencia con la clase www de Unity y no he hecho mas busqueda que tu (es decir ninguna busqueda al respecto), me atrevo a asegurar que si. hoy en dia todos los lenguajes de red permiten trabajar con "arrays" aunque no son arrays al estilo de los que utilizas en programacion desde unity ... mas bien son conjuntos de datos que despues tendras que hacerles un tratamiento para poderlos añadir a un array, lo mas comun es que sean datos en json.

Tienes un error de concepto en la arquitectura. Tendrías que acceder a los datos vía web services rest (como los que proporciona JSON, SOAP ya no se utiliza prácticamente), serializar y devolver un array embebido con el resultado de la bbdd o lo que quieras. Luego en Unity, vía la clase WWW recoger lo devuelto, deserializarlo y mapearlo contra una clase de C#.Un tutorial sencillito aquí: https://trinitytuts.com/build-first-web-service-php/  

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34859" data-ipsquote-contentcommentid="125813">Tienes un error de concepto en la arquitectura. Tendrías que acceder a los datos vía web services rest (como los que proporciona JSON, SOAP ya no se utiliza prácticamente), serializar y devolver un array embebido con el resultado de la bbdd o lo que quieras. Luego en Unity, vía la clase WWW recoger lo devuelto, deserializarlo y mapearlo contra una clase de C#.Un tutorial sencillito aquí: https://trinitytuts.com/build-first-web-service-php/">https://trinitytuts.com/build-first-web-service-php/  [/quote]Creo que @Arthure tiene un poco errado los conceptos pero la idea de la serialización de un ARRAY en PHP a JSON como resultado de su consulta a la DB es lo más práctico y seguro si se requiere encriptar los datos.1-Los pasos serían un Array en PHP.2-Serializar el Array con JSON Encode.3-Retornar el Resultado del Arreglo serializado a JSON  4-Deserializar JSON en el Script donde recibes los Datos, Gracias a que Unity hoy en día acepta JSON, antes había algunos problemas http://blogs.unity3d.com/2015/12/08/unity-5-3-all-new-features-and-more-platforms/" rel="external nofollow date=1452241867]MÁS INFORMACIÓNNo es muy descriptiva la ayuda pero te será útil si ya sabes utilizar C# PHP y WWW.. Un Abrazo Suerte. Franco -.

Cita de: francoe1 date=1452252479" data-ipsquote="" data-cite="francoe1" class="ipsQuoteCreo que @Arthure tiene un poco errado los conceptos pero la idea de la serialización de un ARRAY en PHP a JSON como resultado de su consulta a la DB es lo más práctico y seguro si se requiere encriptar los datos.
no tengo errados ningun concepto ... es que como comente en el mismo post, no tengo ninguna experiencia con la clase www (ni hacer consulta a ninguna base de datos) en unity y tampoco me he molestado en hacer ninguna busqueda en internet al respecto para contestar una pregunta de alguien que tampoco se ha molestado. Teniendo en cuenta esas dos cosas, creia que era obvio que no tengo conocimiento en el tema... he sido el primero en decirlo, no es que tenga errados ningun concepto (es que soy el primero en decir que no tengo esos conceptos asimilados ni bien ni mal puesto que no los he hecho servir nunca y por lo tanto nunca he tenido necesidad - interes en aprenderlos).al margen de eso, lo unico que he respondido con seguridad puesto que si lo he utilizado y tengo bien asimilado es que hoy en dia cualquier lenguaje que permite comunicacion en red permite trabajar con "arrays" (arrays lo pongo entre comillas igual que lo puse en el post original) y es que json no es mas que un formato que contiene datos de un solo objeto, que podria equipararse a una variable en C# por ejemplo, o bien datos de distintos objetos, que podria equipararse a un array. tambien deje claro que esos "arrays" o conjuntos de datos despues de recibirlos hay que hacerles un tratamiento para poder almacenarlos en un array tal y como se conoce en C# ... y eso si que lo digo sin tener ningun concepto errado porque estoy hasta los cojones de utilizarlo.Lo unico que he hecho ha sido explicarlo de forma que alguien que no tenga ni *** idea pueda entenderlo ... aunque tambien es muy correcto buscar informacion, pegar un resumen y creer que se tiene mas claro que los demas (aunque haya hecho falta primero buscar la informacion para molestarse en escribir). Si tuvieras los conceptos tan "errados" como yo sabrias por ejemplo que :
  • crear un array con el resultado de una consulta, serializar los datos a json y despues mandarlos a traves de la red (es decir, tus 3 primeros pasos) son cosa del servidor y se hace de forma transparente a Unity ... como la pregunta iba sobre la clase WWW de Unity si acepta arrays o no, quiero entender que la duda esta en el lado del cliente y no del servidor. Es como si te preguntan si es posible hacer una mudanza y tu respondes que primero necesitas un arquitecto, despues unos paletas ... y cuando la casa esta terminada, entoces realizas la mudanza; dicho de otro modo, responder a cosas que ni se preguntan.
  • cuando dices que el ultimo paso es "Deserializar JSON en el Script donde recibes los Datos, Gracias a que Unity hoy en día acepta JSON" ... quizas tengas un problema en los conceptos, pero a eso yo lo llamo hacer un tratamiento de datos para despues poderlos añadir al array (o variable); es decir que al final estas diciendo lo mismo que el tipo que tiene los conceptos errados. Solo que yo lo he dicho con una palabra que alguien que no entiende del tema pueda enteder, y lo que tu pones queda mas de "oohhh que tecnico, palabra deserializar, eso suena a algo muy avanzado"

No quiero entrar en discusiones, pero creo que jamas tocaste algo de "Socket", ya que es obvio lo que comentas, cualquier entorno de red trabaja con "Array" siendo que el "Array" es una simple estructura que nos deja manejar datos de una forma particular.
Con esto quiero decir que tenes un poco los conceptos errados, saltando solo eso, te di la razón completamente. y seguido a eso unos pasos a seguir para lograr obtener una respuesta serializada en JSON desde su consulta PHP.

La consulta PHP es transparente para el Cliente, pero para el Desarrollador no, ya que es la persona quien la construye.Te tomaste las cosas muy a pecho, y faltas el respeto sin necesidad generando un poco de violencia, que como ya dije es totalmente innecesario. Saludos.

Dejad de hablar por hablar, y miraos la documentación: http://docs.unity3d.com/ScriptReference/WWW.htmlSi la clase WWW trae sólo métodos para parsear un string, eso es lo que hay. El cómo tratéis ese string antes o después del envío, ya es cosa vuestra... NOTA: Os agradecería que cuando un usuario postee un problema acerca de algo concreto, tratéis de ir al grano y siempre respondiendo algo en relación directa a la duda. No os pongáis a generalizar ni a iros por las ramas, porque los posts se hacen enormes y el pobre usuario acaba hecho un lío.Las opiniones personales y los ejemplos de vuestro gran conocimiento en la materia (que está muy bien que queráis mostrarlos al resto de la gente, eso me parece bien), tienen mejor cabida en el OffTopic o en Formación y Recursos.Gracias.

Enero 08, 2016, 04:33:55 PM #7 Ultima modificación: Enero 08, 2016, 04:38:54 PM por kaito
Puedes unir todos los resultados de la consulta en una sola variable de texto separados por una coma mediante la instruccion php, echo implode.
<?php

$mysqli = new mysqli("localhost", "user", "unity", "000000");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
    printf("Falló la conexión: %s\n", mysqli_connect_error());
    exit();
}

$consulta = $_REQUEST['query'] or exit('No existe Consulta');

if ($resultado = $mysqli->query($consulta)) {

    /* obtener el array de objetos */
    if(is_object($resultado)){

        $results = array();
        while ($fila = $resultado->fetch_row()) {
            for($i=0;$i<count($fila);$i++){
                 $results[] = $fila[$i];
            }
        }

        echo implode(",",$results);

        /* liberar el conjunto de resultados */
        $resultado->close();

    } else {

       echo $resultado;

    }
 

   
}

/* cerrar la conexión */
$mysqli->close();


?>   
Luego, desde Unity vuelves a dividir mediante www.text.Split(',')

Lo siento si fui brusco, no era mi intencion crear violencia internauta; es que me revienta mucho que me digan que tengo los conceptos errados nombrandome explicitamente despues de ser yo mismo el que dijo desde el principio que no habia tocado nunca esa clase y, como cualquiera que no ha trabajado nunca con algo, los conocimientos no son errados ... sencillamente es ausencia de conocimientos, fui el  primero en admitirlo. Solo le comente que como norma general es posible transmitir conjuntos de datos en formato json (creo que, igual que digo una cosa digo la otra, he sido el que ha sacado la opcion de json) y despues volcar esos datos en un array dentro de Unity. Podria haberme molestado en buscar informacion o haberme dirigido a la web de referencia para ser mas concreto y responder si la clase WWW permite eso o no, pero si no lo hace el propio interesado ... para que molestarse ?En cualquier caso, lo dicho ... siento el mal entendido o mi brusquedad a la hora de responderte. Un saludoP.D. no es que me tome las cosas muy a pecho, es que cuando nombras a una persona estas haciendolo personal ... te estas dirigiendo a esa persona en teoria y es normal darse por aludido. El otro compañero de foro dijo exactamente lo mismo que tu, lo de conceptos errados, pero al no nombrar a nadie quien se de por aludido es su problema como suele decirse.

Dale, Tambien me Disculpo.@Pioj, cuando alguien quiere saber sobre algo lo mejor es explicarle un poco resumido como van las cosas, por ejemplo, si pregunta como pasar datos por WWW la forma mas practica, simple y segura es a través de JSON. Tu Respuesta sobre "WWW  solo acepta string" es correcta, pero eso no quiere decir que no la puedas extender para crear tu propio Objecto JSON. Ejemplo.Vuelvo a pedir disculpas, pero creo que un Foro es para compartir los conocimientos y tratar de ayudar a otros usuario con el mismo interés, sinceramente con la pequeña informacion que le aportamos entre @Arthure y Yo es más que suficiente para que pueda lograr su cometido.

Etiquetas: