Jump to content
Ezequiel Torres

Ayuda con Joystick UI y Audio

Recommended Posts

Buenas, les comento Tengo una escena de juego, y bueno, en dicha escena tengo mi controlador en primera persona, ya con los controles táctiles (el juego es para android).  quería hacer mi personaje tener sonidos al caminar, y bueno, como no se programar mucho, no podría hacer un sistema de pasos programando, y decidí intentar facilitarme las cosas. Y simplemente hice mi sonido de pasos (sonido en Arena, que esta en un gameobject vacio) se reproduce solo cuando presiono el joystick y que se pausara, cuando dejara de presionarlo.

(Eso hice con las funciones de Botón abajo y botón arriba)

Funciona bien y me ha dado un buen resultado, pero aquí viene mi problema.

El objeto del juego con el sonido de los pasos debe estar desactivado hasta que el jugador pasa por un activador que lo activa.

También hice eso, y funciona, pero hay un pequeño error en eso, al pasar por el gatillo manteniendo presionado el joystick, para avanzar continuamente, el sonido de pasos no se reproducen sino hasta que deje de presionar el joystick y lo vuelvo a presionar, y queda mal, si el jugador avanza continuamente no se oirá el sonido al estar presionando el joystick sin soltar, hasta que lo suelte y lo vuelva a presionar.

¿Hay alguna manera de corregir esto? Me gustaría que el sonido no dependiera de soltar y volver a presionar el joystick para reproducirse.

 

Edited by Ezequiel Torres

Share this post


Link to post
Share on other sites
2 hours ago, Ezequiel Torres said:

Buenas, les comento Tengo una escena de juego, y bueno, en dicha escena tengo mi controlador en primera persona, ya con los controles táctiles (el juego es para android).  quería hacer mi personaje tener sonidos al caminar, y bueno, como no se programar mucho, no podría hacer un sistema de pasos programando, y decidí intentar facilitarme las cosas. Y simplemente hice mi sonido de pasos (sonido en Arena, que esta en un gameobject vacio) se reproduce solo cuando presiono el joystick y que se pausara, cuando dejara de presionarlo.

(Eso hice con las funciones de Botón abajo y botón arriba)

Funciona bien y me ha dado un buen resultado, pero aquí viene mi problema.

El objeto del juego con el sonido de los pasos debe estar desactivado hasta que el jugador pasa por un activador que lo activa.

También hice eso, y funciona, pero hay un pequeño error en eso, al pasar por el gatillo manteniendo presionado el joystick, para avanzar continuamente, el sonido de pasos no se reproducen sino hasta que deje de presionar el joystick y lo vuelvo a presionar, y queda mal, si el jugador avanza continuamente no se oirá el sonido al estar presionando el joystick sin soltar, hasta que lo suelte y lo vuelva a presionar.

¿Hay alguna manera de corregir esto? Me gustaría que el sonido no dependiera de soltar y volver a presionar el joystick para reproducirse.

 

Claro, de hecho hay muchas maneras de hacerlo, pero tu limitante en cuanto a la programación no lo permite.

¿Forma simple?..

Creas un componente que sirva como "trigger" para la "permanencia" del jugador, más un controlador de "triggers" para disparar el audio.

[RequireComponent(typeof(AudioSource))]
public class TriggerController : MonoBahviour
{
  public static TriggerController Instance { get; private set; }  
  private AudioSource m_source { get; set; }
  [SerializeField]
  private AudioClip[] m_audioClips = null;
  
  private void Awake()
  {
    Instance = this;
    m_source = GetComponent<AudioSource>();
  }
  
  public void OnTrigger(int audioIndex)
  {
    if (!m_source.isPlaying)
    	m_source.PlayOneShot(m_audioClips[audioIndex]);
  }
}

Luego creas el componente que debería ir en cada Box Trigger

public class Trigger : MonoBahaviour
{
	private void OnTriggerStay(Collider col)
    {
      if (col.tag.Equal("Player") && Mathf.Abs(col.GetComponent<CharacterController>().velocity.magnitude) > .5f)
        TriggerController.OnTrigger(0);
    }
}

Intenta entender esto y seguramente tu juego quedara mejor.

  • Like 1

Share this post


Link to post
Share on other sites
7 hours ago, francoe1 said:

Claro, de hecho hay muchas maneras de hacerlo, pero tu limitante en cuanto a la programación no lo permite.

¿Forma simple?..

Creas un componente que sirva como "trigger" para la "permanencia" del jugador, más un controlador de "triggers" para disparar el audio.


[RequireComponent(typeof(AudioSource))]
public class TriggerController : MonoBahviour
{
  public static TriggerController Instance { get; private set; }  
  private AudioSource m_source { get; set; }
  [SerializeField]
  private AudioClip[] m_audioClips = null;
  
  private void Awake()
  {
    Instance = this;
    m_source = GetComponent<AudioSource>();
  }
  
  public void OnTrigger(int audioIndex)
  {
    if (!m_source.isPlaying)
    	m_source.PlayOneShot(m_audioClips[audioIndex]);
  }
}

Luego creas el componente que debería ir en cada Box Trigger


public class Trigger : MonoBahaviour
{
	private void OnTriggerStay(Collider col)
    {
      if (col.tag.Equal("Player") && Mathf.Abs(col.GetComponent<CharacterController>().velocity.magnitude) > .5f)
        TriggerController.OnTrigger(0);
    }
}

Intenta entender esto y seguramente tu juego quedara mejor.

he intentado hacerlo y me salta un error en el segundo script, supongo que tiene que ver con el otro, faltaría una referencia o algo así, no estoy seguro.

Captura de pantalla (422).png

Captura de pantalla (421).png

Edited by Ezequiel Torres

Share this post


Link to post
Share on other sites

×
×
  • Create New...