[C#] Son & Menus

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Dreaa
Messages : 7
Inscription : 02 Mars 2015 20:44

[C#] Son & Menus

Message par Dreaa » 02 Mars 2015 21:31

Hello World !

J'ai trois choses à régler pour terminer mon projet de mini-jeu que je n'arrive malheureusement pas à faire tout seul.
  • • Menu de démarrage
    • • Deux boutons, un pour lancer le jeu, un pour quitter. Je suppose que je dois donc créer une nouvelle scène pour ceci ? Si c'est le cas, comment charger une nouvelle scène pour le bouton lancer, car pour quitter je crois qu'il suffit d'un Application.Quit();


    • Son sur événement
    • • J'ai actuellement un trigger sur une collision, le " joueur " représenté par une sphère rentre en collision avec des cubes afin de les faire disparaître. Ce problème est déjà gérer, ce que je voudrais c'est au moment de la disparition du cube un son soit joué, le son est déjà importé dans unity mais je n'arrive pas a le faire jouer au moment de la collision :/
    • Menu de redémarrage
    • • Une fois que la partie se termine, victoire ou défaite, j'aimerais qu'un menu apparaissent, je gère déjà la victoire et défaire une fois les conditions remplie ( tomber du socle ou bien atteindre le score maximum ) ce qui est très basique, actuellement j'ai un texte de défaite / victoire qui s'affiche, j'aimerais aussi afficher deux boutons " Recommencer " / " Quitter ". J'ai les deux boutons créer via un canvas mais je n'arrive pas a les lier aux événements de victoire/défaite comme j'ai pu le faire pour les deux textes. Je bloque donc ici.

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: [C#] Son & Menus

Message par LudlowFx » 02 Mars 2015 21:38

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Dreaa
Messages : 7
Inscription : 02 Mars 2015 20:44

Re: [C#] Son & Menus

Message par Dreaa » 02 Mars 2015 21:51

Salut et merci de ta réponse si rapide :)

Je verrais pour le changement de scène plus tard mais je pense pas rencontrer de soucis la dessus, merci.

Alors voilà mon code pour l'audio comme indiqué dans la docs ( j'avais déjà trouvé :p ) et ça ne marche pas du tout, rien ne se passe quand le trigger et la condition sont remplis.

Code : Tout sélectionner

void OnTriggerEnter (Collider other)
	{
		if (other.gameObject.tag == "PickUp") 
		{
			other.gameObject.SetActive (false);
			count += 1;
			SetCountText ();
			audio.Play();
		} 
Pour le troisième point j'ai actuellement un canvas avec un bouton restart & quit. Cependant j'aimerais qu'il n'apparaissent seulement quand la condition de victoire OU défaite est accomplis qui se résulte par ceci :

Code : Tout sélectionner

	void SetCountText ()
	{
		countText.text = "Compte = " + count.ToString ();
		if (count >= 24) 
		{
			Time.timeScale = 0;
			winText.text = " Bien joué ! Vous avez gagné !";
		}
	}

Code : Tout sélectionner

	else if (other.gameObject.tag == "Water")
		{
			Time.timeScale = 0;
			loseText.text = " Dommage, vous avez perdu !";
		}
Et donc j'aimerais que quand l'une de ses conditions est remplis mon Canvas de fin de partie apparaissent, car actuellement il est la tout le temps donc c'est pas très ergonomique ^^'

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: [C#] Son & Menus

Message par LudlowFx » 02 Mars 2015 22:13

Pour l'affichage du menu de victoire/défaite comme je disais, tu désactives le GameObject par défaut (plus d'encombrements comme cela) et lorsque l'une de tes deux conditions est remplie tu lance un gameObject.SetActive(true); tout simplement.

Pour le problème de son, pas vraiment sûr, mais tu es certains que la condition est bien remplie ? (Debug.Log pour vérifier rapidement) Dès fois une petite erreur dans le nom du tag (majuscule/minuscule) ou peut-être le mauvais fichier audio attaché à l'AudioSource (cela m'était arrivé une fois, j'avais attaché un fichier audio corrompue du coup c'était un son blanc qui sortait). Ou encore peut-être que Mute est activé, le son est à zéro sur l'Audiosource....
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Dreaa
Messages : 7
Inscription : 02 Mars 2015 20:44

Re: [C#] Son & Menus

Message par Dreaa » 02 Mars 2015 23:32

Pour l'affichage j'ai donc mis ça et la condition ici est bien réalisée vue que le test " Dommage ... " s'affiche et le message dans les logs aussi. Par contre le menu non. J'ai essayé avec gameObject tout seul, et donc la j'ai mis Menu.gameObject en ayant créer une variable public auparavant et en mettant le canvas dans cette variable.

Code : Tout sélectionner

else if (other.gameObject.tag == "Water")
		{
			Time.timeScale = 0;
			loseText.text = " Dommage, vous avez perdu !";
			Menu.gameObject.SetActive(true);
			Debug.Log ("Testdefaite");
		}
Et enfin pour le son, je l'ai mis en " awake " et cette fonctionnalité fonctionne pourtant je reçois le message d'erreur suivant : " MissingComponentException : There is no 'AudioSource' attatche to the "Player" game object, but a script is trying to access it. " Donc je vois bien qu'il y un problème concernant le lien entre le son et le gameObject player cependant comme on peut le voir sur l'image, il y a bien le Pick Up Sound lié à mon gameObject player, je ne comprend donc plus rien >.<

http://image.noelshack.com/fichiers/201 ... -titre.jpg ( l'image étant coupé je met juste le lien )

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: [C#] Son & Menus

Message par LudlowFx » 03 Mars 2015 00:03

Pas pratique sans le visuel des variables liés aux codes que tu montres.

Normalement, cela devrait fonctionner (nom de la variable pour l'exemple)

Code : Tout sélectionner

public GameObject canvasEnd;

else if (other.gameObject.tag == "Water")
{
    canvasEnd.SetActive(true);
}
J'ai du mal à voir le souci, à part si quelque part dans ton script il y est une ligne de code qui fait un SetActive(false) en boucle.

Pour le son, l'erreur est explicite et l'image le confirme. Parfois il faut vraiment prendre au pied de la lettre les erreurs de la console. There is no 'AudioSource' attatche to the "Player"

Le composant "AudioSource" n'est pas présent sur le GameObject nommé "Player".

Ta variable PickUpSound, telle quelle est écrit fonctionnerait pour émettre du son avec "PlayOneShot(iciTaVariableQuiPointeVersLeSon)"
http://docs.unity3d.com/ScriptReference ... eShot.html

Lorsque je parlais de mute, de volume... ce n'était ton son en lui même mais bien d'un AudioSource, celui qui manque à ton GameObject Player. Si ton AudioSource est établi sur un autre GameObject (par nécessité par exemple) il faut que tu, dans ton code, pointe le GameObject en question pour en récupérer son composant AudioSource et jouer/stopper le son associé.
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Dreaa
Messages : 7
Inscription : 02 Mars 2015 20:44

Re: [C#] Son & Menus

Message par Dreaa » 03 Mars 2015 12:04

Bon bonne nouvelle, pour le son j'ai régler le problème. J'ai supprimé tout ce que j'avais fait j'ai créer un composant sur le gameobject player et j'y ai mis le son, rien de plus simple en fait :x.

Par contre pour le menu, ça ne marche toujours pas. Je te file des screens et mon script en entier pour que tu vois ou ça coince.

http://image.noelshack.com/fichiers/201 ... -titre.jpg

Les " ***** " c'est pour t'indiqué ou je traite le menu ^^

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour 
{
	public float speed;
	public GUIText countText;
	public GUIText winText;
	public GUIText loseText;
	private int count;
        ****public GameObject Menu;

	void Start ()
	{
		count = 0;
		SetCountText ();
		winText.text = "";
	}

	void FixedUpdate ()
	{
		float moveHoritontal = Input.GetAxis ("Horizontal");
		float moveVertical = Input.GetAxis ("Vertical");

		Vector3 movement = new Vector3(moveHoritontal,0.0f, moveVertical);

		rigidbody.AddForce (movement * speed * Time.deltaTime);
	}

	void OnTriggerEnter (Collider other)
	{
		if (other.gameObject.tag == "PickUp") 
		{
			other.gameObject.SetActive (false);
			count += 2;
			SetCountText ();
			audio.Play();
			Debug.Log ("testcondition");
		} 

	else if (other.gameObject.tag == "Water")
		{
			Time.timeScale = 0;
			loseText.text = " Dommage, vous avez perdu !";
			*******Menu.SetActive(true);
			Debug.Log ("Testdefaite");
		}
	}

	void SetCountText ()
	{
		countText.text = "Compte = " + count.ToString ();
		if (count >= 24) 
		{
			Time.timeScale = 0;
			winText.text = " Bien joué ! Vous avez gagné !";
			******Menu.SetActive(true);
		}
	}
	
}

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: [C#] Son & Menus

Message par LudlowFx » 03 Mars 2015 16:46

Nickel pour le son.

Pour le Menu, bon j'avoue je ne suis pas réveillé encore (matin pour moi là) mais la seule chose qui me vient à l'esprit, car tel quelle cela devrait fonctionner, c'est que (sur ton image) dans le script attaché à ton GameObject Player au lieu de renseigner le GameObject Menu (celui étant dans ta Hierarchie) tu as renseigner le prefab.

Sélectionne bien le "Menu" qui se trouve dans ta hierarchie et non celui en prefab et met le sur le script.

Après, j'avoue sécher un peu là :D
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Dreaa
Messages : 7
Inscription : 02 Mars 2015 20:44

Re: [C#] Son & Menus

Message par Dreaa » 03 Mars 2015 18:08

Je n'ai malheureusement pas fait de prefabs pour le canvas ^^'

Dreaa
Messages : 7
Inscription : 02 Mars 2015 20:44

Re: [C#] Son & Menus

Message par Dreaa » 04 Mars 2015 13:52

Personne d'autre à une once d'idée ? Sinon je pense faire une nouvelle scène pour le menu de fin de partie mais je trouve ça absolument infâme comme manière de faire, et sachant que ce projet est fait en sorte pour que je rentre dans une école ça m'embêterai vraiment de montrer quelque chose d'aussi sale :/

Répondre

Revenir vers « (C#) CSharp »