Se connecter

Informatique

Création de Jeux

Sujet : J'aide les gens dans Unity
ludoxe
Niveau 10
17 mai 2016 à 22:33:55

Oki, mais j éspère (et je pense) que ça ne te pose aucun problème si je fais tout ça en JS

Pika-Hunter
Niveau 10
19 mai 2016 à 13:24:04

Alors j'ai avancé dans mon projet et :
Le problèmes de FPS est inhérent au logiciel, quand je lance le jeu en "Build and run" il n'y a aucun problème, donc pas besoin de corriger.
Pour la musique, j'ai appelé la fonction "DontDestroy(this)" (ou un truc du genre) mais j''ai un problème, c'est que du coup comme prévu la musique continue, mais ça en déclenche une autre, du coup ça devient vite insupportable

VaultDeveloper
Niveau 5
19 mai 2016 à 19:34:18

C'était un comportement prévisible, puisque tu instancies la classe une nouvelle fois à chaque fois que tu charges ta partie.

Tu peux répondre à cette problématique de plusieurs manières. J'aurai en premier pensé à mettre en place un singleton pour la musique. Ainsi tu ne pourras avoir qu'une instance de la classe.

Ou alors, avant de charger la nouvelle partie, tu mets dans PlayerPrefs le moment de la musique où tu en es actuellement, et quand tu finis de charger, tu remets la musique au moment indiqué dans le PlayerPref (via la méthode Start()). Si le jeu est un peu long à charger, tu risque d'avoir un instant sans musique. Je conseil plutôt la première solution donc.

Pika-Hunter
Niveau 10
20 mai 2016 à 11:53:42

Je lis des Singleton depuis quelques heures et je comprend pas vraiment..
Un ami m'a conseillé d'essayer de coder un script ou de modifier mon script de musique/reload pour détruire l'objet musique qui se recréer à chaque reload, ça pourrait être une bonne idée non ?

VaultDeveloper
Niveau 5
20 mai 2016 à 16:15:31

Le 20 mai 2016 à 11:53:42 Pika-Hunter a écrit :
Un ami m'a conseillé d'essayer de coder un script ou de modifier mon script de musique/reload pour détruire l'objet musique qui se recréer à chaque reload, ça pourrait être une bonne idée non ?

Ben un singleton, ça va empêcher de se créer un autre script, s'il est déjà présent dans la scène, donc c'est plus ou moins ça. Si tu détruits le script, c'est bon aussi, c'est moins propre donc plus dur à maintenir si tu veux modifier ton jeu par la suite, mais si ça reste un petit jeu ça suffira sans problème.

Pika-Hunter
Niveau 10
20 mai 2016 à 18:17:49

Mon prof de JV m'a conseillé de faire un "player pref"' le but étant de :

- Mettre un start en false qui va passer en "true" à la lancer du jeu
- Programmer le fait que la musique se lance UNIQUEMENT quand la valeur est en false, du coup elle va se lancer au début du jeu normalement. Pour ne pas se relancer quand le jeu va reload, car la valeure si dessus va rester en true.
- Faire que lorsque je ferme le jeu, la valeur redevienne "false" pour ne pas géner le prochain démarrage.

Sur le papier je comprend mais la réalisation c'est une autre histoire :hap:
Vous en pensez quoi ?

gorz94
Niveau 6
20 mai 2016 à 18:32:25

Ah la la.

void Start () {
if (!PlayerPrefs.HasKey("Music"))
PlayerPrefs.SetInt("Music", 0):
if (!PlayerPrefs.GetInt("Music")) {
PlayerPrefs.SetInt("Music", 1):
Instantiate (MusicObject);
}
}

Pika-Hunter
Niveau 10
20 mai 2016 à 19:06:35

Le 20 mai 2016 à 18:32:25 gorz94 a écrit :
Ah la la.

void Start () {
if (!PlayerPrefs.HasKey("Music"))
PlayerPrefs.SetInt("Music", 0):
if (!PlayerPrefs.GetInt("Music")) {
PlayerPrefs.SetInt("Music", 1):
Instantiate (MusicObject);
}
}

Et je mets ça où ? Dans le game object ?

gorz94
Niveau 6
20 mai 2016 à 20:07:34

Nan. Tu le met sur un objet sur ta scene.
Tu dois définir la variable MusicObject comme étant un préfab de l'object qui fait ton son.

Pika-Hunter
Niveau 10
20 mai 2016 à 20:40:13

Du coup je mets ça sur la Musique ? En C/C tout con ?
Désolé de toutes les questions cons je suis vraiment un pur débutant

VaultDeveloper
Niveau 5
21 mai 2016 à 13:57:15

J'ai trouvé par hasard un singleton assez simple à utiliser (il suffit d'hériter ta classe) :
https://github.com/kleber-swf/Unity-Singleton-MonoBehaviour/blob/master/Singleton.cs

VaultDeveloper
Niveau 5
24 mai 2016 à 00:05:02

Si une ligne est obsolète, normalement il te met une petite fenetre pour te le dire, et si tu cliques sur go Ahead, il te la corrige automatique.
Pour info, dans ton code, tu ne récupères jamais le composant RigidBody.
GetComponenet<RigidBody2D>().AddForce(forsaut);

Je ne sais pas si c'est du à ça.

Edit :
http://docs.unity3d.com/ScriptReference/GameObject-rigidbody.html
C'est bien ça le problème. rigidbody n'est plus une propriété d'un Gameobject, mais un composant à récupérer.

VaultDeveloper
Niveau 5
24 mai 2016 à 09:40:31

Justement c'est bien ça mais ensuite je ne sais pas comment l'utiliser... pour "donner" de la force lorsque j'appuie sur une touche?

Ben c'est ça, c'est la méthode AddForce sur le rigidBody. Vérifie que tu as bien un rigidBody2D (et bien 2D !) sur le gameobject qui contient ton script.

Pseudo supprimé
Niveau 1
30 mai 2016 à 12:37:34

Coucou, je vois pleins de tutoriels sur internet qui disent de déclarer les attributs en public, pour les voir apparaître dans la fenêtre d'unity. Je trouve que ça va à l'encontre de la POO, peut-on faire autrement ? Merci :-)

bastUltra
Niveau 7
30 mai 2016 à 12:56:42

Bijour j'ai une question :hap:
J'ai fais une ptite map sous blender avec comme départ un seul cube (et pleins d'extrudes), puis je l'ai importé sur unity dimensionné et tout, sauf que maintenant que je prend un matériau et que je le fout dessus, ça n'a aucun effet alors que pourtant le matériau est bien dans mes components :rire:
Comment fauit faire ? :svp:
Merci

VaultDeveloper
Niveau 5
30 mai 2016 à 13:05:12

Le 30 mai 2016 à 12:37:34 Srussega a écrit :
Coucou, je vois pleins de tutoriels sur internet qui disent de déclarer les attributs en public, pour les voir apparaître dans la fenêtre d'unity. Je trouve que ça va à l'encontre de la POO, peut-on faire autrement ? Merci :-)

Yep :
[SerializeField]  private int variable;

PS : Le paradigme d'Unity n'est pas la POO, mais la programmation Orientée Composant. Mais c'est quasiment similaire.

Pseudo supprimé
Niveau 1
30 mai 2016 à 13:12:49

Ok merci, ça m'apporte pas mal d'éclairage :-)

TheUnreaL34
Niveau 8
07 juin 2016 à 01:50:33

Bonjour/Bonsoir a tous , je viens vers vous pour un coups de main , voilà enfaite je travaille sur un fps et je travaille sur deux animations , a savoir l'animation de recul avec l'arme quand on tire et l'animation de rechargement . Les animations sont casiment prêtes ( se sont des animations basiques mais améliorer avec le temps ) et j'aimerai bien faire en sorte que a chaque fois que je tire avec l'arme l'animation s'active , et je n'ai trouvé aucun tuto en javascript pour les animations etc .
Du coups en regardant la documentation d'unity j'ai vu qu'il y avait un grand nombre d'animation et celle que je veux mettre en place je ne sais pas dans quel catégorie elle est ... peut etre , AnimationClip ?
je sais que je dois implementer le code dans la fonction Update mais aprés je sais pas par ou commencer .
Dois-je ecrire dans le script ou j'ai mis toute les variable a savoir les munitions var , la vitesse d'ejection des balles etc ? sachant que ce script est destiné au gameobject eject en sortie de canon et que pour l'animation je dois utiliser le gameobject de l'arme ...
Merci d'avance pour les futures réponses =)

VaultDeveloper
Niveau 5
07 juin 2016 à 12:55:54

Bonjour.

Je te conseil de suivre un tuto sur le système d'animation d'Unity.
Mais en gros, tu as pour un gameobject un AnimatorControlleur, qui lui, peut avoir plusieurs animations (AnimationClip dans le code) et plusieurs paramètres qui lui indique quand utilisé les animations.

GameObject Arme;
...
if (munitions < 0 || Input.GetKeycode('R'))
   Arme.GetComponent<Animator>().SetTrigger("Recharger", true);

J'ai pas testé le code, mais c'est pour te donner une idée.
A savoir que je te conseil de faire une fonction dédié pour chaque activité. Par exemple, une fonction pour recharger, et dedans tu pourras faire plusieurs traitements et l'appeler de différents endroits.

Est-ce clair ?

TheUnreaL34
Niveau 8
07 juin 2016 à 15:48:07

Bonjour merci pour ta réponse rapide , je comprend un peu mieux .
Parcontre pour le code , je dois creer un nouveau script je l'appelle par exemple "RecoilAnimation" et une fois que j'ai terminé le code je le fais glisser sur le gameobject de l'arme ?

Sujet : J'aide les gens dans Unity
   Retour haut de page
Consulter la version web de cette page