Playmaker Forum
PlayMaker Updates & Downloads => Share New Actions => Topic started by: jeanfabre on January 07, 2013, 02:07:37 AM
-
Hi everyone,
Following some issues on the audioPlay official action, the volume was not updating, it would only set the volume when the action begins.
http://hutonggames.com/playmakerforum/index.php?topic=2765.0 (http://hutonggames.com/playmakerforum/index.php?topic=2765.0)
I have fixed the action, BUT, it can not work for oOne Shot Audio, ONLY the Audio source of the gameObject targeted can have it's volume controlled, playing a oneshot audio is a kind of a hack on the unity component itself ( implemened by Unity, so nothing PlayMaker can do about it)
IF you want to use this action with a one shot audio and still control the volume, simply use "Set Audio Clip" before, and play the audio normally, then with this action revision, controlling the volume is possible.
[Tooltip("Plays the Audio Clip set with Set Audio Clip or in the Audio Source inspector on a Game Object. Optionally plays a one shot Audio Clip.")]
public class AudioPlay : FsmStateAction
{
[RequiredField]
[CheckForComponent(typeof(AudioSource))]
[Tooltip("The GameObject with the AudioSource component.")]
public FsmOwnerDefault gameObject;
[HasFloatSlider(0,1)]
public FsmFloat volume;
[ObjectType(typeof(AudioClip))]
[Tooltip("Optionally play a 'one shot' AudioClip.")]
public FsmObject oneShotClip;
[Tooltip("Event to send when the AudioClip finished playing.")]
public FsmEvent finishedEvent;
AudioSource audio;
public override void Reset()
{
gameObject = null;
volume = 1f;
oneShotClip = null;
}
public override void OnEnter()
{
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (go != null)
{
// cache the AudioSource component
audio = go.audio;
if (audio != null)
{
var audioClip = oneShotClip.Value as AudioClip;
if (audioClip == null)
{
audio.Play();
if (!volume.IsNone)
{
audio.volume = volume.Value;
}
return;
}
if (!volume.IsNone)
{
audio.PlayOneShot(audioClip, volume.Value);
}
else
{
audio.PlayOneShot(audioClip);
}
return;
}
}
// Finish if failed to play sound
Finish();
}
public override void OnUpdate ()
{
if (audio == null)
{
Finish();
}
else
{
if (!audio.isPlaying)
{
Fsm.Event(finishedEvent);
Finish();
}else if (volume.Value!= audio.volume)
{
audio.volume = volume.Value;
}
}
}
}
}]
// (c) Copyright HutongGames, LLC 2010-2011. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Audio)]
[Tooltip("Plays the Audio Clip set with Set Audio Clip or in the Audio Source inspector on a Game Object. Optionally plays a one shot Audio Clip.")]
public class AudioPlay : FsmStateAction
{
[RequiredField]
[CheckForComponent(typeof(AudioSource))]
[Tooltip("The GameObject with the AudioSource component.")]
public FsmOwnerDefault gameObject;
[HasFloatSlider(0,1)]
public FsmFloat volume;
[ObjectType(typeof(AudioClip))]
[Tooltip("Optionally play a 'one shot' AudioClip.")]
public FsmObject oneShotClip;
[Tooltip("Event to send when the AudioClip finished playing.")]
public FsmEvent finishedEvent;
AudioSource audio;
public override void Reset()
{
gameObject = null;
volume = 1f;
oneShotClip = null;
}
public override void OnEnter()
{
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (go != null)
{
// cache the AudioSource component
audio = go.audio;
if (audio != null)
{
var audioClip = oneShotClip.Value as AudioClip;
if (audioClip == null)
{
audio.Play();
if (!volume.IsNone)
{
audio.volume = volume.Value;
}
return;
}
if (!volume.IsNone)
{
audio.PlayOneShot(audioClip, volume.Value);
}
else
{
audio.PlayOneShot(audioClip);
}
return;
}
}
// Finish if failed to play sound
Finish();
}
public override void OnUpdate ()
{
if (audio == null)
{
Finish();
}
else
{
if (!audio.isPlaying)
{
Fsm.Event(finishedEvent);
Finish();
}else if (volume.Value!= audio.volume)
{
audio.volume = volume.Value;
}
}
}
}
} (http://hutonggames.com// (c) Copyright HutongGames, LLC 2010-2011. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Audio))
-
Looking forward to trying this out.
-
Thanks Jean! I've integrated this fix in the next update...
-
Does not seem to have an effect on animated floats.
-
Hi,
the way you animate the float that you inject in this action should not have any impact.
I would suggest you debug this using the inspector and make the float animation a lot slower, to make sure that it first animates like you want, and that the values are correct ( you might animate the volume in a small range not noticeable to the hear)
bye,
Jean