Unity AudioSource代码创建方法,音频编程

自动生产代码


一、前言

由于之前写过关于UI框架的文章,这篇基于之前的基础,添加了自动生成代码的功能;



二、效果展示

unity AudioSource 怎么用代码创建 unity怎么编写代码_加载

三、将UIFrame打包成dll

我使用的是Rider编辑器,用其他的也可以;

目的就是将之前写好的UIFrame框架的几个公共类打包成dll供调用,只有打包成dll才可以在Plugins和Scripts文件夹中都能使用;

操作步骤如下:

1.创建新的classLibrary解决方案:

unity AudioSource 怎么用代码创建 unity怎么编写代码_UI_02

2.导入写好的类,目前只需要到这以下这三个类即可;

这几个类要添加统一的命名空间,只有在其他项目使用只需要using这个命名空间即可;

unity AudioSource 怎么用代码创建 unity怎么编写代码_加载_03

3.点击BuildSolution打包;

由于这几个类继承了MonoBehaviour,需要添加UnityEngine依赖,根据错误提示添加;

另外.Net的版本过高也会导致打包出错,修改一下版本即可;

unity AudioSource 怎么用代码创建 unity怎么编写代码_字符串_04

unity AudioSource 怎么用代码创建 unity怎么编写代码_unity_05

四、自动生成代码

主要方法类UGUITool;由于是编辑器拓展功能,必须放在plugins文件夹下;

字段:

uiDirPath:所有面板加载路径;

classPath:自动生成的代码存放路径;

classTemp:自动化代码模板字符串;

方法:

CreateCode():核心方法;

思路:

1.根据面板加载路径,读取所有面板的prefab信息;

2.根据预制体的名称,自动生成@Init和@UIType部分的代码字符串;

3.字符串全部生成完成后替换对应部分,保存在存放路径;

注意:

我这里所有面板都是放在Resources中的,如果正式项目肯定不会Resources加载,所以需要做SteamingAssets路径判断;

代码部分:

登录后复制


public class UGUITool
{
    public static string uiDirPath = "Resources/Prefabs/UIPanel/";
    public static string classPath = "Scripts/UIFrame/UIManagerA.cs";

    private static string classTemp =
        @"
        using System.Collections;
        using System.Collections.Generic;
        using UnityEngine;
        using UnityEngine.UI;
        using UIFrame;
        public partial class UIManager : MonoSingle<UIManager>
        {
            private void InitPath()
            {
                dicPath = new Dictionary<string, string>();     
                //@Init
            }
        }
        
        public class UIType
        {
            //@UIType
        }
";

    [MenuItem("LittlePerilla/UGUI/CreateCode")]
    public static void CreateCode()
    {
        //Resources可以替换
        string path = Path.Combine(Application.dataPath, uiDirPath);
        Debug.Log("生成代码" + path);
        
        StringBuilder pt = new StringBuilder();
        StringBuilder tp = new StringBuilder();
        GameObject go = null;
        string[] fileList = Directory.GetFiles(path, "*.prefab", SearchOption.AllDirectories);
        int index = 0;

        string s = "Resources";
        foreach (var filePath in fileList)
        {
            string newPath = string.Empty;
            newPath = filePath.Replace("\\", "/");
            if (newPath.Contains(s))
            {
                newPath = newPath.Substring(newPath.IndexOf(s) + s.Length + 1);
                newPath = newPath.Substring(0, newPath.IndexOf("."));
                go = Resources.Load<GameObject>(newPath);
            }
            else
            {
                //newPath = newPath.Substring(0, newPath.IndexOf("."));            //其他路径必须加后缀名
                go = AssetDatabase.LoadAssetAtPath<GameObject>(newPath) as GameObject;
            }

            if (go == null)
            {
                Debug.LogError(newPath);
                continue;
            }

            if (go.GetComponent<UIBase>())
            {
                string name = go.name.ToLower();
                string uiName = $"UI{name.Substring(3, 1).ToUpper()}{name.Substring(4, name.Length-4)}";
                pt.AppendLine($"dicPath[\"{name}\"] = \"{newPath}\";");
                tp.AppendLine($"public const string {uiName} = \"{name}\";");
                index++;
            }
        }

        string codeClass = classTemp.Replace("//@Init", pt.ToString());
        codeClass = codeClass.Replace("//@UIType", tp.ToString());

        path = Path.Combine(Application.dataPath, classPath);
        File.WriteAllText(path, codeClass, Encoding.UTF8);
        Debug.Log($"{codeClass}生成完毕");
        AssetDatabase.Refresh();
    }
}

五、使用须知

路径必须设置正常,并且之后所有UI面板都必须放在对应的文件夹下才会自动生成对应的代码;

 


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空