算是一个扩展,游戏中很多按键都会有点击音效,因为按键太多,如果每个按键都手动绑定或者代码绑定监听事件,都比较繁琐,而且容易遗漏。
我的做法是获取场景中所有的Button,统一添加监听事件不需要单独添加音效事件。
待实现功能:
- 如果不同的按键有不同的点击音效,可以在命名上做一下区分,添加一个后缀,在统一添加监听事件时,根据不同的后缀名,来绑定不同事件。
- 如果场景中按键较多,可以利用协程,分批次进行处理,将运算量分散。
- 如果有动态加载的按键Object,现有2个方案可供参考(未实际测试,只是一个设想),一是直接获取Prefab添加监听事件,二是在动态加载的过程中,判断是否有Button组件,有则添加事件。
目前先实现基础功能,项目中可根据实际情况,继续扩展 ··· ···
void GetAllButtonAddListener()
{
//获取场景所有物体
GameObject[] allObj = Resources.FindObjectsOfTypeAll(typeof(GameObject)) as GameObject[];
int btnCount = 0;
Button tmpButton;
for (int i = 0; i < allObj.Length; i++)
{
tmpButton = allObj[i].GetComponent<Button>();
if (tmpButton != null)
{
btnCount++;
tmpButton.onClick.AddListener(() => SoundManager.instance.PlaySound(Clip.button));
}
}
Debug.Log("<color=green> 当前场景共有:物体 </color>" + allObj.Length + "<color=green> 个,Button组件 </color>" + btnCount + "<color=green> 个 </color>");
}