SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
ShapeKeys do Blender para a Unity altera áreas próximas
COMO EVITAR QUE UM OBJETO (PLAYER,ITEM ETC...) ATRAVESSE UMA PAREDE.
Ajuda em Script de Verificação de Ação e Reação
unity Failed to load PlayerSettings (internal index #0). Most likely data f
modelar avatar e skins para um jogo web
PRECISO FAZER QUE MEU GAME FIQUE ONLINE
Materiais do Blander não aparecem no MeshRendere do Objeto na Unity
Repetiçoes de Textura no Terreno
SERVER IS DOWN - UNITY+MSQL
Procuro programadores - Novo jogo
Problema com o MS VEHICLES
Preciso de ajuda com a Unity
Problema com vídeo em 360° na Unity
Problemas no MS Vehicles
unity- eventos na Animação com Armature/Bones vinda do blender não funciona
ajuda exibir resultados simulados em uma liga Game Unity
Unity - ParticleSystem não é redirecionado no rawimage no canvas
Como resolver o problema de "face orientation" no Blender.
[DÚVIDA] Tive um problema com meu Canvas
erro na Directional Light
Problemas com o Directional Light da Unity 3D
210 Linhas de código para inimigo é muito grande?
Novo jogo da franquia Sphere game em desenvolvimento
malha da roda não girando com wheel collider unity
Problemas com ambiguidade
Touch mobile
INVALID TOKEN
Como acessar o "HD Render Pipeline" do HDRP por script?
CHAT GPT PRA JOGO DE TIRO? comentem
Tutorial script inimigo segue e foge do player
Ainda vale a pena lançar Asset na Asset Store?
Ajuda com tabela de historico de pontuaçao.
[TUTORIAL] Entrar no carro estilo GTA
Como derrapar um Whell Collider
Como altertar o valor do "Asymptote Value" do Whell Collider via Script
Preciso de ajuda para substituir valor de variavel em outro script
Ajuda com Top Down Shooter utilizando Photon
Duvida com Netcode
[RESOLVIDO] Unity - Movendo a Câmera na Horizontal/Vertical com Touch
Alguém me ajuda com os anúncios pfv
Segundo Trailer do jogo Dark Age, Feliz Natal a todos!
Unity - ScrollRect, Viewport, Content - O Conteúdo ñ inicia no topo
Coleta de itens
Unity - Cadastro do email do jogador
[GRATIS] PACK DE MODELOS 3D PARA JOGO DE TERROR
Onde Conseguir músicas para meu Jogo?
error CS0246 em Script
Alguem teve ja esse problema?
[Projeto em Andamento] Draug, um jogo de hordas
DISPONIVEL PARA FAZER MODELOS 3D
Unity-Loja.Como os Jogadores terão acesso aos ítens comprados na PlayStore?
Bugando depois do Build.
Primeiro Trailer do jogo Dark Age
Problema com sombra
Mesh e Material do objeto trocando para uma instancia no inicio do jogo
[RESOLVIDO] Unity - RawImages_Layer_Camera
INVESTIMENTO EM JOGOS E BANCO DE TALENTO
Teaser do meu novo projeto pessoal, Dark Age
Preciso de ajuda com mudança para mobile androide.
[RESOLVIDO] Posição final do objeto em jogo 2D
Input.GetAxis() obedercer a orientação de um objeto.
Interação com elementos UI
Meu primeiro jogo na steam
Minimap/Radar/GPS Estilo GTA V
[RESOLVIDO] Erro no console depois que formatei o pc
PACK GRÁTIS de Músicas ELETRÔNICAS para ajudar vocês em seus Jogos Indies!
[TUTORIAL] Entenda como funciona: ENUM, SWITCH, BREAK, CASE no C#
O Labirinto II - Baixe o Jogo
Qual e o codigo de Botões na unity para saber seus estados?
Como carregar itens pequenos dentro do carro sem que atravesse os colliders
[Duvida] Script pegar itens
Travamento ao trocar de cena
Colisão zoada e movimentação
Salvar objetos que foram destruidos entre cenas na unity
Quero começa a desenvolver um jogo de luta porem eu queria aprender a faze
Pegar qual objeto colidiu com o Linecast.
movimentação e camera?
[RESOLVIDO] Unity - SceneManager.LoadScene abre scene com objeto "vazio"
[RESOLVIDO] ajuda sobre skybox
MEU SIMULADOR DE CARRO
[_____IMPORTANTE_____] ALTERAÇÕES NA POLÍTICA DE COBRANÇA DA UNITY
[RESOLVIDO] Ausencia da funçao NavMesh na Unity 2022.2.12
[_____IMPORTANTE_____] ALTERAÇÕES NA POLÍTICA DE COBRANÇA DA UNITY - 2
Roll Up Um jogo de aventura e desáfios
Terminologia da Unity em outras engines
Como criar a iluminação do Sol no Sistema Solar?
Conexão de lobby pelo OnConnectedToMaster
Problema na exportção de projeto unity
[RESOLVIDO] Unity - Áudios estão emitindo som só Depois do Botão ser solto
Unity - Banco de Dados Online junto ao Jogo
Player virar para o inimigo(Prefab)
[TUTORIAL] Sistema De Save Game Ao Sair Da Fase
Problema de Sincronização de um objeto de um jogo multiplayer usa q Photon
Unity - Compartilhar meu Jogo
Alguém que manja do Google ADmob?
Unity - Avaliar meu Jogo
[RESOLVIDO] Destruir inimigo com o player.
Salvar e carregar dados na Unity de objetos prefabs sem sobrescrever os dad
Unity - Salvar os Dados do Jogador Online
Ontem à(s) 10:09 pm
Dom Mar 10, 2024 2:30 pm
Sex Mar 01, 2024 1:27 pm
Qui Fev 22, 2024 9:57 pm
Qua Fev 21, 2024 10:39 am
Ter Fev 20, 2024 9:28 am
Ter Fev 20, 2024 12:15 am
Seg Fev 19, 2024 1:06 pm
Seg Fev 12, 2024 1:56 pm
Seg Fev 12, 2024 1:17 pm
Dom Fev 11, 2024 8:55 pm
Dom Fev 11, 2024 11:16 am
Seg Fev 05, 2024 4:18 pm
Dom Fev 04, 2024 9:39 pm
Qua Jan 31, 2024 11:59 pm
Ter Jan 30, 2024 7:37 pm
Ter Jan 23, 2024 6:33 pm
Dom Jan 21, 2024 6:03 pm
Sáb Jan 20, 2024 7:03 pm
Sáb Jan 20, 2024 6:58 pm
Sáb Jan 20, 2024 6:39 pm
Sex Jan 19, 2024 1:29 pm
Sex Jan 19, 2024 8:40 am
Dom Jan 14, 2024 5:30 pm
Qua Jan 10, 2024 10:29 pm
Qua Jan 10, 2024 8:55 pm
Qua Jan 10, 2024 7:14 pm
Ter Jan 09, 2024 3:55 pm
Ter Jan 09, 2024 8:04 am
Sáb Jan 06, 2024 8:02 pm
Sex Jan 05, 2024 7:01 am
Sex Jan 05, 2024 12:12 am
Qui Jan 04, 2024 6:55 pm
Qui Jan 04, 2024 12:52 pm
Qui Jan 04, 2024 4:34 am
Ter Jan 02, 2024 11:48 pm
Dom Dez 31, 2023 7:25 pm
Qua Dez 27, 2023 5:44 pm
Qua Dez 27, 2023 3:08 pm
Sáb Dez 23, 2023 7:27 pm
Sáb Dez 23, 2023 5:06 pm
Qui Dez 21, 2023 8:10 pm
Seg Dez 18, 2023 2:04 pm
Sex Dez 15, 2023 5:11 pm
Qui Dez 14, 2023 9:13 pm
Qui Dez 14, 2023 2:47 pm
Qui Dez 14, 2023 1:48 pm
Qua Dez 13, 2023 8:58 pm
Ter Dez 12, 2023 2:32 pm
Seg Dez 11, 2023 1:53 pm
Qua Dez 06, 2023 8:13 pm
Sáb Dez 02, 2023 8:06 pm
Qui Nov 30, 2023 7:49 am
Seg Nov 27, 2023 1:35 am
Qua Nov 22, 2023 7:37 am
Qui Nov 09, 2023 1:22 pm
Seg Nov 06, 2023 11:59 am
Ter Out 31, 2023 9:53 am
Dom Out 29, 2023 8:05 pm
Dom Out 29, 2023 3:03 am
Sex Out 27, 2023 3:43 pm
Sex Out 27, 2023 3:28 pm
Qua Out 25, 2023 1:20 pm
Seg Out 23, 2023 10:34 am
Dom Out 22, 2023 6:55 pm
Qui Out 19, 2023 11:57 pm
Qui Out 19, 2023 6:39 pm
Ter Out 17, 2023 6:37 pm
Ter Out 17, 2023 6:18 pm
Seg Out 16, 2023 1:59 pm
Sáb Out 14, 2023 12:15 pm
Qua Out 11, 2023 6:07 pm
Seg Out 09, 2023 4:19 pm
Qua Out 04, 2023 12:12 pm
Qua Out 04, 2023 12:11 pm
Ter Out 03, 2023 9:18 pm
Ter Out 03, 2023 9:08 pm
Ter Out 03, 2023 6:05 pm
Ter Set 26, 2023 12:45 pm
Seg Set 25, 2023 9:02 pm
Seg Set 25, 2023 9:47 am
Sáb Set 23, 2023 2:10 pm
Sex Set 22, 2023 9:01 pm
Qui Set 21, 2023 11:04 am
Qua Set 20, 2023 4:40 pm
Qua Set 20, 2023 9:15 am
Dom Set 17, 2023 12:17 pm
Sex Set 15, 2023 7:24 pm
Sex Set 15, 2023 5:41 pm
Sex Set 15, 2023 4:28 pm
Sex Set 15, 2023 10:56 am
Sex Set 15, 2023 10:15 am
Seg Set 11, 2023 11:43 am
Seg Set 11, 2023 11:31 am
Sáb Set 09, 2023 4:53 pm
Sáb Set 09, 2023 1:44 pm
Ter Set 05, 2023 11:12 pm
Ter Set 05, 2023 3:12 pm
Seg Set 04, 2023 11:53 pm



































































































[RESOLVIDO] Trocar o áudio dependendo da tag do terreno

3 participantes

Ir para baixo

Resolvido [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por VitinRuas Qui Jul 29, 2021 4:41 pm

Olá developers, tudo bem ?

Sou novo aqui no fórum e iniciante em desenvolvimento de jogos

Vim pedir ajuda a vocês veteranos pois estou com um problema com o áudio

É o seguinte, eu tenho um CharacterController e quero que ele detecte a superficie que o mesmo está sobre, pesquisei muito ao ponto de criar meu próprio script.
Ocorreu tudo certinho, saiu som ao apertar as teclas WASD e detectou qual terreno ele está sobre, porém ele não altera o som de imediato enquanto o Player está com o W pressionado (GetKeyDown),
Só executa se eu parar de apertar e apertar novamente a tecla, dai ele altera para o audioclip que está associado ao audiosource do Player

Estou utilizando o RayCast, ele detecta o terreno e associa ao AudioSource o clip dependendo do objeto tag que o Player está sobre

E quando ele passa para outro tipo de Objeto que o mesmo está em cima, ele para segundos depois e não executa mais nada, nem troca de áudio quando está em cima

Obrigado pela atenção modders e developers!  [RESOLVIDO] Trocar o áudio dependendo da tag do terreno 1f600  [RESOLVIDO] Trocar o áudio dependendo da tag do terreno 1f44d

Código:
// Vitin Ruas
// 29-07-2021

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAudio : MonoBehaviour
{
[System.Serializable]
#region AUDIO
    public struct AUDIO {
        // Clips
        [Header("Audio Clips")]
        [Tooltip("Clips to be Played")]
        public AudioClip grassClip;
        public AudioClip sandClip, woodClip;
        [Header("Audio Source")]
        // Controladores
        [Tooltip("Audio Controller")]
        public AudioSource _audioSourcePlayer;
        [Header("Character Controller and Tags")]
        public CharacterController _controller;
        public string floorTag;
    }
#endregion
    public AUDIO audioWalking;
    private void Awake() {
        audioWalking._controller = GetComponent<CharacterController>();
        audioWalking._audioSourcePlayer = GetComponent<AudioSource>();
    }
    private void Update() {
        // Se o player estiver no chão
        RaycastHit hit;
        if (audioWalking._controller.isGrounded == true)
        {
            // Se o raio retornar true ou false de um determinado ponto que o mesmo colidiu
            if (Physics.Raycast(transform.position, Vector3.down, out hit))
            {
                // Atribuindo tag de um objeto que o raio colidiu
                audioWalking.floorTag = hit.collider.gameObject.tag;
                // Se colidir com a grama ou com a madeira, faça a troca de clips
                if (audioWalking.floorTag == "Grass")
                {
                    audioWalking._audioSourcePlayer.clip = audioWalking.grassClip;
                } else if (audioWalking.floorTag == "Wood") {
                    audioWalking._audioSourcePlayer.clip = audioWalking.woodClip;
                }
            }

            // Se o player interagir com as entradas, execute o audio

            if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))
            {
                audioWalking._audioSourcePlayer.Play(); // irá reproduzir o atual clip detectado e associado pelo raycast
            } else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D)) {
                // Se não, pare o audio
                audioWalking._audioSourcePlayer.Stop();
            }
        }
    }
}

VitinRuas
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 3
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno WvDYdlf

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por Pokedlg Qui Jul 29, 2021 5:06 pm

tenta ativar o loop ao pressionar as teclas e desativar quando soltar.
Código:
if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))
{
    audioWalking._audioSourcePlayer.loop = true;
    audioWalking._audioSourcePlayer.Play(); // irá reproduzir o atual clip detectado e associado pelo raycast
}
else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D))
{
    // Se não, pare o audio
    audioWalking._audioSourcePlayer.loop = false;
    audioWalking._audioSourcePlayer.Stop();
}
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 2089
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno Aad8pUi

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por VitinRuas Qui Jul 29, 2021 5:27 pm

Pokedlg escreveu:tenta ativar o loop ao pressionar as teclas e desativar quando soltar.
Código:
if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))
{
    audioWalking._audioSourcePlayer.loop = true;
    audioWalking._audioSourcePlayer.Play(); // irá reproduzir o atual clip detectado e associado pelo raycast
}
else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D))
{
    // Se não, pare o audio
    audioWalking._audioSourcePlayer.loop = false;
    audioWalking._audioSourcePlayer.Stop();
}

Eu fiz a tentativa e não resultou em nada ;-;

- Começa o jogo no terreno e aperto alguma das teclas, WASD
- O som ocorre normalmente, clip de terreno
- Eu piso em cima de um objeto, que no caso é o chão de uma casa
- Aparece no AudioSource do Inspector que o clip foi alterado e agora é o clip do chão da casa
- O som para e não sai mais nada mesmo se eu voltar para o terreno
- Ao menos que eu pare de apertar na tecla e pressiono novamente, dai começa o som do clip que foi atribuido ao AudioSource


