PDA

Voir la version complète : Probleme sur un script unity3d



nikho
07/10/2013, 19h08
Bonjour à tous,

En général, lorsque j'ai des problèmes dans mes scripts j'arrive à m'en sortir en trouvant la réponse sur divers forums consacrés à unity mais pour ce soucis la, je n'ai pas réussi à trouver de réponses. Je me décide donc à m'inscrire ici pour poser la question, en espérant qu'une âme charitable puisse m'aider.

Donc mon soucis. Je suis entrain de développer un jeu dans lequel je laisse libre cours à l'imagination des joueurs : a savoir qu'ils pourront modeler le monde comme ils le désirent, ils pourront créer des structures, créer des scripts, bouger les structures, etc...

Je suis donc entrain de coder tout cela, et cela fonctionne, par contre lorsque je compile j'ai des erreurs.

Par exemple cette erreur : Assets/Scripts/Importer.js(129,36): BCE0005: Unknown identifier: 'AssetDatabase'.

Mon script importer.js permet aux joueurs d'importer des éléments (3d, sons, textures, etc...) directement dans les assets unity.

Voici un bout de ce script pour ceux que ça intéresse



if(etattooglefichiermusique){ //si on doit importer un fichier son
//on verifie son extension
extensionok = false;
for(var extension : String in extensionsfichiermusique) //scan des extensions possibles pour un fichier son
{
if(fichieraimporter.Substring(fichieraimporter.Las tIndexOf(".")) == extension)
{
extensionok = true; //l'extension est ok
}
}
if(extensionok){ //l'extension est ok, on paramétre donc le chemin de destination
chemindestination = "Assets/Resources/Import/Sons";
}else{
//erreur sur l'extension
messagepourutilisateur = "Le fichier n'est pas correct, verifier son type";
}
}

if (chemindestination != ""){ //on lance l'import uniquement si un chemin de destination est correct
messagepourutilisateur = "Importation en cours, merci de patienter";
assetdestination = chemindestination + fichieraimporter.Substring(fichieraimporter.LastIn dexOf('/'));
assetdestination = AssetDatabase.GenerateUniqueAssetPath(assetdestina tion);
System.IO.File.Copy(fichieraimporter, assetdestination, true);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
messagepourutilisateur = "Importation terminée";
}

En fait le soucis proviens du fait que la fonction AssetDatabase est une fonction editor donc inutilisable dans un projet compilé, je me retrouve alors coincé.

Auriez-vous une idée, pour pallier à ce problème? Pouvoir faire ce que j'en envie et pouvoir le compiler.

Je n'ai pas mis toutes les erreurs mais toutes sont dues au fait que j'utilise des fonctions editor, notamment draganddrop, assetdatabase, editorapplication.

En vous remerciant par avance pour avoir lu tout ce pavé et m'aider à trouver une solution.

Black Wolf
08/10/2013, 00h12
Salut et bienvenue ici,

pour ce qui est de charger des fichiers texte au runtime tu peux te servir de la classe WWW. Pour ce qui est de fichiers binaires comme des sons ou autres, cela n'est malheureusement pas possible à ma connaissance, en effet les fichiers doivent déjà avoir été traités pendant le processus de build pour être accessibles. La seule exception à ça sont les "assets bundle", ça te permet de faire des packs de ressources que tu vas charger dynamiquement à l'exécution, mais il faut que les packs aient été "pré-préparés" dans Unity avant (et sauf erreur la création des assets bundle était réservée à Unity Pro).

Comme tu as pu voir par toi même, tu ne peux en effet pas appeler certaines classes "editor" depuis le runtime.

nikho
08/10/2013, 10h30
Bonjour Black Wolf,

Deja, je te remercie d'avoir repondu à ma question. Effectivement j'ai regardé le bundle asset que je ne connaissais pas et qui a l'air trés interressant.
Reste à savoir si il requiert la version pro pour la création d'asset ou pour l'importation ou même les deux. J'ai une version pro de unity donc si cette fonctionnalité a besoin de la version pro uniquement pour l'importation ca me conviens, au pire les utilisateurs installeront la version gratuite s'ils veulent créer du contenu.
Il ne me reste plus qu'a trouver quelqu'un qui a une version gratuire pour tester si on peux faire la partie création avec cette version.

Merci encore, et je vous tiendrai au courant si ca fonctionne, ca peux aider du monde.

Black Wolf
08/10/2013, 11h03
A ce que j'ai compris c'est pour la création du "asset bundle" qu'il faut la version pro. Maintenant y a pas mal de fonctionnalités qui sont passées gratuites ces derniers temps mais j'ai rien vu passer concernant ce point là. C'est vrai que ce n'est pas pratique de pas pouvoir rajouter dynamiquement du contenu au runtime.

nikho
08/10/2013, 11h47
Bon ben, vu que j'avais un peu de temps j'ai codé rapidement un script pour faire l'exportation d'un asset bundle, et ça fonctionne avec une licence pro, par contre dés que je vire ma licence pro et que je met une licence gratuite j'ai un joli message me disant que l'exportation demande une licence pro. Je suis coincé de ce coté la.
Il faut que je trouve une autre solution si je veux pouvoir réaliser ce projet. Oui, tu as raison, il manque de grosses fonctionnalités à unity, un module de GUI de type Wysiwyg serait vraiment bien à rajouter (c'est lourd de devoir calculer à la main la position de tous les éléments, surtout lorsque tu en as beaucoup, et devoir attendre la compilation si jamais tu t'est planté), la partie réseau n'est pas super bien gérée, tu as souvent des erreurs à la con, et finalement, le fait de pouvoir rajouter dynamiquement du contenu manque aussi. Bref, je me vois mal changé de moteur maintenant, cela fait environ 1 an que je bosse sur unity, donc devoir désapprendre les trucs et changer, ça m'ennuierait plus qu'autre chose. Je continue à chercher, si tu as d'autres idées n’hésites pas, merci.

