Le 30 avril 2018 à 15:32:24 pifpafpouf07 a écrit :
Bonjour à tous, j'ai un petit soucis avec les AssetBundles :WWW www = new WWW(Application.dataPath + "/AssetBundles/immeubles");
Quand j'utilise la ligne suivante le bundle se charge dans l'éditeur mais mais dans la version build, quand j'utilise le chemin absolu ça fonctionne dans les deux cas, si quelqu'un pouvait m'expliquer pourquoi. J'ai cherché sur le net mais ça n'a pas été concluant.
Je voulais utiliser les bundles pour remplacer l'utilisation du dossier resources qui est pas tellement conseillée selon la doc.
Le dossier Resources n'est pas conseillée dans la doc ??? Lien ?
Il faut modifier l'url en fonction de la plateforme de build.
Genre sur Android ça n'existe pas.
https://docs.unity3d.com/ScriptReference/Application-dataPath.html
Essaie d'utiliser https://docs.unity3d.com/ScriptReference/Application-streamingAssetsPath.html à la place.
https://unity3d.com/fr/learn/tutorials/topics/best-practices/resources-folder
2.1. Best Practices for the Resources System
Don't use it.
Ah ouais j'étais pas allé voir la doc du ApplicationDataPath, effectivement ce que tu as link semble plus pratique ^^
Edit : merci, ça fonctionne et ça m'a pris 30 secondes à changer !
Le 30 avril 2018 à 16:02:41 pifpafpouf07 a écrit :
https://unity3d.com/fr/learn/tutorials/topics/best-practices/resources-folder2.1. Best Practices for the Resources System
Don't use it.
Ah ouais j'étais pas allé voir la doc du ApplicationDataPath, effectivement ce que tu as link semble plus pratique ^^
Edit : merci, ça fonctionne et ça m'a pris 30 secondes à changer !
Merci pour l'info, c'est pas la doc, donc je trouvais pas.
Hello,
Je bloque pour la réalisation d'une ScrollBar dans mon jeu :
Le jeu dispose de X armes au total et le joueur n'en possède que Y.
Je récupère toutes les armes dont le joueur dispose (dans une liste)
Je voudrais avoir une scrollbar qui affiche uniquement les armes possédées, et lorsqu'il clique sur une, un texte à côté de la scrollbar s'actualise et affiche les infos.
Problème : Je ne sais pas du tout comment créer dynamiquement des objets.
Un tuto ou une explication?
Pour résumer :
Merci d'avance!
Salut Nonovitch,
Du coup il faudrait déclencher une mise à jour du HUD lorsque le joueur ramasse ou drop une arme (ça peut être autre chose selon ton jeu). Dans ton scriptHUD, tu vas avoir deux prefab :
- Un prefab pour la liste dans la scrollbar qui représentera le nom de ton Item dans la liste. Pour la suite on va appeler ceci scrollPrefab.
- Un prefab pour représenter les infos de ton arme dans le rectangle sur ta droite. On va appeler celui-ci infoPrefab.
Du scriptHUD va récupérer la liste de tes armes sur ton joueur, et pour chaque arme tu vas instancier scrollPrefab et infoPrefab, dans lesquels tu mettras à jour les valeurs visuelles en fonction de ton arme.
Après il faut lier les deux, de façon à ce que quand tu clic sur un scrollPrefab , cela t'affiche le infoPrefab correspondant. Pour cela il te faut un script sur ton scrollPrefab (que l'on va appeler ListHandler) sur lequel tu vas attacher une référence à ton scriptHUD et à infoPrefab. Sur ListHandler tu implémentes l'interface IPointerDownHandler pour pouvoir détecter quand on clic sur le Transform associé au script, et dans la fonction OnPointerDown tu dis à scriptHUD de désactiver le infoPrefab actuel, et d'activer celui associé à ListHandler.
Voilà ça devrait faire l'affaire. Pour ce qui est du scroll en lui même, je te laisse chercher, il y a une tonne de tutos sur ce sujet ;)
Et niveau code ça te donnera quelque chose comme ça dans ton scriptHUD :
foreach(Weapon weapon in playerWeaponList)
{
GameObject infoPrefabObject = Instantiate(infoPrefab, infoContainerTransform);
infoPrefabObject.transform.Find("Statistics").GetComponent<Text>().text = weapon.Statistics;
// Autres infos à mettre à jour
infoPrefabObject.SetActive(false);
GameObject scrollPrefabObject = Instantiate(scrollPrefab, scrollListTransform);
infoPrefabObject.transform.Find("ItemName").GetComponent<Text>().text = weapon.Name;
ListHandler listHandler = infoPrefabObject.GetComponent<ListHandler>();
listHandler.scriptHUD = this;
listHandler.infoPrefab = infoPrefabObject.transform;
}
Merci pour ta réponse GrouilleOignon!
Je galère avec les tutos de ScrollBar à vrai dire (si jamais t'en as un bon hésite pas à me conseiller ), je vais continuer mes recherches.
Je bloquais aussi sur comment créer un élément (une arme dans la scrollbar par exemple) via les scripts, merci pour ton code
Bonjour,
Excusez moi de m'incrustez par ici, mais cette fois-ci je galère avec les animations
Vous ne sauriez pas comment, dans un script, prendre le compte le temps d'une animation par hasard?
Pour faire une boucle du genre : "Tant que l'animation n'est pas fini, faire..."
Ou si ce n'est pas possible, au moins faire un timer : "Attendre ... s, puis faire" . Il y a bien "WaitForSeconds", mais ça ne marche que dans une coroutine, non?
Le 02 mai 2018 à 20:54:36 Hytrq a écrit :
Ou si ce n'est pas possible, au moins faire un timer : "Attendre ... s, puis faire" . Il y a bien "WaitForSeconds", mais ça ne marche que dans une coroutine, non?
Et alors ? tu mets le reste de ton code dans la coroutine. Ou tu le mets dans une autre fonction et la Coroutine appelle la fonction quand elle a terminé. Ou tu peux faire un timer en utilisant la fonction Update.
Le 02 mai 2018 à 20:54:36 Hytrq a écrit :
Bonjour,
Excusez moi de m'incrustez par ici, mais cette fois-ci je galère avec les animations
Vous ne sauriez pas comment, dans un script, prendre le compte le temps d'une animation par hasard?
Pour faire une boucle du genre : "Tant que l'animation n'est pas fini, faire..."
Tu peux mettre un animationevent à la fin de ton animation pour appeler une fonction : https://docs.unity3d.com/Manual/animeditor-AnimationEvents.html
Si c'est pour recommencer l'animation, tu n'as même pas besoin de tout ça.
Et alors ? tu mets le reste de ton code dans la coroutine. Ou tu le mets dans une autre fonction et la Coroutine appelle la fonction quand elle a terminé. Ou tu peux faire un timer en utilisant la fonction Update.
Effectivement, maintenant que tu le dis, ça me semble logique
Tu peux mettre un animationevent à la fin de ton animation pour appeler une fonction : https://docs.unity3d.com/Manual/animeditor-AnimationEvents.html
Si c'est pour recommencer l'animation, tu n'as même pas besoin de tout ça.
Merci beaucoup pour la réponse et le lien ! J'ai réussi à résoudre mon problème
Aussi, je me demandais, dans un script en C#, on est obligé de mettre "private" ou "public" avant chaque déclaration de variable au début ?
De la même manière, est ce qu'on est obligé de mettre le code entre { } après un " if " ?
Le 03 mai 2018 à 20:41:47 Hytrq a écrit :
Aussi, je me demandais, dans un script en C#, on est obligé de mettre "private" ou "public" avant chaque déclaration de variable au début ?
Non, par défaut les variables et les fonctions sont en private.
Le 03 mai 2018 à 20:41:47 Hytrq a écrit :
De la même manière, est ce qu'on est obligé de mettre le code entre { } après un " if " ?
C'est facultatif uniquement s'il n'y a qu'une seule ligne dans le if. Sinon c'est obligatoire, par contre, les tabulations sont facultatives, c'est uniquement pour une meilleur lisibilité.
Aussi, je me demandais, dans un script en C#, on est obligé de mettre "private" ou "public" avant chaque déclaration de variable au début ?
Non, si on met rien c'est private par défaut
De la même manière, est ce qu'on est obligé de mettre le code entre { } après un " if " ?
Non, si le code entre {} ne fait qu'une ligne on n'est pas obligé.
Salut à tous, savez vous s'il est possible de mettre un coroutine en pause ?
J'utilise une coroutine pour lire une liste de sons (je fais un wait for seconds de la durée du son en cours avant de jouer le suivant) et j'aimerais pouvoir mettre cette coroutine en pause pour en lancer une autre dans certains cas, est ce que c'est possible ou alors je dois faire autrement ?
Petite question au niveau de l'architecture :
Comment gérez-vous vos scènes? 1 scène = 1 niveau, 1 scène = 1 menu.. ?
Le 04 mai 2018 à 09:48:21 pifpafpouf07 a écrit :
Salut à tous, savez vous s'il est possible de mettre un coroutine en pause ?
J'utilise une coroutine pour lire une liste de sons (je fais un wait for seconds de la durée du son en cours avant de jouer le suivant) et j'aimerais pouvoir mettre cette coroutine en pause pour en lancer une autre dans certains cas, est ce que c'est possible ou alors je dois faire autrement ?
https://answers.unity.com/questions/904429/pause-and-resume-coroutine-1.html
Apparemment tu peux faire comme ça.
Mais je pense que si tu as besoin de mettre en pause des coroutines, c'est que tu n'as pas réellement besoin de coroutine.
Le 07 mai 2018 à 13:44:47 Nonovitch a écrit :
Petite question au niveau de l'architecture :
Comment gérez-vous vos scènes? 1 scène = 1 niveau, 1 scène = 1 menu.. ?
J'imagine que ça dépend du jeu et des besoins, mais classiquement c'est comme ça oui. Sauf pour les menus In Game, qui sont inclus dans une autre scene (un autre niveau).
Le 07 mai 2018 à 14:36:42 TheRealMarco a écrit :
Le 04 mai 2018 à 09:48:21 pifpafpouf07 a écrit :
Salut à tous, savez vous s'il est possible de mettre un coroutine en pause ?
J'utilise une coroutine pour lire une liste de sons (je fais un wait for seconds de la durée du son en cours avant de jouer le suivant) et j'aimerais pouvoir mettre cette coroutine en pause pour en lancer une autre dans certains cas, est ce que c'est possible ou alors je dois faire autrement ?https://answers.unity.com/questions/904429/pause-and-resume-coroutine-1.html
Apparemment tu peux faire comme ça.Mais je pense que si tu as besoin de mettre en pause des coroutines, c'est que tu n'as pas réellement besoin de coroutine.
Je me suis débrouillé autrement, j'avais trouvé cette solution mais ça me plaisait pas trop du coup j'ai fait autrement, merci quand même !
Bonjour
Je travaille avec le NetworkLobbyManager et je veux pouvoir spawned tel ou tel prefab selon la plateforme sur laquelle le joueur joue. J'ai fait un override sur la fonction OnLobbyServerCreateGamePlayer mais c'est toujours le prefab du serveur qui est spawn sur tous les clients. Un peu d'aide ne serait pas de refus, je m'arrache les cheveux dessus depuis une journée ^^
https://pastebin.com/NnU6dVCi
Salut, je m'exerce un peu sur Unity et je suis confronté à un problème dont je ne trouve aucune solution.
Je fais un platformer 2d, le décor est crée à partir d'une Grid et d'une Tilemap "Ground" qui possède un CompositeCollider2D. J'ai une autre Tilemap sans collider qui me sert de layer, pour rajouter par exemple une échelle sur le décor.
Avez vous une piste vers laquelle je devrais me pencher ? Faire un scriptable tile ?
Bonjour à tous, je reviens encore avec un problème de streaming assets/ asset bundle, tout fonctionne bien dans l'editor mais quand je build mon jeu sur ma tablette les assets ne sont pas chargés.
IEnumerator loadAudio()
{
WWW www = new WWW(Application.streamingAssetsPath + "/audioPratique");
yield return www;
AssetBundle bundleAudio = www.assetBundle;
if(bundleAudio == null)
{
yield break;
}
else
{
AssetBundleRequest request = bundleAudio.LoadAllAssetsAsync<AudioClip>();
clips = request.allAssets;
yield return clips;
}
bundleAudio.Unload(false);
}
Voilà le code, comme conseillé plus tôt j'ai remplacé l'utilisation de application.dataPath par celle de streamingAssetsPath et d'après la doc y'a pas de changements entre les plateformes donc si quelqu'un a une idée d'où pourrait venir le problème je prends
PS : Le code montré est celui pour le chargement des sons mais c'est la même chose pour les sprites.
J'avais oublié de rebuild mes assets bundles pour android du coup je l'ai fait et j'ai ajouté une condition if (Application.platform == RuntimePlatform.Android)
pour que ça puisse fonctionner sur les deux plateformes MAIS ça ne fonctionne toujours pas