A dias que estou tentando resolver isso kkk é muito complicado, desculpe se eu estiver ocupando muito tempo

O código alterado:

Código:
[size=16][i]// Vitin Ruas[/i]
[i]// 29-07-2021[/i]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAudio : MonoBehaviour
{
[System.Serializable]
#region AUDIO
    public struct AUDIO {
        [i]// Clips[/i]
        [Header("Audio Clips")]
        [Tooltip("Clips to be Played")]
        public AudioClip grassClip;
        public AudioClip sandClip, woodClip;
        [Header("Audio Source")]
        [i]// Controladores[/i]
        [Tooltip("Audio Controller")]
        public AudioSource _audioSourcePlayer;
        [Header("Character Controller and Tags")]
        public CharacterController _controller;
        public string floorTag;
    }
#endregion
    public AUDIO audioWalking;
    private void Awake() {
        audioWalking._controller = GetComponent<CharacterController>();
        audioWalking._audioSourcePlayer = GetComponent<AudioSource>();
    }
    private void Update() {
        [i]// Se o player estiver no chão[/i]
        RaycastHit hit;
        if (audioWalking._controller.isGrounded == true)
        {
            [i]// Se o raio retornar true ou false de um determinado ponto que o mesmo colidiu[/i]
            if (Physics.Raycast(transform.position, Vector3.down, out hit))
            {
                [i]// Atribuindo tag de um objeto que o raio colidiu[/i]
                audioWalking.floorTag = hit.collider.gameObject.tag;
                [i]// Se colidir com a grama ou com a madeira, faça a troca de clips[/i]
                if (audioWalking.floorTag == "Grass")
                {   
                    audioWalking._audioSourcePlayer.clip = audioWalking.grassClip;
                } else if (audioWalking.floorTag == "Wood") {
                    audioWalking._audioSourcePlayer.clip = audioWalking.woodClip;
                }
            }

            [i]// Se o player interagir com as entradas, execute o audio[/i]

            if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))
            {
                audioWalking._audioSourcePlayer.loop = true;
                audioWalking._audioSourcePlayer.Play(); [i]// irá reproduzir o atual clip detectado e associado pelo raycast[/i]
                
            } else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D)) {
                [i]// Se não, pare o audio[/i]
                audioWalking._audioSourcePlayer.loop = false;
                audioWalking._audioSourcePlayer.Stop();
            }
        }
    }
}[/size]

VitinRuas
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 3
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno WvDYdlf

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por Pokedlg Qui Jul 29, 2021 5:45 pm

Não tenho certeza, mas acredito que isso aconteça devido a alteração de audioclips repentina entre os terrenos, não sei se é a melhor opção mas tente fazer um delay de atualização quando ocorrer as mudanças entre terrenos, tipo uma verificação com uma co-rotina.
Pokedlg
Pokedlg
ProgramadorMaster

Masculino PONTOS : 2089
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno Aad8pUi

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por VitinRuas Qui Jul 29, 2021 5:58 pm

Pokedlg escreveu:Não tenho certeza, mas acredito que isso aconteça devido a alteração de audioclips repentina entre os terrenos, não sei se é a melhor opção mas tente fazer um delay de atualização quando ocorrer as mudanças entre terrenos, tipo uma verificação com uma co-rotina.
Entendo, então seria bom eu definir um coroutine ou um Time.deltaTime, aqui ? onde verifica e atribui os clips
Código:
[size=20]if (audioWalking.floorTag == "Grass")
{   
    audioWalking._audioSourcePlayer.clip = audioWalking.grassClip;
} else if (audioWalking.floorTag == "Wood") 
{
    audioWalking._audioSourcePlayer.clip = audioWalking.woodClip;
}[/size]

?

VitinRuas
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 3
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno WvDYdlf

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por Fagner Qui Jul 29, 2021 6:23 pm

Na minha opinião, o problema é que o Play() só é chamado ao apertar ou soltar a tecla.
na imensa maioria do tempo, você vai estar segurando a tecla, logo, alterar o clip não vai fazer ele tocar de imediato.

Eu reestruturaria o código assim:

armazenaria a tag_atual do terreno, e onde você faz o raycast eu checaria se a tag do raycast é igual a tag_atual, se for diferente, eu altero o clip, dou Play() no audioSource e faço tag_atual receber a nova tag.

O GetKeyDown e o GetKeyUp só controlaria o volume, up = 0, down = 1 ou até mesmo desabilitaria e habilitaria o componente AudioSource;
Fagner
Fagner
Moderador

Masculino PONTOS : 4193
REPUTAÇÃO : 665
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno Aad8pUi

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por VitinRuas Qui Jul 29, 2021 7:33 pm

Fagner escreveu:Na minha opinião, o problema é que o Play() só é chamado ao apertar ou soltar a tecla.
na imensa maioria do tempo, você vai estar segurando a tecla, logo, alterar o clip não vai fazer ele tocar de imediato.

Eu reestruturaria o código assim:

armazenaria a tag_atual do terreno, e onde você faz o raycast eu checaria se a tag do raycast é igual a tag_atual, se for diferente, eu altero o clip, dou Play() no audioSource e faço tag_atual receber a nova tag.

O GetKeyDown e o GetKeyUp só controlaria o volume, up = 0, down = 1 ou até mesmo desabilitaria e habilitaria o componente AudioSource;
Eu não sei se a lógica seria essa, só que agora não sai som, só sai se eu não estiver detectando o terreno
Por exemplo: quando eu pulo sai o som trocado, mas quando eu estou no chão não sai o som