Black Wolf
08/10/2013, 13h57
Pour la GUI ça ne devrait pas tarder, ils nous promettent un nouveau système pour une version 4.0x ultérieure, puis en attendant y a toujours des solutions comme NGUI qui marchent plutôt pas mal. Pour la partie réseau entre Photon qui est maintenant dispo gratuitement mais un peu/beaucoup usine à gaz à ce que j'ai lu, ou TNet du concepteur d'NGUI, donc t'as de quoi faire aussi :). En plus maintenant qu'ils font des promo régulières sur l'asset store y a moyen d'avoir ces plugins à pas cher.

Pour le rajout dynamique de contenu, je pense que la limitation vient des mobiles et du plugin web, ou généralement ton contenu doit être "signé/vérifié" et connu plus ou moins à l'avance. Le système d'assets bundle à d'ailleurs été rajouté pour contourner la limitation de taille des applications dans les app stores, histoire que ton jeu puisse downloader son contenu depuis un serveur par la suite.

nikho
08/10/2013, 16h53
Moue, NGUI, je l'ai testé et j'ai vite fait chemin inverse, c'est encore moins optimisé que le code ^^. Ou alors je n'ai pas su l'utiliser.
Pour photon, je le connaissais de nom, mais jamais eu l’occasion de m'en servir, j'ai dl la version d'essai et vais lire la doc pour voir ce que ça donne et si ça vaux vraiment le coup.

Quand à la mise à jour de contenu en temps réel, je pencherai plus pour le plugin web, car justement, le fait de pouvoir "streamé" du contenu au lieu de tout mettre dans l'application permet d’alléger l'appli donc est utile pour les mobiles.

Dans tous les cas, a priori je vais devoir stopper ma superbe idée de superbe jeu qui allait tout casser. ^^ . J’espère juste que quelqu'un aura une idée pour gérer cela et développe un plugin sur unity. Je n'ai pas franchement envie de changer de moteur, sachant que je ne sait même pas si un autre moteur fonctionne aussi bien que unity, avec un bon système de script (pas du langage propriétaire), et permet justement de faire du rajout dynamique.

Peut-être que quelqu'un passant totalement par hasard par ici, vas dire "un moteur existe , il permet les scripts en js, permet tout ce que fait unity et permet ce rajout" mais ne rêvons pas trop.

Igguk
10/10/2013, 21h36
Salut,

Juste pour préciser ce que dit Black Wolf, avec la classe WWW, on peut aussi charger des vidéos et des textures, pas seulement du texte. Par contre pour des mesh ou du son, je suis pas vraiment sûr (http://docs.unity3d.com/Documentation/ScriptReference/WWW.html)

J'ai aussi testé NGUI au boulot, c'est une belle usine à gaz effectivement, mais pour quelqu'un qui préfère bosser sur un éditeur que sur du code ça fait le boulot, mais faut vraiment un temps pour se faire à la philosophie (et Unity a annoncé un remaniement de leur GUI pour la 4.3, j'attends plutôt de voir ce que ça va donner).

Black Wolf
11/10/2013, 10h01
Ah ouais mince j'avais juste survolé 2 ou 3 infos trouvées sur les forums sur la classe WWW mais en effet elle permet de charger texte, son et textures. Pour des mesh c'est possible de les charger via un fichier texte, telle qu'un mesh en .obj par exemple. J'étais même tombé sur un plugin qui faisait l'import d'obj (ce n'est pas très compliqué à coder).

Pour NGUI on s'y fait assez vite, on se perd vite dans la complexité car le type fournit toutes les sources, mais t'as vraiment besoin de n'en utiliser qu'une toute petite partie. Pour le remaniement de la GUI, y aura quelques ressemblances avec NGUI vu que son auteur a été embauché par Unity, mais il dit avoir vraiment amélioré beaucoup de choses et que ça n'aura pas grand chose à voir avec NGUI en terme de simplicité et possibilités.

nikho
12/10/2013, 16h43
Un remaniement de la GUI??? wouahh, vive la 4.3, je vais l'attendre avec impatience.
En ce qui concerne la classe WWW. je m'en servais uniquement pour faire des liaisons de type php, je n'avais jamais poussé plus loin la recherche. Si tu me dit que cela peux aussi servir à faire de l'import je vais regarder plus en détail.
Même si cela n'importe que des obj c'est déjà mieux que rien. Merci de vos recherches.

Black Wolf
13/10/2013, 11h59
Pour les obj c'est toi qui va devoir les parser et les transformer en mesh, mais c'est pas trop trop compliqué à faire bien qu'il y ait 2 ou 3 trucs un peu chiants (genre le format obj ne prévoit pas d'inclure tangeante et binormals dont se servent une bonne partie des algo de normal mapping entre autres...).

Pour la GUI j'aimerais bien que ça soit pour la 4.3 mais je ne pense pas, ils ont recommencé de zéro plusieurs fois, cette fois ils nous le promettent vraiment pour le cycle 4.x mais à mon avis ça sera plutôt pour la 4.5, bref dans un moment. La 4.3 ajoutera quelques autres trucs sympa comme l'ajout d'un mode "jeu 2D", avec des outils appropriés et l'ajout du moteur physique Box2D qui s'en sort mieux que PhysX pour la simulation purement 2D.