通过输入ab包名和后缀名自动添加或修改ab包名(同一文件夹下的所有文夹都会被修改包括子文件夹)

说明

temp = temp.Substring(temp.IndexOf("Assets"));

这段代码主要是获取的文件路径为完整路径,而AssetImporter.GetAtPath(fl);所需要的路径不需要完整路径,只需要Asset下的路径即可,所以这里需要截取路径

完整代码

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;

public class SetGoAssertBundleName : EditorWindow {
    //文件夹名字
    string DictorName = "";
    //ab包名字
    string abName = "sound";
    //后缀名
    string VariantName = "unity3d";
    List<string> files = new List<string>();
    //打开窗口
    [MenuItem("Tools/SetAssertBundleName")]
    public static void GetWidow()
    {
        EditorWindow.GetWindow<SetGoAssertBundleName>(false, "批量设置AB包名字", true);
    }
    private void OnGUI()
    {
        EditorGUILayout.LabelField("批量修改AB包名");
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("选择文件夹");
        //得到文件夹下的名字
        if(GUILayout.Button("选择文件夹"))
        {
            string temp = EditorUtility.OpenFolderPanel("选择文件夹", Application.dataPath,"");
            if (!string.IsNullOrEmpty(temp))
            {
                temp = temp.Substring(temp.IndexOf("Assets"));
                DictorName = temp;
            } 
        }
        //输入包名
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("输入包名");
        abName = EditorGUILayout.TextField(abName);
        EditorGUILayout.EndHorizontal();

        //输入后缀名
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("输入后缀名");
        VariantName = EditorGUILayout.TextField(VariantName);
        EditorGUILayout.EndHorizontal();
        if (GUILayout.Button("设置ab包名"))
        {
            if (string.IsNullOrEmpty(DictorName)) return; 
            GetAllFiles(files, DictorName);
            foreach (string fl in files)
            {
                Debug.Log(fl);
                var import = AssetImporter.GetAtPath(fl);
                if (import != null)
                {
                    import.assetBundleName = abName;
                    import.assetBundleVariant= VariantName;
                }
                else
                    Debug.Log("import=null");
            } 
        }
    }
    //获取文件夹下所有的文件 .meta文件除外
    static void GetAllFiles(List<string> files, string dir)
    {
        string[] fls = Directory.GetFiles(dir);
        foreach (string fl in fls)
        {
            string extension = Path.GetExtension(fl);
            if (extension != ".meta")
            {
                files.Add(fl);
            }
        }
        string[] subDirs = Directory.GetDirectories(dir);
        foreach (string subDir in subDirs)
        {
            GetAllFiles(files, subDir);
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这个问题涉及到Unity的视频播放、输入检测和AB加载等多个方面。我来分步回答你。 1. 视频播放 Unity中可以使用VideoPlayer组件来播放视频,首先需要将视频文件打成AB,然后可以使用AssetBundle.LoadFromFile或者AssetBundle.LoadFromMemory方法加载AB,然后将加载出来的Asset实例化为GameObject,再添加VideoPlayer组件即可。示例代码如下: ``` AssetBundle ab = AssetBundle.LoadFromFile("path/to/ab"); GameObject videoGO = Instantiate(ab.LoadAsset<GameObject>("video_prefab")); VideoPlayer videoPlayer = videoGO.GetComponent<VideoPlayer>(); videoPlayer.Play(); ``` 2. 输入检测 在Unity中,可以使用Input类来检测玩家的输入。在Update方法中检测玩家是否按下ESC键,如果按下则结束视频播放。示例代码如下: ``` void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { videoPlayer.Stop(); Destroy(videoGO); } } ``` 3. AB加载 AB加载的代码已经在视频播放部分给出了,这里再详细解释一下。首先需要使用AssetBundle.LoadFromFile或者AssetBundle.LoadFromMemory方法加载AB,然后通过LoadAsset方法加载出需要的Asset,最后将Asset实例化为GameObject即可。示例代码如下: ``` AssetBundle ab = AssetBundle.LoadFromFile("path/to/ab"); GameObject videoGO = Instantiate(ab.LoadAsset<GameObject>("video_prefab")); ``` 以上就是Unity播放一个过场动画并按下ESC键结束视频播放的解决方案了,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值