[RESOLVIDO] Várias faixas de música
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 2
Página 1 de 2 • 1, 2
[RESOLVIDO] Várias faixas de música
Olá, estou a criar um jogo e queria que o meu objeto tocasse várias faixas de audio, de forma random e que fosse mudando de faixa de 3 em 3 segundos
é possível ?
eu usei este código por base mas não está a dar
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField] private AudioClip musica1;
[SerializeField] private AudioClip musica2;
[SerializeField] private AudioClip musica3;
[SerializeField] private AudioClip musica4;
[SerializeField] private AudioClip musica5;
[SerializeField] private AudioClip musica6;
private object AudioPlayer;
public void TocaMusica1()
{
AudioPlayer.instance.TocarBGM(musica1);
}
public void TocaMusica2()
{
AudioPlayer.instance.TocarBGM(musica2);
}
public void PararMusica()
{
AudioPlayer.instance.PararBGM();
}
public void TocaEfeito1()
{
AudioPlayer.instance.TocarSFX(musica3);
}
public void TocaEfeito2()
{
AudioPlayer.instance.TocarSFX(musica4);
}
public void TocaEfeito1()
{
AudioPlayer.instance.TocarSFX(musica5);
}
public void TocaEfeito2()
{
AudioPlayer.instance.TocarSFX(musica6);
}
public void PararEfeito()
{
AudioPlayer.instance.PararSFX();
}
}
é possível ?
eu usei este código por base mas não está a dar
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField] private AudioClip musica1;
[SerializeField] private AudioClip musica2;
[SerializeField] private AudioClip musica3;
[SerializeField] private AudioClip musica4;
[SerializeField] private AudioClip musica5;
[SerializeField] private AudioClip musica6;
private object AudioPlayer;
public void TocaMusica1()
{
AudioPlayer.instance.TocarBGM(musica1);
}
public void TocaMusica2()
{
AudioPlayer.instance.TocarBGM(musica2);
}
public void PararMusica()
{
AudioPlayer.instance.PararBGM();
}
public void TocaEfeito1()
{
AudioPlayer.instance.TocarSFX(musica3);
}
public void TocaEfeito2()
{
AudioPlayer.instance.TocarSFX(musica4);
}
public void TocaEfeito1()
{
AudioPlayer.instance.TocarSFX(musica5);
}
public void TocaEfeito2()
{
AudioPlayer.instance.TocarSFX(musica6);
}
public void PararEfeito()
{
AudioPlayer.instance.PararSFX();
}
}
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Pra que tanta void? É quase a mesma coisa que respondi anteriormente das cores do sprite, porém com audios. Olhe:
Primeiro de tudo adicione ao objeto que reproduzirá o audio, o Component Audio Source, esse é o component responsável para reproduzir som.
![[RESOLVIDO] Várias faixas de música 5DFotTv](https://i.imgur.com/5DFotTv.png)
Depois desative o Play On Awake, para ele nao começar reproduzindo
![[RESOLVIDO] Várias faixas de música Uzh7krN](https://i.imgur.com/uzh7krN.png)
Pronto agora mude esse seu script por este:
E depos é só voce colocar as musicas na array.
![[RESOLVIDO] Várias faixas de música LKk8oQN](https://i.imgur.com/lKk8oQN.png)
Primeiro de tudo adicione ao objeto que reproduzirá o audio, o Component Audio Source, esse é o component responsável para reproduzir som.
![[RESOLVIDO] Várias faixas de música 5DFotTv](https://i.imgur.com/5DFotTv.png)
Depois desative o Play On Awake, para ele nao começar reproduzindo
![[RESOLVIDO] Várias faixas de música Uzh7krN](https://i.imgur.com/uzh7krN.png)
Pronto agora mude esse seu script por este:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6];
[SerializeField]private AudioSource audioSource;
[SerializeField]private bool tocarMusica = true;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if(tocarMusica)
{
musicaSorteada = Random.Range(0, musics.Length);
audioSource.clip = musics[musicaSorteada];
audioSource.Play();
tocarMusica = false;
StartCoroutine("WaitToPlayNewMusic");
}
}
IEnumerator WaitToPlayNewMusic()
{
yield return new WaitForSeconds(3f);
tocarMusica = true;
}
}
E depos é só voce colocar as musicas na array.
![[RESOLVIDO] Várias faixas de música LKk8oQN](https://i.imgur.com/lKk8oQN.png)
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
quando tento colocar o script, aparece isto :
Can't add script component 'sound' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.
Can't add script component 'sound' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@dragongirl escreveu:quando tento colocar o script, aparece isto :
Can't add script component 'sound' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match.
Qual é o nome do seu script? A classe nao corresponde ao nome.
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
já consegui resolver essa parte muito obrigada
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
só que não deixa colocar as músicas que estão nos assets
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@dragongirl escreveu:só que não deixa colocar as músicas que estão nos assets
Como Assim? Nao deixa colocar as musicas que estão dentro da pasta assets?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@Pokedlg escreveu:@dragongirl escreveu:só que não deixa colocar as músicas que estão nos assets
Como Assim? Nao deixa colocar as musicas que estão dentro da pasta assets?
Nao funciona Assim?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Boa tarde não, como se põe ver pelo video não aceita
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@dragongirl escreveu:Boa tarde não, como se pode ver, não consigo colocar na hierarquia e não aceita diretamente da Asset store
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Ah muito obrigada mesmo, estou no inicio do meu unity e a aprender a mexer com scripts. Ainda não entendo bem mas muito obrigada.
Porém agora não posso usar o mesmo script porque o AudioClip não deixa colocar o play. (_audio[1].Play()
Poderiam me ajudar por favor?
Porém agora não posso usar o mesmo script porque o AudioClip não deixa colocar o play. (_audio[1].Play()

Poderiam me ajudar por favor?
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Voce quer que a musica seja aleatória não é?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
sim, que quando passar por aquele local a musica aleatoriamente mude
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Então voce nao precisa do (_audio[1].Play()). Na array criada voce apenas precisa colocar os audios que voce quer usar e no script ele já defini um valor aleatório de acordo com a posição do audio na array.
Irei explicar o script:
Aqui eu só fiz a musica sendo sorteada de acordo com o que voce pediu. Porém se voce quer fazer quando chega a certo lugar. O Script irá ser diferente, voce quer ajuda?
Irei explicar o script:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6]; //Array criada com espaço para 6 AudiClips
[SerializeField]private AudioSource audioSource; //Serve para tocar o audio
[SerializeField]private bool tocarMusica = true; // Uma variavel do tipo bool (Verdadeiro ou Falso)
void Start()
{
audioSource = GetComponent<AudioSource>(); //Quando apertar Start o Audio Source vai pegar o Audio source presente no Objeto que o Script está
}
void Update()
{
if(tocarMusica) //Se tocar musica = true
{
var musicaSorteada = Random.Range(0, musics.Length); //Irá sortear um numero de acordo com o tamanho da Array (6)
audioSource.clip = musics[musicaSorteada]; // O audio clip do Audio Source será igual ao valor sorteado.
audioSource.Play(); //E então irá começar a música
tocarMusica = false; //TocarMusica se tornará false
StartCoroutine("WaitToPlayNewMusic"); //Chamara uma rotina
}
}
IEnumerator WaitToPlayNewMusic() //Rotina Esperar para Tocar Nova Musica
{
yield return new WaitForSeconds(3f); //Retornará uma espera de 3 Segundos
tocarMusica = true; //Tocar musica se tornara verdadeiro novamente, consequentemente irá gerar e tocar uma musica aleatória novamente
}
}
Aqui eu só fiz a musica sendo sorteada de acordo com o que voce pediu. Porém se voce quer fazer quando chega a certo lugar. O Script irá ser diferente, voce quer ajuda?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Já funciona corretamente, mas a música começa logo e eu queria que começasse somente quando intersecta esse Trigger, é possível?
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
É sim. O trigger que voce quer acessar é o mesmo do Sprite?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
sim é@Pokedlg escreveu:É sim. O trigger que voce quer acessar é o mesmo do Sprite?
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
MUDE PARA ASSIM ENTAO:
E DEPOIS NO SCRIPT DO SPRITE, COLOQUE ASSIM:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6];
[SerializeField]private AudioSource audioSource;
[SerializeField]private bool tocarMusica = false;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if(tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audioSource.clip = musics[musicaSorteada];
audioSource.Play();
tocarMusica = false;
StartCoroutine("WaitToPlayNewMusic");
}
}
IEnumerator WaitToPlayNewMusic()
{
yield return new WaitForSeconds(3f);
tocarMusica = true;
}
}
E DEPOIS NO SCRIPT DO SPRITE, COLOQUE ASSIM:
- Código:
public class Sprite : MonoBehaviour
{
public Material mat;
public bool mudandoDeCor = false;
public sound scriptDoSom; // no inspector, coloque seu script do som aqui
void Start()
{
mat = GetComponent<SpriteRenderer>().material;
}
void Update()
{
if(mudandoDeCor == true)
{
mat.color = Random.ColorHSV(); //Irá gerar uma cor aleatória sem voce escolher
}
}
void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
scriptDoSom.tocarMusica = true;
mudandoDeCor = true;
}
}
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
mas para acessar a variavel tocarMusica por outro script ela não precisava ser estática?@Pokedlg escreveu:MUDE PARA ASSIM ENTAO:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6];
[SerializeField]private AudioSource audioSource;
[SerializeField]private bool tocarMusica = false;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if(tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audioSource.clip = musics[musicaSorteada];
audioSource.Play();
tocarMusica = false;
StartCoroutine("WaitToPlayNewMusic");
}
}
IEnumerator WaitToPlayNewMusic()
{
yield return new WaitForSeconds(3f);
tocarMusica = true;
}
}
E DEPOIS NO SCRIPT DO SPRITE, COLOQUE ASSIM:
- Código:
public class Sprite : MonoBehaviour
{
public Material mat;
public bool mudandoDeCor = false;
public sound scriptDoSom; // no inspector, coloque seu script do som aqui
void Start()
{
mat = GetComponent<SpriteRenderer>().material;
}
void Update()
{
if(mudandoDeCor == true)
{
mat.color = Random.ColorHSV(); //Irá gerar uma cor aleatória sem voce escolher
}
}
void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
scriptDoSom.tocarMusica = true;
mudandoDeCor = true;
}
}

