[RESOLU]Mouse audio listener?

Questions à propos de la partie audio, y compris les problèmes de script s'y rapportant.
Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

[RESOLU]Mouse audio listener?

Message par 1300vrtical » 17 Nov 2018 17:57

Bonjour,
Je m'appelle Maxime et je travaille sur un projet de site en 3D isométrique.
J'ai déjà travaillé avec unity avant seulement sur deux projets AR(vuforia) et vr ( je n'ai jamais vraiment eu besoin de coder sur ces précédents projets/pas de gameplay).
Pour ce nouveau projet je n'arrive pas à faire quelque chose qui me semble-t-il doit être très simple !
J'aimerais, comme expliqué sur ce gif, pouvoir augmenter le son de façon douce à l'approche d'un objet et pouvoir bloquer le son en double cliquant sur le centre du trigger.
J'ai compris comment fonctionnait audio source (sur objet) et audio listener(Sur la sourie) mais je n'arrive pas à trouver l'objet sourie dans les assets. Je ne sais pas si je dois passer par du script, et si oui lequel ?
Merci à ceux qui prendront le temps de me répondre en passant par là!

Cordialement
1300vrtical
Dernière édition par 1300vrtical le 01 Déc 2018 18:18, édité 1 fois.
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mouse audio listener?

Message par Max » 17 Nov 2018 19:31

Bonsoir,
1300vrtical a écrit :
17 Nov 2018 17:57
J'ai compris comment fonctionnait audio source (sur objet) et audio listener(Sur la sourie) mais je n'arrive pas à trouver l'objet sourie dans les assets. Je ne sais pas si je dois passer par du script, et si oui lequel ?
Les informations liées à la souris se trouvent dans la partie Input. Tu peux récupérer sa position, l'état des boutons, etc...
Et va falloir scripter, oui.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

Re: Mouse audio listener?

Message par 1300vrtical » 19 Nov 2018 19:32

Bonjour,
Merci pour votre réponse Max :amen: !
Je pressentais qu'il fallait bien passer par du script pour pouvoir faire ce que je voulais :pleur4: .(n'existe-t-il pas un système nodal pour aider à la création d'un script sur unity ? :?: )

Suite à votre réponse, et en regardant plusieurs tutoriels, je suis tombé sur 2 solutions qui me semble être les bonnes, mais je n'arrive pas à les faire fonctionner correctement :

La première solution consiste a créer un curseur 3D dans le monde qui suit la souris.
Cette solution a pour avantage de me permettre de modifier le volume en fonction de la distance de ma souris, mais le curseur sur la souris x est raccord, alors qu'en y, le curseur ne me permet pas d'aller ni tout en haut ni tout en bas, il y a un décalage. Et je ne sais pas comment faire pour bloquer sur play le son joué en cliquant sur mon objet. Je pense aussi avoir un problème s'il y a un dénivelé, car le curseur ne change pas de Z.

La seconde solution que j'ai trouvé sur internet et d'utiliser audioManager.cs + changeColor.cs. Cette solution a pour elle de pouvoir pointer vers n'importe quel objet affiché et survolé par la souris (mouseHover). Elle ne peut cependant pas prendre en compte l'augmentation du volume en fonction de la distance objet souris et recommence le son joué au début à chaque fois que l'objet sélectionné.
Image

Est-ce que quelqu'un aurait une solution à mon problème s'il vous plaît ?
Merci d'avance à ceux qui prendront le temps de me répondre :amen: ,
Cordialement :hello:
1300vrtical.

ANNEXE:
Code audioManager

Code : Tout sélectionner

using UnityEngine.Audio;
using System;
using UnityEngine;

public class AudioManager : MonoBehaviour {
	public Sound[] sounds;