Código:
[size=20][i]// Vitin Ruas[/i]
[i]// 29-07-2021[/i]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAudio : MonoBehaviour
{
[System.Serializable]
#region AUDIO
    public struct AUDIO {
        [i]// Clips[/i]
        [Header("Audio Clips")]
        [Tooltip("Clips to be Played")]
        public AudioClip grassClip;
        public AudioClip sandClip, woodClip;
        [Header("Audio Source")]
        [i]// Controladores[/i]
        [Tooltip("Audio Controller")]
        public AudioSource _audioSourcePlayer;
        [Header("Character Controller and Tags")]
        public  CharacterController _controller;
        public string atualTag, saveTag;
    }
#endregion
    public AUDIO audioWalking;
    private void Awake() {
        audioWalking.saveTag = "Grass";
        audioWalking._controller = GetComponent<CharacterController>();
        audioWalking._audioSourcePlayer = GetComponent<AudioSource>();
        audioWalking._audioSourcePlayer.clip = audioWalking.grassClip;
    }
    private void Update() {
        [i]// Se o player estiver no chão[/i]
        RaycastHit hit;
        if (audioWalking._controller.isGrounded == true)
        {
            [i]// Se o raio retornar true ou false de um determinado ponto que o mesmo colidiu[/i]
            if (Physics.Raycast(transform.position, Vector3.down, out hit))
            {
                audioWalking.atualTag = hit.collider.gameObject.tag;
                [i]// Se a tag atual for igual a tag salva, então dê Play[/i]
                if (audioWalking.atualTag == audioWalking.saveTag)
                {
                    audioWalking._audioSourcePlayer.Play();
                } else
                {
                    [i]// Se o audio clip atual for da madeira, então troque para a grama[/i]
                    if (audioWalking._audioSourcePlayer.clip == audioWalking.woodClip)
                    {
                        audioWalking._audioSourcePlayer.clip = audioWalking.grassClip;
                    } else { [i]// se não, se cause for da grama, então troque para a madeira[/i]
                        audioWalking._audioSourcePlayer.clip = audioWalking.woodClip;
                    }
                    [i]// a tag salva receberá a tag atual detectada pelo RayCast[/i]
                    audioWalking.saveTag = audioWalking.atualTag;
                }
            }

            [i]// Se o player interagir com as entradas, desative ou não o componente AudioSource[/i]

            if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))
            {
                audioWalking._audioSourcePlayer.enabled = true;
            } else if (Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.D)) {
                [i]// Se não, pare o audio[/i]
                audioWalking._audioSourcePlayer.enabled = false;
            }
        }
    }
}[/size]

VitinRuas
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 3
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno WvDYdlf

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por Fagner Qui Jul 29, 2021 8:29 pm

Eu refiz com algumas mudanças:

Volume só aumenta se a velocidade do jogador for maior que x, dessa forma se você soltar o W mas não parar imediatamente, ainda toca o som.

Usei um dicionário pros áudios, passando a Tag como chave, dessa forma, troco o áudio sem precisar de vários IFs pra cada Tag.

Ao invés de checar se a tag é igual, eu comparo a referência do audioClip, poupa uma comparação de string.

Se a tag for diferente, mudo pro áudio correto e dou play().

Se áudio for igual ao que já estou tocando, não faço nada, mas caso não esteja tocando, chamo Play(). Isso é útil caso você passe numa zona sem tag e volte pra ultima zona que passou.

Se a zona não tiver tag, paro o áudio.

Obs: Já deixei o AudioSource com o Loop e PlayOnAwake marcado no inspector, pois não tem necessidade de alterar via código, nesse caso.

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAudio : MonoBehaviour
{
    public AudioSource playerAS;
    public CharacterController playerControle;
    public Zonas[] zonas;
    private Dictionary<string, AudioClip> audioZonas;

    private void Start()
    {
        audioZonas = new Dictionary<string, AudioClip>(zonas.Length);
        for (int i = 0; i < zonas.Length; i++)
        {
            audioZonas.Add(zonas[i].Tag, zonas[i].audio);
        }
    }
    
    private void Update()
    {
        playerAS.volume = playerControle.velocity.magnitude > 0.1f ? 1 : 0; //Se o player estiver se movendo, toco o som.

        RaycastHit hit;

        if (playerControle.isGrounded && Physics.Raycast(transform.position, -Vector3.up, out hit))
        {
            if (audioZonas.ContainsKey(hit.transform.tag))
            {
                if(playerAS.clip != audioZonas[hit.transform.tag])
                {
                    playerAS.clip = audioZonas[hit.transform.tag]; //usa a tag como chave do dicionário
                    playerAS.Play();
                }
                else if(!playerAS.isPlaying)
                {
                    playerAS.Play();
                }
            }
            else
            {
                playerAS.Stop();
            }
        }
    }

    //Só pra ficar organizado no Inspector
    private void OnValidate()
    {
        if (zonas != null)
        {
            for (int i = 0; i < zonas.Length; i++)
            {
                zonas[i].name = zonas[i].Tag;
            }
        }
    }

    [System.Serializable]
    public struct Zonas
    {
        public AudioClip audio;
        public string Tag;
        [HideInInspector]
        public string name;
    }
}
Fagner
Fagner
Moderador

