[RÉSOLU] [DB-AL] Sons de pas Unity 2D

Questions à propos de la partie audio, y compris les problèmes de script s'y rapportant.
damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

[RÉSOLU] [DB-AL] Sons de pas Unity 2D

Message par damien-max » 15 Juil 2018 13:53

Bonjour,
Je suis entrain de faire un script qui consiste à jouer un sons de pas toute les 0,3 secondes en fonction du type de sol. Le problème, c'est qu'une fois en jeu, ca ne fonctionne pas, et j'ai du mal à cerner le problème: Il n'y a aucune erreur dans la console, malgré que le jeu tourne. J'ai également assimilé les sons dans l'inspector. Voici le script:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class playAudioScript2 : MonoBehaviour {


	public AudioClip herbe;
	public AudioClip beton;
	public AudioClip feuille;
	public AudioSource source;
	Collider2D collider;
	public int index = 0;

	private KeyCode[] Fleche = { KeyCode.LeftArrow, KeyCode.RightArrow, KeyCode.Q, KeyCode.D };


	void Awake () {

		source = GetComponent<AudioSource>();
		collider = GetComponent<CapsuleCollider2D> ();
	}

	void OnTriggerEnter2D (Collider2D other) {
		if (Input.GetKeyDown(Fleche[index])){
			if (other.tag == "Herbe") {
				PlayTheSoundHerbe ();
			} else if (other.tag == "Beton") {
				PlayTheSoundBeton ();
			} else if (other.tag == "Feuille") {
				PlayTheSoundFeuille ();
			}
		}
	}

	void PlayTheSoundHerbe() {
		source.PlayOneShot(herbe);
		InvokeRepeating ("PlayTheSoundHerbe", 0f, 0.3f);

	}

	void PlayTheSoundBeton() {
		source.PlayOneShot(beton);
		InvokeRepeating ("PlayTheSoundBeton", 0f, 0.3f);
	}

	void PlayTheSoundFeuille(){
		source.PlayOneShot (feuille);
		InvokeRepeating ("PlayTheSoundFeuille", 0f, 0.3f);
	}


	void Update () {
		}
	}
Merci de votre aide.
Dernière édition par damien-max le 15 Juil 2018 20:13, édité 1 fois.

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: [DB-AL] Sons de pas Unity 2D

Message par Liven » 15 Juil 2018 15:32

Plusieurs choses m'interpellent dans ton code :

1 : par cette expression "Input.GetKeyDown(Fleche[index])", tu ne contrôle que si on appuie sur la touche "flèche gauche" puisque tu ne chance pas la valeur de "index"

2 : Tu utilise des invoke qui appel des fonctions qui contiennent elles même l'invoke ce qui fait que tu invoque en continue des invoke les uns sur les autres.

3 : Tu ne cancel jamais les invoke ce qui fait qu'ils peuvent tourner à l'infini.


Je vais pas te faire le code (sauf si t'es vraiment en galère) , mais voici la logique que j'aurais employé :
1 : je check la nature du sol à l'entrée dans les trigger . Et je met à jour une variable "CurrentClip" contenant le clip correspondant au type de sol.
2 : je check si mon perso est en mouvement en vérifiant les 4 directions. Si tu as l'info par ailleurs, dans le script qui gère les mouvements par exemple, récupère la plutôt que redétecter la captation des touche ça optimisera un peut la chose.
3 : Si mon perso "commence" un mouvement (donc il faut faire des bool "moving" "movingOld"), je lance un invoke de type play le CurrentClip
4 : Lorsque le perso "s’arrête" je cancel l'invoque


PS : je n'ai pas l'habitude (à tord ou à raison) d'utiliser les invoque, donc je peux me tromper dans leur fonctionnement, je fait juste ici part de mon raisonnement logique, pas de mon expérience.

damien-max
Messages : 54
Inscription : 19 Déc 2017 23:44

Re: [DB-AL] Sons de pas Unity 2D

Message par damien-max » 15 Juil 2018 20:13

D'accord, je vais voir ce que je peux faire. Merci! :)

Répondre

Revenir vers « Audio, musique et sons »