Bonjour à vous,
Voici une méthode pour communiquer avec une fonction javascript contenue dans la page html courante de votre projet flash exporté avec Unity.
Pour cela j’ai crée une classe qui s’appuie sur du code AS3 une fois compilé.
flash unity
Voici un exemple d’utilisation :

using UnityEngine;
using System.Collections;

public class Main : MonoBehaviour {
	
	public GUIText infoText; 
	
	IEnumerator Start(){
		
		BrowserCommunicator bc = new BrowserCommunicator();
		// Send data
		bc.callFromUnity("testMethod", "hello world !");
		// Wait
		while(!bc.isDone)yield return null;
		// Get response
		infoText.text = bc.returnedData;
		
	}

	
}

Le code javascript contenu dans la page html courante :

function testMethod(flashMsg){

    var obj = swfobject.getObjectById("unityPlayer");
    if (obj){
        obj.callFromJavascript("Flash say : "+flashMsg);
    }

}

Donc vous l’aurez compris, au chargement du flash, un alert JS s’affiche avec Flash say : hello world !

Voici les deux classes à inclure dans votre dossier « Assets » : ICI

Bonjour,

Travaillant sur un projet de grande ampleur (dont la finalité est basée sur l’export flash d’Unity actuellement des plus douteux), je n’ai pas trop le temps de rédiger sur mon blog.

J’ai du néanmoins tester les nouveautés de la version 4 d’unity (actuellement en béta) afin de trouver des valeurs ajoutées à notre projet.

Je vais vous présenter l’une d’elle aujourd’hui : L’ajout de shader avec carte de normale et spéculaire à un terrain. On pouvait utiliser un script tiers pour avoir cette fonctionnalité qui pour moi est un manque majeur des versions antérieures. Ce petit tuto nous permettra donc de réaliser une texture spéculaire (pour ceux qui ne savent pas le faire), générer une normale avec un logiciel tiers, et créer notre material sur notre terrain.

Logiciels utilisés :

– Photoshop (Gimp peut tout aussi bien faire l’affaire).

SS bump generator (libre) ou CrazyBump (Payant)

– Unity en version 4 (ici 4.0.0b7)

Lire la suite de

Bonjour 😉
Juste un petit post rapide pour partager une petite classe que j’utilise depuis mes débuts sous Unity pour déboguer.
debug unity
Debug.Log ou print c’est bien, mais ne fonctionne que depuis l’IDE. Si on exporte, pas évident d’avoir accès au debug.
Téléchargez le package suivant, et ajoutez simplement le prefab sur votre scène, et vous débuguerais directement depuis un GUI 😉

Debugger.get.log("Hello World !!!");

Package

Pour information, cette classe ne fonctionne pas avec l’export flash à cause de méthodes sur la classe List<> non prises en charge.

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