音频Action
This commit is contained in:
parent
b2ec38ac26
commit
7414d53f40
@ -166,6 +166,11 @@ public class ActionHelper
|
|||||||
var strAction = (XMLTool.StringListAction)act;
|
var strAction = (XMLTool.StringListAction)act;
|
||||||
return LoadResAction.Allocate(act.Value, strAction.args[0]);
|
return LoadResAction.Allocate(act.Value, strAction.args[0]);
|
||||||
}
|
}
|
||||||
|
case "Audio":
|
||||||
|
{
|
||||||
|
var strAction = (XMLTool.StringListAction)act;
|
||||||
|
return AudioAction.Allocate(act.Value, strAction.args[0], strAction.args[1], strAction.args[2], strAction.args[3], strAction.args[4]);
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
Debug.LogError($"没有找到此Action的类型{act.Type}");
|
Debug.LogError($"没有找到此Action的类型{act.Type}");
|
||||||
break;
|
break;
|
||||||
|
|||||||
167
Assets/Scripts/Actions/AudioAction.cs
Normal file
167
Assets/Scripts/Actions/AudioAction.cs
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace QFramework
|
||||||
|
{
|
||||||
|
internal class AudioAction : IAction
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public System.Action OnFinished { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
private AudioAction()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly SimpleObjectPool<AudioAction> mPool =
|
||||||
|
new SimpleObjectPool<AudioAction>(() => new AudioAction(), null, 10);
|
||||||
|
|
||||||
|
public string path;
|
||||||
|
public string audioType;
|
||||||
|
bool loop = false;
|
||||||
|
public bool waitFinished = true;
|
||||||
|
bool isPlay = true;
|
||||||
|
float volume;
|
||||||
|
ResLoader loader;
|
||||||
|
public static AudioAction Allocate(string path, string audioType, string loop, string waitFinished, string volume, string isPlay, System.Action OnFinished = null)
|
||||||
|
{
|
||||||
|
var retNode = mPool.Allocate();
|
||||||
|
retNode.ActionID = ActionKit.ID_GENERATOR++;
|
||||||
|
retNode.Deinited = false;
|
||||||
|
retNode.Reset();
|
||||||
|
retNode.path = path;
|
||||||
|
retNode.audioType = audioType;
|
||||||
|
bool.TryParse(loop, out retNode.loop);
|
||||||
|
bool.TryParse(waitFinished, out retNode.waitFinished);
|
||||||
|
retNode.OnFinished = OnFinished;
|
||||||
|
bool.TryParse(isPlay, out retNode.isPlay);
|
||||||
|
if (string.IsNullOrEmpty(volume))
|
||||||
|
{
|
||||||
|
retNode.volume = AudioKit.Settings.MusicVolume.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float.TryParse(volume, out retNode.volume);
|
||||||
|
}
|
||||||
|
return retNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ulong ActionID { get; set; }
|
||||||
|
public ActionStatus Status { get; set; }
|
||||||
|
|
||||||
|
public void OnStart()
|
||||||
|
{
|
||||||
|
if (isPlay)
|
||||||
|
{
|
||||||
|
loader = ResLoader.Allocate();
|
||||||
|
string audioPath = Global.audioPath + path;
|
||||||
|
loader.Add2Load(audioPath.ToLocalAudioResName(), (success, res) =>
|
||||||
|
{
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
AudioClip clip = res.Asset.As<AudioClip>();
|
||||||
|
|
||||||
|
switch (audioType)
|
||||||
|
{
|
||||||
|
case "Music":
|
||||||
|
if (waitFinished == false)
|
||||||
|
{
|
||||||
|
this.Finish();
|
||||||
|
AudioKit.PlayMusic(clip, loop: loop);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AudioKit.PlayMusic(clip, loop: loop, onEndCallback: OnPlayFinished);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Voice":
|
||||||
|
if (waitFinished == false)
|
||||||
|
{
|
||||||
|
this.Finish();
|
||||||
|
AudioKit.PlayVoice(clip, loop: loop);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AudioKit.PlayVoice(clip, loop: loop, onEndedCallback: OnPlayFinished);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "Sound":
|
||||||
|
if (waitFinished == false)
|
||||||
|
{
|
||||||
|
this.Finish();
|
||||||
|
AudioKit.PlaySound(clip, loop: loop);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AudioKit.PlaySound(clip, loop: loop, callBack: OnSoundPlayFinished);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
loader.LoadAsync();
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (audioType)
|
||||||
|
{
|
||||||
|
case "Music":
|
||||||
|
AudioKit.StopMusic();
|
||||||
|
break;
|
||||||
|
case "Voice":
|
||||||
|
AudioKit.StopVoice();
|
||||||
|
break;
|
||||||
|
case "Sound":
|
||||||
|
AudioKit.StopAllSound();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnPlayFinished()
|
||||||
|
{
|
||||||
|
Debug.LogError("OnPlayFinished");
|
||||||
|
this.Finish();
|
||||||
|
}
|
||||||
|
public void OnSoundPlayFinished(AudioPlayer player)
|
||||||
|
{
|
||||||
|
OnPlayFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnExecute(float dt)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnFinish()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
Status = ActionStatus.NotStart;
|
||||||
|
Paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Paused { get; set; }
|
||||||
|
|
||||||
|
public void Deinit()
|
||||||
|
{
|
||||||
|
if (!Deinited)
|
||||||
|
{
|
||||||
|
OnFinished = null;
|
||||||
|
Deinited = true;
|
||||||
|
//loader.Recycle2Cache();
|
||||||
|
mPool.Recycle(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Deinited { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
11
Assets/Scripts/Actions/AudioAction.cs.meta
Normal file
11
Assets/Scripts/Actions/AudioAction.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 701ece2f3b3a0ab448541d3fbfc67087
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -699,6 +699,58 @@ namespace XMLTool
|
|||||||
newAction = act;
|
newAction = act;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "Audio":
|
||||||
|
{
|
||||||
|
//string path, string audioType, string loop, string finishedEvent, string volume,
|
||||||
|
var act = new StringListAction();
|
||||||
|
XAttribute audioType = action.Attribute("audioType");
|
||||||
|
if (audioType != null)
|
||||||
|
{
|
||||||
|
act.args.Add(audioType.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act.args.Add("Sound");
|
||||||
|
}
|
||||||
|
XAttribute loop = action.Attribute("loop");
|
||||||
|
if (loop != null)
|
||||||
|
{
|
||||||
|
act.args.Add(loop.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act.args.Add("false");
|
||||||
|
}
|
||||||
|
XAttribute waitFinished = action.Attribute("waitFinished");
|
||||||
|
if (waitFinished != null)
|
||||||
|
{
|
||||||
|
act.args.Add(waitFinished.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act.args.Add("");
|
||||||
|
}
|
||||||
|
XAttribute volume = action.Attribute("volume");
|
||||||
|
if (volume != null)
|
||||||
|
{
|
||||||
|
act.args.Add(volume.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act.args.Add("");
|
||||||
|
}
|
||||||
|
XAttribute isPlay = action.Attribute("isPlay");
|
||||||
|
if (isPlay != null)
|
||||||
|
{
|
||||||
|
act.args.Add(isPlay.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act.args.Add("true");
|
||||||
|
}
|
||||||
|
newAction = act;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
newAction = new Action();
|
newAction = new Action();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -541,6 +541,7 @@
|
|||||||
<Action type="Parallel">
|
<Action type="Parallel">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--房间墙壁 暂时隐藏-->
|
<!--房间墙壁 暂时隐藏-->
|
||||||
<Action type="Show" value="SM_QvanChangJing/sence/pPlane1" isShow="false"></Action>
|
<Action type="Show" value="SM_QvanChangJing/sence/pPlane1" isShow="false"></Action>
|
||||||
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/zuzhiqian" isShow="false"></Action>
|
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/zuzhiqian" isShow="false"></Action>
|
||||||
@ -638,7 +639,11 @@
|
|||||||
</Reset>
|
</Reset>
|
||||||
<Start>
|
<Start>
|
||||||
<Action type="Sequence">
|
<Action type="Sequence">
|
||||||
|
<!--string audioType, string loop, string waitFinished, string volume, string isPlay,-->
|
||||||
|
<Action type="Audio" audioType="Voice" value="q001.mp3" loop="false" waitFinished="true" volumen="1" isPlay="true"></Action>
|
||||||
|
<Action type="Log" value="0000"></Action>
|
||||||
|
|
||||||
|
|
||||||
<Action type="Video" value="test.mp4" size="700,700" offset="100,100" finishedEvent="finished" closeEvent="close"/>
|
<Action type="Video" value="test.mp4" size="700,700" offset="100,100" finishedEvent="finished" closeEvent="close"/>
|
||||||
|
|
||||||
<Condition type="StrEvent" value="close"></Condition>
|
<Condition type="StrEvent" value="close"></Condition>
|
||||||
|
|||||||
@ -55,7 +55,14 @@
|
|||||||
<Action type="HighLight" value="路径" isHigh="true" color="0,255,0,255"></Action>
|
<Action type="HighLight" value="路径" isHigh="true" color="0,255,0,255"></Action>
|
||||||
<!--延迟 value是秒-->
|
<!--延迟 value是秒-->
|
||||||
<Action type="Delay" value="2"></Action>
|
<Action type="Delay" value="2"></Action>
|
||||||
|
<!--
|
||||||
|
* audioType="Music" 播放背景音乐,同一时间只能播放一个音乐,播放别的音乐会直接卸载掉正在播放的音乐。
|
||||||
|
* audioType="Sound" 播放音效,同一时间可以播放多个音效,当多人说话时,也可以用来播放人声。
|
||||||
|
* audioType="Voice" 播放人声,与播放背景音乐一致,同一时间只能播放一个人声,用于播放一些旁白之类的声音非常适合。
|
||||||
|
volumen 是播放音量 默认是跟随设置中的背景音乐的音量
|
||||||
|
waitFinished = false 则不会等待播放完成就往下进行
|
||||||
|
-->
|
||||||
|
<Action type="Audio" audioType="Voice" value="q001.mp3" loop="false" waitFinished="true" volumen="1" isPlay="true"></Action>
|
||||||
|
|
||||||
<!--判断UI点击-->
|
<!--判断UI点击-->
|
||||||
<Condition type="UIClick" value="UI路径 可以使用快捷键Ctrl+Q获取"></Condition>
|
<Condition type="UIClick" value="UI路径 可以使用快捷键Ctrl+Q获取"></Condition>
|
||||||
|
|||||||
@ -120,7 +120,7 @@ QualitySettings:
|
|||||||
globalTextureMipmapLimit: 0
|
globalTextureMipmapLimit: 0
|
||||||
textureMipmapLimitSettings: []
|
textureMipmapLimitSettings: []
|
||||||
anisotropicTextures: 1
|
anisotropicTextures: 1
|
||||||
antiAliasing: 8
|
antiAliasing: 2
|
||||||
softParticles: 0
|
softParticles: 0
|
||||||
softVegetation: 1
|
softVegetation: 1
|
||||||
realtimeReflectionProbes: 1
|
realtimeReflectionProbes: 1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user