Unity 一键给所有按钮添加按钮音效

UGUI使用,NGUI需要稍微修改一点

1.按钮音效脚本

//=====================================================
// - FileName:      SoundButtonTool.cs
// - Author:       Autumn
// - CreateTime:    2019/05/28 10:51:42
// - Email:         543761701@qq.com
// - Description:   
// -  (C) Copyright 2019, webeye,Inc.
// -  All Rights Reserved.
//======================================================
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Qarth;

namespace GameWish.Game
{
    public enum ButtonClickSound
    {
        Normal,
        Close,
    }

    [RequireComponent(typeof(Button))]
    public class SoundButtonTool : MonoBehaviour
    {
        public ButtonClickSound clickSound = ButtonClickSound.Normal;
        void ClickSound()
        {
            switch (clickSound)
            {
                case ButtonClickSound.Normal:
                    AudioMgr.S.PlaySound(GameSound.EFFECT_CLICK_BTN);
                    break;
                case ButtonClickSound.Close:
                    AudioMgr.S.PlaySound(GameSound.EFFECT_CLOSE_BTN);
                    break;
            }
        }
        private void Awake()
        {
            Button btn = GetComponent<Button>();
            if (btn != null)
            {
                btn.onClick.AddListener(ClickSound);
            }
        }
    }
}

2.Editor工具类

//=====================================================
// - FileName:      AddButtonClickSound.cs
// - Author:       Autumn
// - CreateTime:    2019/05/28 10:59:23
// - Email:         543761701@qq.com
// - Description:   
// -  (C) Copyright 2019, webeye,Inc.
// -  All Rights Reserved.
//======================================================
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Qarth;
using UnityEditor;
using UnityEngine.EventSystems;

namespace GameWish.Game 
{
    public class AddButtonClickSound : ScriptableObject
    {
        [MenuItem("Tools/ButtonAudio/AddButtonSoundInScene")]
        static void AddSoundForButton() 
        {
            GetAllSelectGo((child)=>
            {
                if (child.GetComponent<Button>() != null)
                {
                    Log.i("{0} 按钮添加音效{1}!", child.name, child.GetComponent<SoundButtonTool>() == null ? "成功" : "失败(已经添加过,建议先clearAll)");
                    child.AddMissingComponent<SoundButtonTool>();
                    if (child.name.Contains("Close") || child.name.Contains("close") || child.name.Contains("Back") || child.name.Contains("back"))
                    {
                        child.GetComponent<SoundButtonTool>().clickSound = ButtonClickSound.Close;
                    }
                }
            });

            //GameObject[] go;
            //go = FindObjectsOfType(typeof(GameObject)) as GameObject[];
            //foreach (GameObject child in go) 
            //{
            //    if (child.GetComponent<Button>() != null) 
            //    {
            //        Log.i("{0} 按钮添加音效{1}!", child.name, child.GetComponent<SoundButtonTool>() == null ? "成功" : "失败(已经添加过,建议先clearAll)");
            //        child.AddMissingComponent<SoundButtonTool>();
            //        if (child.name.Contains("Close") || child.name.Contains("close") || child.name.Contains("Back") || child.name.Contains("back")) 
            //        {
            //            child.GetComponent<SoundButtonTool>().clickSound = ButtonClickSound.Close;
            //        }
            //    }
            //}
        }

        [MenuItem("Tools/ButtonAudio/ClearAllButtonSoundInScene")]
        static void DeleteSoundForButton()
        {
            GetAllSelectGo((child) =>
            {
                if (child.GetComponent<Button>() != null)
                {
                    if (child.GetComponent<SoundButtonTool>() != null)
                    {
                        DestroyImmediate(child.GetComponent<SoundButtonTool>());
                        Log.i("{0} 按钮移除音效成功!", child.name);
                    }
                }
            });
            //GameObject[] go;
            //go = FindObjectsOfType(typeof(GameObject)) as GameObject[];
            //foreach (GameObject child in go)
            //{
            //    if (child.GetComponent<SoundButtonTool>() != null)
            //    {
            //        DestroyImmediate(child.GetComponent<SoundButtonTool>());
            //        Log.i("{0} 按钮移除音效成功!", child.name);
            //    }
            //}
        }