	void Awake()
	{
		foreach (Sound s in sounds) {
			s.source = gameObject.AddComponent<AudioSource> ();
			s.source.clip = s.clip;
			s.source.loop = s.loop;

			//s.source.outputAudioMixerGroup = mixerGroup;
		}
	}
	public void Play (string name)
	{
		Sound s = Array.Find (sounds, sound => sound.name == name);
		s.source.Play ();
	}
	public void Stop (string name)
	{
		Sound s = Array.Find (sounds, sound => sound.name == name);
		s.source.Stop ();
	}
}
Code changeColor

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class changeColor : MonoBehaviour {

	public Color startColor;
	public Color mouseOverColor;
	bool mouseOver = false;

	void OnMouseEnter(){
		mouseOver = true;
		GetComponent<Renderer>().material.SetColor("_Color", mouseOverColor);
		FindObjectOfType<AudioManager> ().Play ("BBoing");
	}

	void OnMouseExit() {
		mouseOver = false;
		GetComponent<Renderer>().material.SetColor("_Color", startColor);
		FindObjectOfType<AudioManager> ().Stop ("BBoing");
	}
}


Code MouseCorsor qui me permet de mettre un AudioListener sur l'ojb Cursor

Code : Tout sélectionner

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

public class mouseCursor : MonoBehaviour {

	// Use this for initialization
	void Start () {
		Cursor.visible = false;
		
	}
	
	// Update is called once per frame
	void Update () {
		Vector2 cursorPos = Camera.main.ScreenToWorldPoint (Input.mousePosition) ;
		transform.position = cursorPos;
		
	}
}
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6178
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Mouse audio listener?

Message par boubouk50 » 19 Nov 2018 19:48

Dans ce cas, je te conseillerai de faire un Physics.Raycast depuis la souris.
Les objets de la scène DOIVENT avoir un collider pour que cette méthode fonctionne, car elle utilise le moteur physique.

Le raycast te renvoie le point de collision entre le vecteur donné (souris depuis la caméra) et le collider de l'objet intersecté. Tu as donc toutes les infos: Objet sélectionné et point dans l'espace sur l'objet donc son 3D.
Tu peux aussi faciliter la tâche du raycast en spécifiant un layer (pour ne pas toucher les éléments indésirables, par exemple)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

Re: Mouse audio listener?

Message par 1300vrtical » 20 Nov 2018 18:47

Bonjour, N'ayant pas réussi à faire un script de raycasting correct j'en ai acheté un sur le unity asset store. J'ai essayé de le faire fonctionner, mais après moultes d'aventure, il s'avère que ce n'est pas ce que je recherche. Il semblerait que le raycasting soit booléen du coup incompatible avec l'idée du fade non? Je ne comprends pas grand chose aussi, je suis perdu. Et tellement désemparé, je pensais que ce serait beaucoup plus simple.

Existerait-il pas un moyen de renvoyer les informations des objets vers canvas pour pouvoir faire ensuite ce que je veux?

Cordialement


1300vrtical

https://vimeo.com/301882750
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Avatar de l’utilisateur
Sebela
Messages : 141
Inscription : 25 Juin 2014 21:39

Re: Mouse audio listener?

Message par Sebela » 20 Nov 2018 19:04

En effet, le raycast renvoie une donnée booléenne, cependant comme dit boubouk tu peux récupérer l'info du hit => point de collision entre ta souris et l'objet, et mesurer la distance entre le centre du gameobject et le hit avec un Vector3.Distance(hit, gameObject)

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Mouse audio listener?

Message par djulio74 » 20 Nov 2018 19:16

Et pourtant avec ce que te suggérais Boubouk50, tu n'avais rien besoin d'acheter.. dommage.
Le rayCast peut lancer un rayon en gros partant de la caméra, passant par le curseur souris et continuant jusqu'a trouver un obstacle.
D'un poit de vue de la camera, ça te donne le collider sur lequel est ta souris, et te donne la position dans le repère monde du point de contact.

Ton "icone" cercle+cône peut être considérée comme plane, il suffit de lui ajouter un planeCollider et un bout de script calculant la distance entre le contacte et le centre du GameObect.

Code : Tout sélectionner