SauloeArthur- Programador
-
PONTOS : 1024
REPUTAÇÃO : 5
Idade : 14
Áreas de atuação : Iniciante em elétrica;
Fazendo um WebSite;
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Nao se voce colocar ele como publico e aceessar ele no script
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
eu peço imensa desculpa, mas acontece que o Collider foi feito com uma box e coloquei em Triggers, não é um Sprite. erro meu, desculpe.
eu queria que quando a personagem passasse por essa box invisível começasse a dar as musicas mas fora não se ouvisse. posso usar na mesma o script de ?
Basicamente é para fazer o mesmo só que não é num Sprite mas sim num Collider que criei com uma box
eu queria que quando a personagem passasse por essa box invisível começasse a dar as musicas mas fora não se ouvisse. posso usar na mesma o script de ?
Basicamente é para fazer o mesmo só que não é num Sprite mas sim num Collider que criei com uma box
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Sim da pra usar sim. é só colocar assim:
Agora é só colocar o esse script no box invisível

- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6];
[SerializeField]private AudioSource audioSource;
[SerializeField]private bool tocarMusica = false;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if(tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audioSource.clip = musics[musicaSorteada];
audioSource.Play();
tocarMusica = false;
StartCoroutine("WaitToPlayNewMusic");
}
}
void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
tocarMusica = true;
}
}
void OnTriggerExit(Collider other)
{
audioSource.clip = null;
}
IEnumerator WaitToPlayNewMusic()
{
yield return new WaitForSeconds(3f);
tocarMusica = true;
}
}
Agora é só colocar o esse script no box invisível


Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Bom dia, obrigada mais uma vez, acontece que continua a dar logo, mesmo não estando a colidir
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Nao desative o objeto, se voce vai fazer algo invisivel, deixe o objeto transparente, pois se voce desativar, ele nao fará nenhuma função, praticamente para de existir.
Confere se voce fez tudo isso nesse objeto invisivel:
Add Box Collider
Ativou o IsTrigger
Add Audio Source
Desativou o Play On Awake
Colocou este ultimo script
Colocou as musicas que deseja na array
Confere se voce fez tudo isso nesse objeto invisivel:
Add Box Collider
Ativou o IsTrigger
Add Audio Source
Desativou o Play On Awake
Colocou este ultimo script
Colocou as musicas que deseja na array
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
sim tenho todos esses passos feitos porém a música permanece a dar logo que clico no play
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@dragongirl escreveu:sim tenho todos esses passos feitos porém a música permanece a dar logo que clico no play
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@dragongirl escreveu:@dragongirl escreveu:sim tenho todos esses passos feitos porém a música permanece a dar logo que clico no play
Ué, era para ter dado certo, que estranho, perae vou ver.
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Achei o erro. Quando voce deixa uma variavel publica, ou usa [SerializeField] em uma variavel privada, ela nao irá atualizar de acordo com o script, pois ela pode ser modificada no inspector, o que eu acho uma falha muito grande dos desenvolvedores da Unity.
Enfim, no seu caso, a tocarMusica estava true, e ao mudar para false no script, nao alterou, por ela estar publica([SerializeField]). Para resolver é só deixa-la false.
Clica no quadrado que tá com o
. Se desaparecer o
quer dizer que está false.
![[RESOLVIDO] Várias faixas de música 1gPwObw](https://i.imgur.com/1gPwObw.png)
Enfim, no seu caso, a tocarMusica estava true, e ao mudar para false no script, nao alterou, por ela estar publica([SerializeField]). Para resolver é só deixa-la false.
Clica no quadrado que tá com o


![[RESOLVIDO] Várias faixas de música 1gPwObw](https://i.imgur.com/1gPwObw.png)
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Noutra zona do jogo gostava que começasse a dar só uma música quando o personagem colidisse, poderei usar o mesmo script mas alterando assim? ou será melhor com um Audio Source (se é possível colocar-lhe com o Collider também)
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sound : MonoBehaviour
{
[SerializeField] private AudioClip[] musics = new AudioClip[1];
[SerializeField] private AudioSource audioSource;
[SerializeField] private bool tocarMusica = false;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if (tocarMusica == false)
{
audioSource.Play();
tocarMusica = true;
StartCoroutine("WaitToPlayNewMusic");
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
tocarMusica = false;
}
}
void OnTriggerExit(Collider other)
{
audioSource.clip = null;
}
}
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Nao entendi, voce que aconteça a mesma função em outro objeto colisor?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
sim basicamente, mas em vez de várias faixas, so será uma
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Entao é só deletar a rotina.
Ve se é isso que voce deseja
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6];
[SerializeField]private AudioSource audioSource;
[SerializeField]private bool tocarMusica = false;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if(tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audioSource.clip = musics[musicaSorteada];
audioSource.Play();
tocarMusica = false;
}
}
void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
tocarMusica = true;
}
}
void OnTriggerExit(Collider other)
{
audioSource.clip = null;
}
}
Ve se é isso que voce deseja
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Mas a musica não dá somente quando o personagem passa la, ela começa a dar logo que se clica no Start do jogo
(e associei ao collider e tirei o play on awake
(e associei ao collider e tirei o play on awake
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@Pokedlg escreveu:Achei o erro. Quando voce deixa uma variavel publica, ou usa [SerializeField] em uma variavel privada, ela nao irá atualizar de acordo com o script, pois ela pode ser modificada no inspector, o que eu acho uma falha muito grande dos desenvolvedores da Unity.
Enfim, no seu caso, a tocarMusica estava true, e ao mudar para false no script, nao alterou, por ela estar publica([SerializeField]). Para resolver é só deixa-la false.
Clica no quadrado que tá com o. Se desaparecer o
quer dizer que está false.
Voce tentou isso?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Sim e nem assim a música para
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Nao entendo, eu fiz um código que quando colide com o objeto a musica começa a toca e quando sai da area de colisão a musica se torna Nula, e isso só vai acontecer se a variavel tocarMusica for verdadeira, e quando da Start ela é falsa, então nada disso era para acontecer, somente quando colide que tocarMusica se torna verdadeira .
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sound : MonoBehaviour
{
[SerializeField]private AudioClip[] musics = new AudioClip[6];
[SerializeField]private AudioSource audioSource;
[SerializeField]private bool tocarMusica = false;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void Update()
{
if(tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audioSource.clip = musics[musicaSorteada];
audioSource.Play();
tocarMusica = false;
}
}
void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
tocarMusica = true;
}
}
void OnTriggerExit(Collider other)
{
audioSource.clip = null;
tocarMusica = false;
}
}
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Pois é mesmo estranho, não há outra forma de fazer com que a música só toque naquele local. Porque ficava mesmo bem no meu jogo, quando a personagem passasse ali começasse a música.
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Eu fiz o teste aqui na minha Unity e funcionou corretamente. Vou enviar um video
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
A musica que me refiro é a da Lana, ela devia começar só dentro daquela casinha, porém começa logo e nem aparece que está a tocar.
Aqui está o video do meu
Aqui está o video do meu
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Desculpa demorar para responder. Que estranho, vou fazer uns testes aqui e vo ver oque pode estar dando errado. Desculpe, mas esqueci de avisar que para o IsTrgger funcionar o objeto tem que ter um rigdbody, desative o Use Gravity e ative o Is Kinematic.
Outra duvida, voce quer que a partir dali começa a musica ou voce quer que só apenas naquela pequena área toque a musica, e se voce sair voce nao pode mais ouvi-la?
Outra duvida, voce quer que a partir dali começa a musica ou voce quer que só apenas naquela pequena área toque a musica, e se voce sair voce nao pode mais ouvi-la?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Gostava que só desse naquele espaço só, portanto quando saísse não queria mais ouvi-la
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Utilizei a msuica do A-ha como exemplo.
Exemplo 1:
Exemplo 2:
Exemplo 1:
Exemplo 2:
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Como criou o DontdestroyonLoad?
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Usou algum script?
Ou criou um objeto, tirou o Triggers, colocou o rígido body e colocou um AudioSources só?
Ou criou um objeto, tirou o Triggers, colocou o rígido body e colocou um AudioSources só?
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
é só voce escrever DontDestroyOnLoad(Objeto).@dragongirl escreveu:Como criou o DontdestroyonLoad?
- Código:
DontDestroyOnLoad(gameObject);
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
@dragongirl escreveu:Usou algum script?
Ou criou um objeto, tirou o Triggers, colocou o rígido body e colocou um AudioSources só?
Utilizei aquele que mandei anteriormente
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Mesmo com o script igual, a música começa logo que clico no play e não só na colisão
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Voce poderia mandar uma imagem de onde está o colisor? E voce tem certeza de que nao possui nenhum outro AudioSource em algum outro objeto?
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Consegui resolver, era um erro no script, desculpe mesmo.
Mas agora tentei adaptar ao dos 6 sons (porque esse não parava quando acabasse) a colisão e acontece que usando este script ele não vai alternando a música. Só dá uma.
Mas agora tentei adaptar ao dos 6 sons (porque esse não parava quando acabasse) a colisão e acontece que usando este script ele não vai alternando a música. Só dá uma.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sound : MonoBehaviour
{
public AudioClip[] musics = new AudioClip[6];
public AudioSource audSource;
public bool tocarMusica = false;
void Start()
{
audSource = GetComponent<AudioSource>();
}
void Update()
{
if (tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audSource.clip = musics[musicaSorteada];
audSource.Play();
tocarMusica = false;
StartCoroutine("WaitToPlayNewMusic");
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
tocarMusica = true;
}
}
void OnTriggerExit(Collider other)
{
audSource.clip = null;
}
IEnumerator WaitToPlayNewMusic()
{
yield return new WaitForSeconds(3f);
tocarMusica = false;
}
}
dragongirl- Membro
- PONTOS : 82
REPUTAÇÃO : 4
Respeito as regras :
Re: [RESOLVIDO] Várias faixas de música
Ah sim, achei o que está causando isso. Quando chama a rotina, voce está retornando tocarMusica como false, olhe tente assim:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sound : MonoBehaviour
{
public AudioClip[] musics = new AudioClip[6];
public AudioSource audSource;
public bool tocarMusica = false;
void Start()
{
audSource = GetComponent<AudioSource>();
}
void Update()
{
if (tocarMusica == true)
{
var musicaSorteada = Random.Range(0, musics.Length);
audSource.clip = musics[musicaSorteada];
audSource.Play();
tocarMusica = false;
StartCoroutine("WaitToPlayNewMusic");
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
tocarMusica = true;
}
}
void OnTriggerExit(Collider other)
{
audSource.clip = null;
}
IEnumerator WaitToPlayNewMusic()
{
yield return new WaitForSeconds(3f);
tocarMusica = true;
}
}
Pokedlg- Programador
-
PONTOS : 408
REPUTAÇÃO : 40
Áreas de atuação :
Iniciante(C#.NET, Animação, ShaderLab)
Intermediário(Unity, Shader Graph)
Respeito as regras :
Página 1 de 2 • 1, 2
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 2
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum