Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Problemas al pasar Cancion

Iniciado por davidreylug, Noviembre 20, 2016, 12:24:07 AM

Tema anterior - Siguiente tema
Hola a todos en el foro y en especial a los que estan leyendo este post, agradezco estar aqui.
 
Espero y puedan ayudarme con un pequeño problema de logica que presento en mi proyecto, en general lo que pretendo hacer es un menu de musica, es decir, tengo en una escena 3 cubos y cuando paso de raton se reproduce una cancion. el problema es que cuando le doy siguiente, quiero que no me destruta el cubo donde esta la cancion (AudioSource).
 
En mi cubo hay
 
1.- Script de pausar y reproducir con el OnMouseEnter y Exit, tambien estoy validando con una condicion que cuando este reproduciendo, se active el Script donde esta el DontDestroyOnLoad
 

public AudioClip ACHimno;   //Variable de tipo Audiclip para guardarla en la siguinete escena
    AudioSource ASHimno;   //Variable para acceder al componente audioSource de mi GO
    NoDestruir NoDes;     //Acceder a mi componente no destruir
    void Start ()
    {
        ASHimno = GetComponent<AudioSource>();
        NoDes = GetComponent<NoDestruir>();
}
         
void Update ()
    {
        if (ASHimno.isPlaying == true)  //Si la cancion esta en play que se active la funcion de no destruir
        {
            NoDes.enabled = true;
        }
        else
            NoDes.enabled = false;   //Si no que este en False
}
    void OnMouseEnter()
    {
        ASHimno.Play();
    }
    void OnMouseExit()
    {
        ASHimno.Pause();
    }
}

 
2.- en el Script de DontDestroyOnLoad solo tengo esto
 

NoDestruir ND;
    void Awake()
    {
            DontDestroyOnLoad(this.gameObject);
    }
    void Start()
    {
        ND = GetComponent<NoDestruir>();
    }
}

 
 
 
El problema es que si me comple la condicion de que se desactive y active el Script donde esta en DontDestroyOnLoad, pero no me lo repesta y no lo destruye, y eso que solo es con un boton solamente.
 
Investigue que solo el DontDestroyOnLoad se usa en el Awake y en el Start, y quisiera recibir algunas opiniones o mejores practicas para estos casos.
 
Tambien he pensado en utilizar un Script donde recolecte la cancion que se esta reproduciendo y guardalo y ese no destruirlo...pero no se si funcione
 
De antemano gracias por su tiempo y recibo comentarios.
 
Saludos

Hola, y que pasaria exactamente cuando le das siguiente? osea tenes tres cubos pasas el mouse y te reproduce la cancion, le das siguiente y que tendria que suceder? por DontDestroyOnLoad se usa justamente cuando cargas una nueva escena solamente.
 
 

Cita de: lightbug date=1479602417Hola, y que pasaria exactamente cuando le das siguiente? osea tenes tres cubos pasas el mouse y te reproduce la cancion, le das siguiente y que tendria que suceder? por DontDestroyOnLoad se usa justamente cuando cargas una nueva escena solamente.
   
   
       
   


 
 
Cita de: lightbug date=1479602417Hola, y que pasaria exactamente cuando le das siguiente? osea tenes tres cubos pasas el mouse y te reproduce la cancion, le das siguiente y que tendria que suceder? por DontDestroyOnLoad se usa justamente cuando cargas una nueva escena solamente.
   
   
       
   


Yo esperaria que cuando pase el raton por encima del cubo y se este reproduciendo la cancion y siguiera, me activara el Script del DontDestroyOnLoad y que siga la cancion seleccionada. :S no se si mi logica sea buena, o exita otra mejor :D




   
      Yo esperaria que cuando pase el raton por encima del cubo y se este reproduciendo la cancion y siguiera.  me activara el Script del DontDestroyOnLoad y que siga la cancion seleccionada. :S no se si mi logica sea buena, o exita otra mejor :D
   

[/quote]
 
Disculpa pero todavia no entiendo, que es el "siguiera"? no estas diciendo si es una sola escena o multiples escenas.
 
Fijate bien de que se trata DOntDestroyOnLoad
 
Dont destroy on load
 
Dice que al pasar de escena 1 a escena 2 todos los objetos de la escena 1 se borran y se cargan los de la 2, si en cualquier momento pones DontDestroyOnload los objetos de la escena 1 que lo tienen no seran borrados y permaneceran en la escena 2.
 
 
 
Explica muy detalladamente el siguiera.
 
Saludos

cuando me refiero al siguiera, quiero decir que no destruya mi GameObject donde esta mi AudioSource reproduciendose y que al pasar a la sig. escena no se destruya y siga en reprudccion :D  y una disculpa porque no me exprese bien. 
 
Y coincido contigo en la forma en la q trabajan el DontDestroyOnLoad, solo que no se si lo estoy utilizando de la mejor manera, ya que he visto que muchos aplican el DontDestroy en un script donde estan los datos guardado para posteriormente utilizar los datos... y no como yo, q quiero q no se destuya el GameObject como tal. no se si me explico? :D
 
Saludos

Ok esta bien, como pasas de escena en escena? porque asi lo estas poniendo en DostDestroyOnLoad cada vez que se esta reproduciendo, segun vi en otros lugares esta funcion solo se llama en start y awake, es decir que si te paras en todos los cubos todos sobreviven

No es una funcion boleana, como para activar/desactivar DontDestroy.. Lo mejor seria setear tal  objeto al cambio de escena, o mejor seria realizar un controlador con esta caracteristica y solamente uses los botones para cambiar el clip.

Noviembre 20, 2016, 06:29:51 AM #7 Ultima modificación: Noviembre 20, 2016, 06:36:01 AM por lightbug
Mira aca te dejo un ejemplito:
 
"CuboMusic.cs"
 

using UnityEngine;
using System.Collections;
[RequireComponent( typeof(AudioSource) )]
[RequireComponent( typeof(NoMeDestruyas) )]
public class CuboMusic : MonoBehaviour {
private bool activado;
void Awake () {
   GetComponent<NoMeDestruyas> ().enabled = false;
   GetComponent<AudioSource> ().playOnAwake = false;
   GetComponent<AudioSource> ().loop = true;
   activado = false;
}
void OnMouseEnter()
{
   activado = true;
   GetComponent<AudioSource> ().Play ();
}
void OnMouseExit()
{
   activado = false;
   GetComponent<AudioSource> ().Stop ();
}
void OnMouseDown()
{
   if(activado)
      GetComponent<NoMeDestruyas> ().enabled = true;
}
}

 
Y el script "NoMeDestruyas.cs"
 

using UnityEngine;
using System.Collections;
public class NoMeDestruyas : MonoBehaviour {

void Start () {
   DontDestroyOnLoad (this);
   print("yo " + gameObject.name  + " no seré destruido");
}

}

 
Si pones dos cubos con su musica cada uno, y pasas el cursor, se reproduce (no se porque el playOnAwake no hace caso y tengo que ponerlo en el inspector). Si haces click te aparecera en la ventana "Hierarchy" los objetos del DontDestroyOnLoad, y para eso anda, tendrias que poner a tu gusto el paso de escena.
 
Ahora, no se si pasando a otra escena continuara reproduciendose, igual me parece que querer mantener el audio en una posicion al cargar una escena no es muy practico.
 
EDIT: probando pasa de una a otra escena manteniendo la musica bien.

Etiquetas: