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ámetro | Descripción | Componente |
|---|---|---|
| _audioSource | El componente Audio Source que reproduce el clip de audio a seguir para su visualización. | VoiceIndicator / VirtualTrainer |
| _dots | Los componentes RectTransform a escalar con base en los datos de amplitud del clip de audio que está siendo reproducido. | VoiceIndicator |
| _scaleMultiplier | La cantidad a escalar los componentes RectTransform de las imágenes “_dots”. | VoiceIndicator |
| _smoothSpeed | Determina qué tan suave sería la animación de escala de las imágenes “_dots”. | VoiceIndicator |
| _animator | Componente Animator para las animaciones de “Contraer” y “Expandir” la interfaz gráfica. | VirtualTrainer |
| _canvas | El Canvas de la interfaz gráfica. Se activa en caso de que esté apagado en un inicio. | VirtualTrainer |
| _onFinishPlaying | Lista de eventos que se ejecutan cada que una cola de clips de audio termina de reproducirse. | VirtualTrainer |
| _virtualTrainer | El componente VirtualTrainer a usar para ser movido a la posición de este GameObject. | VirtualTrainerSpot |
| _expandInterface | Define si expandir o no la interfaz del avatar del Virtual Trainer. | VirtualTrainerSpot |
| _audioClips | Lista de audio clips a reproducir. | VirtualTrainerSpot |
| _contractAtTheEnd | Define si la interfaz del avatar se debe contraer una vez terminados todos los audio clips. | VirtualTrainerSpot |
| _speed | Determina 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