[RESOLU]Mouse audio listener?
Re: Mouse audio listener?
Pas encore regardé ton lien mais pour ta question :
ça va pas être simple car chaque audioSource est autonome dans son script : si tu clique en dehors de lui, son propre son se coupe.. Pour palier il faudrait plutôt passer par un seul script, qui gère tout les sons.
Ou alors:
- dans ton script du menu, avoir une static bool. quand tu clique sur le bouton menu, passe a true, quand tu clique ailleurs a false.
- quand tu clique ( dans tes void Update de chaque audioSource), lancer un coroutine, marquer une petite pause d'une demi seconde par exemple ( pour être sur que la static bool ai le temps de changer, en fonction de l'ordre d'execution des scripts), verifier que cette static bool eszt false pour couper le son. Comme ça, quand tu clique sur les GameObject, fonctionnement normal, si tu clique sur le bouton pause, pas de coupure de son.
ça va pas être simple car chaque audioSource est autonome dans son script : si tu clique en dehors de lui, son propre son se coupe.. Pour palier il faudrait plutôt passer par un seul script, qui gère tout les sons.
Ou alors:
- dans ton script du menu, avoir une static bool. quand tu clique sur le bouton menu, passe a true, quand tu clique ailleurs a false.
- quand tu clique ( dans tes void Update de chaque audioSource), lancer un coroutine, marquer une petite pause d'une demi seconde par exemple ( pour être sur que la static bool ai le temps de changer, en fonction de l'ordre d'execution des scripts), verifier que cette static bool eszt false pour couper le son. Comme ça, quand tu clique sur les GameObject, fonctionnement normal, si tu clique sur le bouton pause, pas de coupure de son.
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
- 1300vrtical
- Messages : 54
- Inscription : 17 Nov 2018 17:02
- Localisation : Bordeaux
Re: Mouse audio listener?
Quelle est la solution la moins gourmande en ressources ?
Et si je veux créer un seul script qui gère tous les sons, par où est-ce que je commence ?
Et si je veux créer un seul script qui gère tous les sons, par où est-ce que je commence ?
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" ![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
Re: Mouse audio listener?
c'est loin d’être des opérations gourmande, d'autant plus qu'elles ne se font qu’épisodiquement.
La solution dans mon "Ou alors" est la plus simple a mettre en oeuvre. Pour l'autre solution de tout centraliser, cest plus performant dans le sens ou tu n'aura plus qu'une void Update qui s'executera, alors que dans le cas "chacun pour soi" il y en a autant que de source audio.
Pour la centralisation en un seul script :
- es-tu au point sur l'utilisation des array/list ?
- es-tu au point sur l'appel d'autres scripts dans un script? interagir entre script et/ou class?
- différence entre public, private, static?
c'est des questions qui peuvent paraitre bête ne connaissant pas ton niveau, mais des domaines que j'ai mis un moment a appréhender/utiliser. ^^
La solution dans mon "Ou alors" est la plus simple a mettre en oeuvre. Pour l'autre solution de tout centraliser, cest plus performant dans le sens ou tu n'aura plus qu'une void Update qui s'executera, alors que dans le cas "chacun pour soi" il y en a autant que de source audio.
Pour la centralisation en un seul script :
- es-tu au point sur l'utilisation des array/list ?
- es-tu au point sur l'appel d'autres scripts dans un script? interagir entre script et/ou class?
- différence entre public, private, static?
c'est des questions qui peuvent paraitre bête ne connaissant pas ton niveau, mais des domaines que j'ai mis un moment a appréhender/utiliser. ^^
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
- 1300vrtical
- Messages : 54
- Inscription : 17 Nov 2018 17:02
- Localisation : Bordeaux
Re: Mouse audio listener?
Oui tu as raison, je n'ai qu'une vague notion des arrey/list et si la solution que tu m'as présenté est la plus simple aussi gourmande alors le rasoir d'Ockham exhorte de l'utiliser !
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" ![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
Re: Mouse audio listener?
elle est plus simple a mettre en place.
Il faut que tu arrive a déterminer quels éléments empêcheront le passage du son en mute ( ton gros cube rouge et ton bouton en haut) => affichage du menu
ensuite quel script fait apparaitre le menu? "MonScriptMenu"
dans ce script, il faut que tu ajoute/declare un nouvelle variable en static :
dans "MonScriptMenu" il faut pouvoir passer "CanMute" a false quand tu clique sur un des éléments ( bouton, Gros cube), et a true quand tu clique n'importe ou ailleurs.
dans ton script du son, disons "FadeSound", dans ta void Update, tu a une condition in(input..etc) avec directement ce que tu fais si la condition est vrai. il faudra a l'inverse metre ces actions dans un coroutine, que tu lancera quand tu cliquera.
cette coroutine marquera une minipause avant de verifier si si la bool "CanMute" est true. si oui, elle execute les actions, sinon il ne se passe rien.
il faudra bien évidement avoir la couroutine dans le script donc ajouter :
Il faut que tu arrive a déterminer quels éléments empêcheront le passage du son en mute ( ton gros cube rouge et ton bouton en haut) => affichage du menu
ensuite quel script fait apparaitre le menu? "MonScriptMenu"
dans ce script, il faut que tu ajoute/declare un nouvelle variable en static :
Code : Tout sélectionner
public static bool CanMute;
dans ton script du son, disons "FadeSound", dans ta void Update, tu a une condition in(input..etc) avec directement ce que tu fais si la condition est vrai. il faudra a l'inverse metre ces actions dans un coroutine, que tu lancera quand tu cliquera.
cette coroutine marquera une minipause avant de verifier si si la bool "CanMute" est true. si oui, elle execute les actions, sinon il ne se passe rien.
Code : Tout sélectionner
void Update ()
{
// quand on clique avec la souris
if (Input.GetMouseButtonDown (0)) {
// lance une coroutine pour couper le son ou non
StartCoroutine (MuteOrNot());
}
if (IsActive) {
// si IsActive, on force le volume a 1
MyAudio.volume = 1.0f;
} else {
// sinon on se sert de ToFade pour le volume
// ToFade qu'on a bien defini a 0 sion est sorti du collider
MyAudio.volume = 1.0f - ToFade;
}
}
Code : Tout sélectionner
IEnumerator MuteOrNot(){
// on attend la fin de la frame, etre sur que CanMute ai été modifié si besoin
yield return new WaitForEndOfFrame();
// on verifie que la bool CanMute soit bien sur true
// remplacer MonScriptMenu par le nom du script qui contient CanMute ( ou autre nom)
// remplacer si besoin CanMute par le nom que tu lui aura donné
if( MonScriptMenu.CanMute == true){
if( IsOver){
//on inverse isActive uniquement si la souris est sur l'objet (mode ON/OFF du volume)
IsActive = !IsActive;
}
else{
//sinon isActive est forcément faux ( on a cliqué ailleurs que sur l'object, il passe donc forcément inactif)
IsActive = false;
}
}
}
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
- 1300vrtical
- Messages : 54
- Inscription : 17 Nov 2018 17:02
- Localisation : Bordeaux
Re: Mouse audio listener?
Bonjour,
Il doit y avoir un truc que je n'ai pas compris
car je n'arrive pas à faire que mon CanMute de mon script, fonctionne dans mon FadeSound… J'ai essayé de le placer à différents endroits cependant rien ne fonctionne.
Je ne sais pas si je peux donner le code du menu, car je l'ai acheté sur le Unity asset Store, mais il semble fonctionner étant donné que j'ai un print() à la suite de mon CanMute, et que je vois les différents états booléens en fonction du clic sur le gros bloc rouge ou pas.
Qu'est-ce que j'ai bien pu manquer ?
![Image](https://i.goopics.net/ONm9N.png)
Il doit y avoir un truc que je n'ai pas compris
![Embarrassé :oops:](./images/smilies/icon_redface.gif)
![Dan.San :-|](./images/smilies/22.gif)
Je ne sais pas si je peux donner le code du menu, car je l'ai acheté sur le Unity asset Store, mais il semble fonctionner étant donné que j'ai un print() à la suite de mon CanMute, et que je vois les différents états booléens en fonction du clic sur le gros bloc rouge ou pas.
Qu'est-ce que j'ai bien pu manquer ?
![Dan.San :?:](./images/smilies/142.gif)
![Dan.San :?:](./images/smilies/142.gif)
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FadeSound : MonoBehaviour
{
bool IsOver = false;
bool IsActive = false;
public float ToFade ;
float scale = 1.0f;
AudioSource MyAudio;
void Start ()
{
//on recuper l'AudioSource du gameObject
MyAudio = GetComponent<AudioSource> ();
ToFade = 1.0f;
}
void OnMouseEnter ()
{
// quand la souris entre dans le collider
IsOver = true;
}
void OnMouseExit ()
{
// quand la souris sors du collider
IsOver = false;
// on force ToFade à zero pour etre sur que même avec un mouvement rapide de souris il reste pas un peu de son.
ToFade = 1.0f;
}
void Update()
{
// quand on clique avec la souris
if (Input.GetMouseButtonDown(0))
{
StartCoroutine(MuteOrNot());//je l'ai mis à la suite comme convenue
if (IsOver)//j'ai remis IsOver car sinon le volume n'était pas à 2 comme prévu lorqu'on clique.
{
//on inverse isActive uniquement si la souris est sur l'objet (mode ON/OFF du volume)
IsActive = !IsActive;
}
else
{
//sinon isActive est forcément faux ( on a cliqué ailleurs que sur l'object, il passe donc forcément inactif)
IsActive = false;
}
}
if (IsActive)
{
// si IsActive, on force le volume a 1
MyAudio.volume = 1.0f;
}
else
{
// sinon on se sert de ToFade pour le volume
// ToFade qu'on a bien defini a 0 sion est sorti du collider
MyAudio.volume = 1.0f - ToFade;
}
}
void OnMouseOver ()
{
// on calcul ToFade uniquement si la souris est sur le collider
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, 100)) {
Debug.DrawLine (transform.position, hit.point, Color.red);
ToFade = (transform.position - hit.point).magnitude / scale;
ToFade = Mathf.Clamp01 (ToFade);
}
}
IEnumerator MuteOrNot()
{
// on attend la fin de la frame, etre sur que CanMute ai été modifié si besoin
yield return new WaitForEndOfFrame();
// on verifie que la bool CanMute soit bien sur true
// remplacer MonScriptMenu par le nom du script qui contient CanMute ( ou autre nom)
// remplacer si besoin CanMute par le nom que tu lui aura donné
if (MouseInteraction.CanMute == true)
{
if (IsOver)
{
//on inverse isActive uniquement si la souris est sur l'objet (mode ON/OFF du volume)
IsActive = !IsActive;
}
else
{
//sinon isActive est forcément faux ( on a cliqué ailleurs que sur l'object, il passe donc forcément inactif)
IsActive = false;
}
}
}
}
![Image](https://i.goopics.net/ONm9N.png)
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" ![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
Re: Mouse audio listener?
Si tu ne veux pas partager le code entier partage au moins :
- la partie ou tu défini la variable CanMute;
- la partie ou tu assigne la valeur de CanMute.
de plus est-ce que c'est ligne te donne une erreurs.
Ensuite, d’après ton screen, tu dois avoir en effet un problème pour ton CanMute, il semble en permanence sur false, et passe a true juste quand tu clique. alors qu'il devrait etre true en permanence, passer a false quand tu clique sur le grosCube, et le rester, et ne repasser a true que quand tu clique ailleurs du grosCube, et le rester tant tu ne reclique pas sur le grosCube
- la partie ou tu défini la variable CanMute;
- la partie ou tu assigne la valeur de CanMute.
de plus est-ce que c'est ligne te donne une erreurs.
Code : Tout sélectionner
if (MouseInteraction.CanMute == true)
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
- 1300vrtical
- Messages : 54
- Inscription : 17 Nov 2018 17:02
- Localisation : Bordeaux
Re: Mouse audio listener?
Ça marche, c'est formidable
merci pour tout!
je n'avais pas compris que le CanMute, tu devais rester en True ou en False en continue, du coup je l'ai indexée sur la fermeture et l'ouverture de mon panneau (Pepito) dans mon UImanager que je peux réveler:
Cordialement
1300vrtical
![Dan.San :amen:](./images/smilies/59.gif)
![Dan.San :coeur:](./images/smilies/120.gif)
je n'avais pas compris que le CanMute, tu devais rester en True ou en False en continue, du coup je l'ai indexée sur la fermeture et l'ouverture de mon panneau (Pepito) dans mon UImanager que je peux réveler:
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;//qui me permet de faire des transitions de panneaux
public class UImanager : MonoBehaviour {
public RectTransform Pepito;
public static bool CanMute;
// Use this for initialization
void Start () {
CanMute = true;
print(CanMute);
}
// Update is called once per frame
public void PepitoBtn()
{
Pepito.DOAnchorPos(new Vector2(850, 0), 0.5f);//pepito le panneaux qui apparé en cliquant sur le cube.
CanMute = true;
print(CanMute);
}
public void ClosePepitoBtn()
{
Pepito.DOAnchorPos(new Vector2(0, 0), 0.5f);
CanMute = false;
print(CanMute);
}
}
1300vrtical
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" ![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE
![Dan.San :merci:](./images/smilies/73.gif)
Voici mon super projet: FLANERIE