Files
JJBB/Assets/Project/Script/ButtonPlaySound.cs

91 lines
3.1 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
///
//规则是这样的 可以在每个窗口UI下添加该脚本 音效ID在 Sound.txt表格中配置
// UI生效时会 遍历窗口所有的子控件寻找Button等脚本 并添加Button等点击事件 播放音效
// 窗口所有的Button点击播放的音效一样如果有些button小播放其它的音效就需要在该button下添加该脚本。
// UGUI中有些是继承的 IPointerClickHandler事件它的点击也需要添加音效的话就需要在该脚本的问题上也添加一个
// ButtonPlaySound脚本 。在IPointerClickHandler事件的触发函数中寻找 ButtonPlaySound脚本并调用 PlaySound函数
//
///
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.GlobeDefine;
public class ButtonPlaySound : MonoBehaviour {
public int SoundSourceId = GlobeVar.defaultButtonSound; //Button的音效也配置在表格中吧 表格中默认的是音效 id=7
public bool IsForBidSound = false; //是否禁止音效 true禁止 false不禁止
void Start () {
//先添加这两种吧,看后面有没有需要增加的
SetButtonSound();
SetToggleSound();
}
private void SetToggleSound()
{
Toggle[] toggles = GetComponentsInChildren<Toggle>();
for (int i = 0; i < toggles.Length; i++)
{
Toggle toggle = toggles[i];
ButtonPlaySound ChildSound = toggle.gameObject.GetComponent<ButtonPlaySound>();
if (ChildSound != null)
{
if (ChildSound.SoundSourceId > 0)
continue;
if (IsForBidSound)
continue;
}
for (int j = 0; j < toggle.onValueChanged.GetPersistentEventCount(); j++)
{
toggle.onValueChanged.SetPersistentListenerState(j, UnityEngine.Events.UnityEventCallState.RuntimeOnly);
}
toggle.onValueChanged.AddListener(delegate (bool isOn)
{
if (isOn)
PlaySound();
});
}
}
private void SetButtonSound()
{
Button[] btns = GetComponentsInChildren<Button>();
for (int i = 0; i < btns.Length; i++)
{
Button btnChild = btns[i];
ButtonPlaySound ChildSound = btnChild.gameObject.GetComponent<ButtonPlaySound>();
if (ChildSound != null)
{
if (ChildSound.SoundSourceId > 0)
continue;
if (IsForBidSound)
continue;
}
for (int j = 0; j < btnChild.onClick.GetPersistentEventCount(); j++)
{
btnChild.onClick.SetPersistentListenerState(j, UnityEngine.Events.UnityEventCallState.RuntimeOnly);
}
btnChild.onClick.AddListener(PlaySound);
}
}
public void PlaySound()
{
if (IsForBidSound)
return;
if(SoundSourceId>=0 && GameManager.gameManager!=null && GameManager.gameManager.SoundManager!=null)
{
GameManager.gameManager.SoundManager.PlaySoundEffect(SoundSourceId);
}
}
}