Unity : Communication avec l’export flash (Remplacement du WWW)

Bonjour à vous 😉

Un des gros problèmes actuel avec l’export flash d’Unity pour des projets demandant une communication avec un service externe (php, java ou autre), ou un chargement d’éléments externes (images, sons…) est la non prise en charge de la classe WWW. A l’heure où j’écris cet article, Unity nous informe d’une prise en charge prochaine de cette classe, mais en attendant nous devons « bricoler » une sorte de « bridge » afin d’assurer cette fonctionnalité.

flash unity

Je me suis appuyé sur l’exemple d’UnityRalph du forum officiel d’unity.

Cet exemple charge une image dans un plan, mais il est assez limité, car la gestion des événements est très simpliste (boucle while) et empêche le chargement simultané de plusieurs images à l’intérieur d’un même script. De plus, j’ai ajouté le chargement de données au format texte avec le même constructeur.

J’ai donc ajouté la déclaration de deux delegates, un pour le chargement de données comme du texte, et l’autre pour une texture au format Texture2D.

J’ai essayé de coller au maximum au principe de la classe WWW.

Exemple pour charger du texte (en POST) :

wwwData = new AsWWW("votredomaine/votrescript.php");
wwwData .AddField("argument1", "valeur1");
wwwData .AddField("argument2", "valeur2");
StartCoroutine(wwwData .loadData(reponse, getError));

L’argument de loadData est par exemple une méthode du type :

private void reponse(string text){
	Debug.Log(text);
}

Pour le chargement de texture, même principe :

wwwPic = new AsWWW("domaine/image.jpg");
StartCoroutine(wwwPic.loadTexture(reponse, getError));
private void reponse(Texture2D texture){
	plane.renderer.material.mainTexture = texture;
}

Et la méthode (c’est un exemple hein) qui capture les erreurs 😉

private void getError(string error){
	print ("Error :"+error);	
}

Donc, la classe AsWWW possède deux méthodes, loadData(), loadTexture() avec comme argument une méthode avec un argument de type string, un argument de type Texture2D pour l’autre, et une méthode facultative pour capturer les erreurs.

Mais on peut aussi ce passer des delegate et donc attendre le chargement des données ou texture :

wwwText = new AsWWW(urlPhp);
yield return StartCoroutine(wwwText.loadData());
guiText.text = wwwText.text;
wwwPic2 = new AsWWW(urlPic);
yield return StartCoroutine(wwwPic2.loadTexture());
littlePlane.renderer.material.mainTexture = wwwPic2.texture;

Et dans ces cas là, pour récupérer les éventuelles erreurs :

.... = wwwText.error;
.... = wwwPic2.error;

Si vous avez d’autres idées, n’hésitez pas !

Exemple completPackage

6 commentaires

  1. Heu moi j’ai un ptit soucis. J’ai bossé sur une application iPhone pour le moment, exporté aussi pour android. Je cherche à l’exporter sous flash mais il ne semble pas supporter la classe WWW et WWWForm. Je pensais que l’exemple que vous avait fourni n’utilisait pas ces classes ^^ ».. Y a-t-il un autre moyen de communiquer avec l’export flash ?

    (L’export ne s’effectue pas à cause des deux classe WWW et WWWForm si vous avez trouvez une parade je suis preneur).

    Cordialement, Valentin.

  2. Bonjour Valenti.

    La dernière version d’Unity 3.5.2 prends en charge le WWW et WWWForm.
    Par contre sur mes projets avec l’export flash c’est pas fonctionnel j’utilise alors ma classe AsWWW et ça fonctionne 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Website Protected by Spam Master


*