        static void GetAllSelectGo(Action<GameObject> handle) 
        {
            GameObject[] go = Selection.gameObjects;
            foreach (GameObject child in go) 
            {
                Log.i("parent_{0}",child.name);
                child.IterateGameObject(handle);
            }
        }
    }
}

里面用到一些框架的功能,其实可以用你们自己代替 比如AddMissingComponent,Log.i其实就是Debug.Log,AudioMgr这些用自己的方法替代就好了。多余的引用自行删除即可。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Unity是一种集成开发环境,用于开发2D和3D多平台游戏、应用程序和交互式体验。Unity引擎支持多种平台,并具有完全可自定义的输入系统,可实现跨平台开发和部署。Unity引擎提供了许多工具和功能,可轻松地创建出色的游戏和交互式体验。 在Unity引擎中,Shader是一种特殊的程序,用于呈现3D对象。当我们使用Shader时,会创建出许多不同的Shader变体,以匹配不同的硬件和图形API。这些变体可能会导致内存使用量增加,从而影响游戏的性能。因此,Unity提供了一种功能,用于自动收集所有Shader变体。 使用unity 一键自动收集所有shader变体功能,可以更好地管理Shader变体,并将其转化为更有效的方式运行。这种功能可对我们开发过程中的时间和性能产生积极的影响。一键自动收集功能的实现原理是,Unity会扫描场景中使用到的Shaders,并在运行时自动生成他们的变体。这些变体将根据当前硬件和图形API的能力进行优化,以确保游戏在不同的设备和平台上都能够正常工作。 总的来说,unity 一键自动收集所有shader变体功能是Unity引擎提供的重要功能之一,它可以帮助我们轻松管理Shaders,并优化游戏的性能和体验。这个功能的使用需要我们了解Shaders的相关知识和优化方法,在实际开发中充分利用这个功能的优势,以创造出更出色的游戏体验。 ### 回答2: Unity是一款流行的游戏开发引擎,其着重于易用性和跨平台性。它的一键自动收集所有Shader变体功能有助于优化游戏性能。 Shader是Unity中的重要组成部分,它控制着游戏中物体的外观和动画。在Unity中,一个Shader可以包含多个变体,每个变体可以对应一种不同的物体属性或光照条件。然而,每个变体都会带来一定的额外开销,如内存占用和编译时间。因此,对于大型项目,有时需要限制生成变体的数量。 在之前的Unity版本中,开发者需要手动收集和管理所有的Shader变体。这使得Shader变体的管理变得非常繁琐,并且容易出现错误。但是,现在Unity引入了一键自动收集所有Shader变体的功能。这个功能简化了Shader变体管理的流程,使得开发者可以更轻松地控制Shader在游戏中的表现。 这个功能的工作原理非常简单,Unity会在游戏运行前自动收集所有的Shader变体,并生成一个包含所有变体的列表。这个列表可以被开发者用来分析哪些变体需要被优化或删除。此外,这个功能还可以在发布游戏时从项目中删除未使用的Shader变体以减少包的大小。 总之,一键自动收集所有Shader变体是一个非常有用的功能,它可以简化开发者的工作流程并提高游戏性能。 ### 回答3: Unity是一款非常流行的游戏开发引擎,它的Shader变体管理系统可以让开发者轻松管理不同平台和设备上的Shader,提高游戏的性能和稳定性。而Unity一键自动收集所有Shader变体功能则可以进一步简化Shader变体管理的流程。 该功能可以通过在Unity的菜单栏中选择“Assets”→“Shader Variants Collector”来实现。当点击该菜单时,Unity会自动扫描项目中的所有Shader,并生成一个清单,列出所有已定义的变体。在生成清单后,用户可以选择一键收集所有变体信息,然后将其保存到硬盘上的一个文件中。此外,用户还可以选择将这些变体信息上传到Unity的服务器上,以便其他团队成员能够访问并使用。 通过使用Unity一键自动收集所有Shader变体功能,开发者可以极大地方便Shader变体管理的流程,同时还能大大减少出错的概率,提高工作效率和游戏的表现。因此,这是一个非常实用和方便的功能,也是众多游戏开发者使用Unity引擎的很重要的原因之一。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值