Jump to content
lozdanmultimedial

Como pasar valores de variables entre scripts?

Recommended Posts

Hola a todos .

Quisiera saber como se puede hacer para pasar valores de un scripta otro ( si es posible un pequeño ejemplo vendría muy bien).

LA idea es implementar interactividad con sonido capturado desde micrófono, para lo cual el Gameobjet tiene un audio listener y un audio source y un algoritmo de análisis del sonido capturado del cual tomo el volumen para hacer avanzar a mi personaje ( esto funciona muy bien) Ahora si deseo que ese mismo volumen interaccione con la luz de otro Game objet al cual le puse también un audio listener y un audio source, pareceiera que este no capta el sonido, es decir pareciera que solo un audio listener captura el sonido y el otro no.

La solución que pensé es que el script que realiza el analisis de sonido le pase los valores que va encontrando al script que maneja la intensidad de la luz del otro objeto.

POngo a disposición de quien lo solocite los scripts.

 

desde ya muchas gracias

Share this post


Link to post
Share on other sites
hace 5 horas, GSG3D said:

No puedes tenes mas de un audio listener, si mal no me equivoco.

ciertamente, solo uno por escena. el la version 4.x solo el primer audio listener en la jerarquia funcionaba, los demas no y ademas te arrojaba un error. en la version 5.x me imagino que es igual

para pasar parametros entre scripts (como valores de una variable) primero dicha variable de ser publica, en JS por default todas las variables que declaras al principio del script se comportan como publicas (a menos que las declares especificamente como privadas)

despues en el otro script al que quieras pasarle el valor, se lo asignas a una variable vacia referenciandola por GetComponent

var variableUno;
variableUno = GetComponent.elOtroScript.laOtraVariable;

este ejemplo funciona si tanto el script que genera el valor como el que la recibe estan en el mismo GameObject, si la variable esta en un script contenida en otro game object, tambien debes referenciarla

var variableUno;
var elOtroObjeto: GameObject;

variableUno = elOtroObjeto.elOtroScript.laOtraVariable;

 

Share this post


Link to post
Share on other sites

Buenas a todos, la respuesta que ha dado yugosama es completamente correcta pero creo que no la ha explicada del todo bien para una persona que acaba de empezar. Voy a dar la mía a ver si me explico bien. Primero lo básico, la jerarquía de Unity se forma a través de GameObject (osea todo objeto que tenemos dentro de la escena y que sale con nombre en la pestaña hierachy es un GameObject), estos GameObjects, además de varios tipos de información como la transformación del objeto en el espacio, se componen de Componentes. Los componentes no son más que código que describen el comportamiento del GameObject. 

Una vez dejado esto claro para hacer lo que quieres tienes que conseguir la instancia del GameObject que contiene el Componente (script) con la variable que quieres utilizar, en este caso necesitaras la instancia del GameObject que tiene el audio listener, el audio source y el algoritmo de análisis del sonido capturado (a partir de aquí llamaremos a este GameObject Escuchador). Para conseguir esta instancia se puede hacer mediante los métodos estáticos, GameObject.Find("nombre del gameObject"), GameObject.FindGameObjectWithTag("Tag del GameObject") o creando una variable publica del tipo GameObject. Una vez tenemos el GameObject necesitamos pedirle la instancia al Componente(script) que realiza el análisis de sonido(a partir de aquí lo llamaremos AnalisisSonido), para ello utilizaremos el método InstanciGameObject.GetComponent<tipo de componente>()Este script tendrá que tener una variable pública o un método que devuelva el volumen del sonido. Para que quede mas claro te voy a poner un código de ejemplo

// objecto donde guardaremos el GameObject que contiene el audiolistener y el algoritmo de analisis //
private GameObject _escuchador;

// instancia al componenet (en este caso script) con el algoritmo de analisis //
private AnalisisSonido _analisis;

void Start()
{
	// buscamos la instacia al GameOnject con el algoritmo de analisis //
	_escuchador = GameObject.Find("Escuchador");
   // pedimos el componente (en este caso script) que contiene el algoritmo de analisis //
	_analisis = _escuchador.GetComponent<AnalisisSonido>();
}
      
 void Update()
 {
    // mostamos en una traza el volumen que devuelve el algoritmo //
	Debug.Log("volumen: " + _analisis.volumen);
 }

 

Las lineas donde buscamos el GameObject y el componente se podrían dejar en una como hizo yugosama, pero para dar claridad al código la pongo en dos pasos.

 

Dime si te ha sido útil.

 

Share this post


Link to post
Share on other sites

En Unity existen sonidos 2D/3D.

El audio 2D no tiene en cuenta la distancia entre los componentes AudioSource y AudioListener. Configurar audio 2D: http://answers.unity3d.com/questions/915298/unity-5-where-is-2d-audio.html

El sonido 3D tiene en cuenta la distancia entre el AudioSource y el AudioListener y necesitan ser configurado los parámetros MaxDistance y la curva RollOff. Tutorial oficial: https://unity3d.com/es/learn/tutorials/topics/audio/audio-listeners-sources?playlist=17096

En Unity 5 añadieron un AudioMixer y AudioMixerGroups para controlar el volumen general del juego(gui,musica,efectos), por lo que no es necesario crear variables ni modificar uno a uno el volumen de cada AudioSource. Tutorial oficial: https://unity3d.com/es/learn/tutorials/modules/beginner/5-pre-order-beta/audiomixer-and-audiomixer-groups?playlist=17096

Share this post


Link to post
Share on other sites

hola tengo un ligero problema con esta script 

var scriptDialogos;
private var texto : String;

function Start () {
	
	scriptDialogos = GameObject.Find("ScriptDialogos");
	Empezar();	
}

function Update () {
	
}
function Empezar (){

	texto = scriptDialogos.GetComponent(Dialogos).dialogo1 + player.name + scriptDialogos.GetComponent(Dialogos).dialogo2;
}

no me salta error pero no me sale en el texto lo que tendria que salir solo me sale el nombre del player... como puedo hacerlo?

Share this post


Link to post
Share on other sites

ya lo e solucionado el error estaba en que tenia que declarar variebles para cada getcomponent y luego el texto igualarlo a esas variables y asi me a funcionado

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...