public class FadeSound : MonoBehaviour {
	private float scale = 5.0f;
	public float ToFade;
	void OnMouseOver ()
	{
		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		RaycastHit hit;
		if (Physics.Raycast (ray, out hit, 100)) {

			// trace une ligne rouge de debug depuis le centre du transform jusqu'au point d'interessection du raycast.
			Debug.DrawLine(transform.position, hit.point, Color.red);
			// calcul de la distance entre deux points, en unité.
			// scale est pour l'echelle, si ton plan fait 10 de coté, le scale devra etre de 5.0f 
			//pour que fade soit compris entre 0 ( contacte au centre) et 1 ( contacte àla limite du planeCollider)
			ToFade = (transform.position-hit.point).magnitude/scale;

			// Clamper ToFade pour qu'il ne depasse pas 1.0f ( si t'es dans un coin du planeCollider, tu sors du cerlce inscrit au carré
			ToFade = Mathf.Clamp01(ToFade);
		}
	}
}
essaye juste tu cré un 3d object plane, positionné bien visible a ta caméra, et tu lui met ce script. Par défaut un plane fait 10 de coté, d’où le scale à 5.0.
Ensuite libre a toi d'utiliser la variable ToFade pour contrôler le volume de la source audio par exemple

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6178
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Mouse audio listener?

Message par boubouk50 » 20 Nov 2018 19:22

La spatialisation dépend de la distance entre le listener et l'audiosource.
L'idée derrière le Raycast est de trouver la profondeur, ce que ne fais pas le ScreenToWorld.
Tu es dans un jeu 3D, mais dans ton idée de jeu isométrique, tu as une vision 2D. Dans ce cas, il va falloir travailler ta géométrie pour gérer cela de façon planaire. Du genre, les gameObjects cliquables ont un collider circulaire plan en billboard (donc toujours face à la caméra) pour simuler un collider 2D.
Cela pourrait, là je ne m'avance pas, être simuler en 2D par dessus le monde 3D. Mais c'est un peu plus copieux à mettre ne place tout de même.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

Re: Mouse audio listener?

Message par 1300vrtical » 21 Nov 2018 16:17

Bonjour et merci pour toutes ces informations :amen: ,
Je comprends effectivement que je recherchais à faire de la 3D alors que visuellement mon projet est en 2D. En utilisant 3D sound j'avais aussi un problème de spatialisation gauche-droite du son que je ne savais pas encore comment gérer. Je ne savais pas que je pouvais utiliser Raycast de cette manière. Les tutos que je trouve reste sensiblement les mêmes et c'est pour ça que je me tourne vers les forums.
Je suis une bille en programmation :happy1: . J'arrive à les lire à peu près à les comprendre, mais pas en écrire. Du coup je n'arrive pas à sortir la valeur ToFade pour la soustraire au volume, car elle serait non statique :| . J'y arrive pas dès lors qu'il fait sortir autre chose des fonctions Debug... :gene:

merci à ceux qui m'aide et m'aiderons.

Ps: je ne sais pas quoi échanger contre un peu d'aide sur ce j'ai des compétences en graphisme et 3D si ça interesse quelqu'un.
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Mouse audio listener?

Message par djulio74 » 21 Nov 2018 16:33

Tu utilisait ta souris comme audioListener,
utilise plutot la camera pour le listener, et avec un audio source par GameObject censé produire un son, auxquels tu désactive le 3dSound, laisse le "play on awake" activé mais défini le volume a zéro.

Dans mon script, que tu attache à chaque objet sonore, tu ajoute une void Start dans laquelle tu recupere le Component audioSource du Gameobject. Du coup dans la void OnMouseOver tu ajoute a la fin un MyAudioSource.volume = ToFade; par exemple.

tu peux aussi ajouter une void OnMouseExit pour bien mettre le volume a 0 dès que ta souris ne survole plus l'objet.

Regarde un peu tout ça, et si vraiment tu n'y arrive pas je te ferais un petit script d'exemple. ;-)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Répondre

Revenir vers « Audio, musique et sons »