Masculino PONTOS : 4193
REPUTAÇÃO : 665
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno Aad8pUi

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por VitinRuas Qui Jul 29, 2021 8:55 pm

Fagner escreveu:Eu refiz com algumas mudanças:

Volume só aumenta se a velocidade do jogador for maior que x, dessa forma se você soltar o W mas não parar imediatamente, ainda toca o som.

Usei um dicionário pros áudios, passando a Tag como chave, dessa forma, troco o áudio sem precisar de vários IFs pra cada Tag.

Ao invés de checar se a tag é igual, eu comparo a referência do audioClip, poupa uma comparação de string.

Se a tag for diferente, mudo pro áudio correto e dou play().

Se áudio for igual ao que já estou tocando, não faço nada, mas caso não esteja tocando, chamo Play(). Isso é útil caso você passe numa zona sem tag e volte pra ultima zona que passou.

Se a zona não tiver tag, paro o áudio.

Obs: Já deixei o AudioSource com o Loop e PlayOnAwake marcado no inspector, pois não tem necessidade de alterar via código, nesse caso.

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAudio : MonoBehaviour
{
    public AudioSource playerAS;
    public CharacterController playerControle;
    public Zonas[] zonas;
    private Dictionary<string, AudioClip> audioZonas;

    private void Start()
    {
        audioZonas = new Dictionary<string, AudioClip>(zonas.Length);
        for (int i = 0; i < zonas.Length; i++)
        {
            audioZonas.Add(zonas[i].Tag, zonas[i].audio);
        }
    }
    
    private void Update()
    {
        playerAS.volume = playerControle.velocity.magnitude > 0.1f ? 1 : 0; //Se o player estiver se movendo, toco o som.

        RaycastHit hit;

        if (playerControle.isGrounded && Physics.Raycast(transform.position, -Vector3.up, out hit))
        {
            if (audioZonas.ContainsKey(hit.transform.tag))
            {
                if(playerAS.clip != audioZonas[hit.transform.tag])
                {
                    playerAS.clip = audioZonas[hit.transform.tag]; //usa a tag como chave do dicionário
                    playerAS.Play();
                }
                else if(!playerAS.isPlaying)
                {
                    playerAS.Play();
                }
            }
            else
            {
                playerAS.Stop();
            }
        }
    }

    //Só pra ficar organizado no Inspector
    private void OnValidate()
    {
        if (zonas != null)
        {
            for (int i = 0; i < zonas.Length; i++)
            {
                zonas[i].name = zonas[i].Tag;
            }
        }
    }

    [System.Serializable]
    public struct Zonas
    {
        public AudioClip audio;
        public string Tag;
        [HideInInspector]
        public string name;
    }
}
Caramba kkk parece até mágica!!! estava sofrendo a dias pra resolver isso, e agora funcionou, vou até estudar seu código pra dá próxima vez eu saber construir igual
Obrigado Fagner, deu certinho!

VitinRuas
Iniciante
Iniciante

PONTOS : 983
REPUTAÇÃO : 3
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno WvDYdlf

Ir para o topo Ir para baixo

Resolvido Re: [RESOLVIDO] Trocar o áudio dependendo da tag do terreno

Mensagem por Fagner Qui Jul 29, 2021 9:45 pm

por nada jovem, boa sorte com o jogo!
Fagner
Fagner
Moderador

Masculino PONTOS : 4193
REPUTAÇÃO : 665
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras : [RESOLVIDO] Trocar o áudio dependendo da tag do terreno Aad8pUi

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos