Saltar al contenido principal

Virtual Trainer

Implementación

Prefabs:

  • Virtual Trainer

Coloca el prefab Virtual Trainer en la escena, y dentro de su canvas en el GameObject “Ring_Image” cambia la imagen por la deseada en tu proyecto de ser necesario.

Componentes:

  • Usa el componente Virtual Trainer Spot dentro de un GameObject para definir una nueva ubicación del Virtual Trainer. El método DisplayInstructor() cambia la ubicación del Virtual Trainer a la del GameObject con el componente adjunto.

Parámetros

ParámetroDescripciónComponente
_audioSourceEl componente Audio Source que reproduce el clip de audio a seguir para su visualización.VoiceIndicator / VirtualTrainer
_dotsLos componentes RectTransform a escalar con base en los datos de amplitud del clip de audio que está siendo reproducido.VoiceIndicator
_scaleMultiplierLa cantidad a escalar los componentes RectTransform de las imágenes “_dots”.VoiceIndicator
_smoothSpeedDetermina qué tan suave sería la animación de escala de las imágenes “_dots”.VoiceIndicator
_animatorComponente Animator para las animaciones de “Contraer” y “Expandir” la interfaz gráfica.VirtualTrainer
_canvasEl Canvas de la interfaz gráfica. Se activa en caso de que esté apagado en un inicio.VirtualTrainer
_onFinishPlayingLista de eventos que se ejecutan cada que una cola de clips de audio termina de reproducirse.VirtualTrainer
_virtualTrainerEl componente VirtualTrainer a usar para ser movido a la posición de este GameObject.VirtualTrainerSpot
_expandInterfaceDefine si expandir o no la interfaz del avatar del Virtual Trainer.VirtualTrainerSpot
_audioClipsLista de audio clips a reproducir.VirtualTrainerSpot
_contractAtTheEndDefine si la interfaz del avatar se debe contraer una vez terminados todos los audio clips.VirtualTrainerSpot
_speedDetermina la velocidad de rotación en el eje Z del GameObject al que esté adjunto.Orbit

Métodos públicos

VirtualTrainer.cs

Expand()

public void Expand()
{
if(!_animator.GetCurrentAnimatorStateInfo(0).IsName("Expand"))
_animator.SetTrigger("Expand");
}

Contract()

public void Contract()
{
if(!_animator.GetCurrentAnimatorStateInfo(0).IsName("Contract"))
_animator.SetTrigger("Contract");
}

MoveTo(Transform newTransform, bool expanded = false)

public void MoveTo(Transform newTransform, bool expanded = false)
{
transform.position = newTransform.position;

if (expanded)
Expand();
else
Contract();
}

PlayClip(AudioClip clip)

public void PlayClip(AudioClip clip)
{
if(!_canvas.activeSelf)
_canvas.SetActive(true);

_audioSource.clip = clip;
_audioSource.Play();

StartCoroutine(WaitForClip());
}

PlayClipAndContract(AudioClip clip)

public void PlayClipAndContract(AudioClip clip)
{
_contractAtTheEnd = true;
PlayClip(clip);
}

PlayClip(List<AudioClip> clips)

public void PlayClip(List<AudioClip>  clips)
{
foreach (var clip in clips)
_clipsQueued.Add(clip);

PlayClip(_clipsQueued[0]);
}

PlayClipAndContract(List<AudioClip> clips)

public void PlayClipAndContract(List<AudioClip>  clips)
{
foreach (var clip in clips)
_clipsQueued.Add(clip);

PlayClip(_clipsQueued[0]);
_contractAtTheEnd = true;
}

SetRepeatTiming(float value)

public void SetRepeatTiming(float value)
{
if (value >= 2f)
_repeatClipsAfter = value;
}

PlayAndRepeat(AudioClip clip)

public void PlayAndRepeat(AudioClip clip)
{
PlayClip(clip);
_isWaitingForClip = true;
}

WaitAndPlayRepeating(AudioClip clip)

public void WaitAndPlayRepeating(AudioClip clip)
{
_audioSource.clip = clip;
_isRepeating = true;
}

StopRepeating()

public void StopRepeating()
{
_audioSource.Stop();
_clipWastedTime = 0f;
_wastedTime = 0f;
_isWaitingForClip = false;
_isRepeating = false;
}

VirtualTrainerSpot.cs

public void DisplayInstructor()
{
if (_contractAtTheEnd)
_virtualTrainer.PlayClipAndContract(_audioClips);
else
_virtualTrainer.PlayClip(_audioClips);

_virtualTrainer.MoveTo(transform, _expandInterface);
}

Dependencias

  • Componente “Orbit” dentro del Framework. Framework > Assets > _FRAMEWORK > Components

Diagramas