Skip to content

Instantly share code, notes, and snippets.

@corytrese
Created June 22, 2020 20:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save corytrese/13b86a4c6857c0a2cebe67c7a7416513 to your computer and use it in GitHub Desktop.
Save corytrese/13b86a4c6857c0a2cebe67c7a7416513 to your computer and use it in GitHub Desktop.
MonoBehaviour that Connects WWise AKEvents to Unity IEventSystemHandler
using UnityEngine;
using UnityEngine.EventSystems;
namespace RPG.Audio
{
[AddComponentMenu("UI/Audio/Play Audio WWise")]
public class UIPlayAudioWWise : MonoBehaviour, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{
public enum Event
{
None,
PointerEnter,
PointerExit,
PointerDown,
PointerUp,
Click,
DoubleClick
}
[SerializeField] private Event m_PlayOnEvent = Event.None;
public AK.Wwise.Event m_AkSoundEvent = new AK.Wwise.Event();
/// <summary>
/// Gets or sets the event on which the audio clip should be played.
/// </summary>
public Event playOnEvent { get { return this.m_PlayOnEvent; } set { this.m_PlayOnEvent = value; } }
/// <summary>
/// Gets or sets the audio clip.
/// </summary>
public AK.Wwise.Event audioClip { get { return this.m_AkSoundEvent; } set { this.m_AkSoundEvent = value; } }
private bool m_Pressed = false;
public void OnPointerEnter(PointerEventData eventData)
{
if (!this.m_Pressed)
this.TriggerEvent(Event.PointerEnter);
}
public void OnPointerExit(PointerEventData eventData)
{
if (!this.m_Pressed)
this.TriggerEvent(Event.PointerExit);
}
public void OnPointerDown(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left)
return;
this.TriggerEvent(Event.PointerDown);
this.m_Pressed = true;
}
public void OnPointerUp(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left)
return;
this.TriggerEvent(Event.PointerUp);
if (this.m_Pressed)
{
if (eventData.clickCount > 1)
{
this.TriggerEvent(Event.DoubleClick);
eventData.clickCount = 0;
}
else
{
this.TriggerEvent(Event.Click);
}
}
this.m_Pressed = false;
}
private void TriggerEvent(Event e)
{
if (e == this.m_PlayOnEvent)
{
this.PlayAudio();
}
}
public void PlayAudio()
{
if (!this.enabled || !this.gameObject.activeInHierarchy)
{
return;
}
if (this.m_AkSoundEvent == null)
{
return;
}
m_AkSoundEvent.Post(gameObject);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment