【Unity3D】Unity3D中在创建完项目后自动创建文件夹列表

推荐阅读

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

随着项目开发的体量增大,要导入大量的素材、UI、模型之类的资源。

需要创建不同的文件夹进行整理,便于管理。

就写了一个小工具,在导入资源包的时候自动创建文件夹,这个包后期还可以增加常用的插件、代码的框架、数据类、单例类、工具类、已经实现的比较完善的功能等。

目前,先实现导入资源自动创建文件夹的功能吧。

二、实现自动创建文件夹

2-1、文件夹分类

首先,我们需要了解一下文件夹分类的规范。资源如何分类。

Unity的资源有很多,比如说动画、贴图、UI、音频、材质球、Shader、预制体、脚本等等。

那么,比较常用的分类方式就是:
在这里插入图片描述
还有一些特殊文件夹:

文件夹名 详解
Resources 用于存储需要在运行时动态加载的资源,例如音效、纹理、预制件等。这些资源可以通过Unity的Resources API在运行时加载。(进底包的资源才可以直接使用Resources API)
StreamingAssets 放打完的AB包,发包的时候这里的会进apk包。该文件夹用于存储需要和应用程序一起打包的数据,如视频文件和音乐文件。
Plugins 第三方库,只依赖自己。必须位于 Assets 文件夹的外部。文件夹是另一个特殊文件夹,用于存储第三方插件或库。Plugins 文件夹通常包含原生代码或外部库,例如 C++ 代码、动态链接库或共享对象文件等,这些文件可被 Unity 编辑器或运行时程序调用。

林新发大佬比较推荐的分类方式:

在这里插入图片描述
这篇文章,就根据一般的文件夹分类方式继续进行了。

2-2、新建CreateProjectFloder.cs类

Assets/Scripts/Editor文件夹下,新建脚本命名为CreateProjectFloder,双击打开脚本编辑代码:
在这里插入图片描述

using UnityEditor;
using UnityEngine;
using System.IO;

public class CreateProjectFloder
{
    
    
    /// <summary>
    /// 根目录文件夹名(多人开发时,区分各自的文件夹,为空的时候在根目录创建)
    /// </summary>
    private static string _rootFolderName = "";
    /// <summary>
    /// 公有文件夹
    /// </summary>
    private static string _singleFolderArray = "Resources,StreamingAssets,Plugins";
    /// <summary>
    /// 多人开发各自文件夹
    /// </summary>
    private static string _folderArray = "Animation,Audio,Scenes,Texture,Materials,Shaders,Prefabs,Scripts";
    /// <summary>
    /// Asset目录路径
    /// </summary>
    private static string _assetPath = Application.dataPath;

    /// <summary>
    /// 在Project创建指定文件夹
    /// </summary>
    [MenuItem("Tools/CreateProjectFolder")]
    public static void CreatAllProjectFolder()
    {
    
    
        string[] _strArr = _folderArray.Split(',');
        foreach (string str in _strArr)
        {
    
    
            string _folderPath = _assetPath + "/" + _rootFolderName + "/" + str;
            if (!Directory.Exists(_folderPath))
                Directory.CreateDirectory(_folderPath);
        }
        string[] _singleArr = _singleFolderArray.Split(',');
        foreach (string str in _singleArr)
        {
    
    
            string _folderPath = _assetPath  + "/" + str;
            if (!Directory.Exists(_folderPath))
                Directory.CreateDirectory(_folderPath);
        }
        //刷新目录
        AssetDatabase.Refresh();
    }
}

代码没有什么要说的,就是简单的创建文件夹,刷新目录。

Unity编译后,在窗口菜单上就会出现这个菜单栏:
在这里插入图片描述
但这个不是我们想要的效果,我们需要在导入这个资源包的时候自动创建文件夹。

2-3、自动创建文件阿基

导入资源包,这里选择一般的unitypackage包拖入到Unity中的方式。

后面还可以通过Unity的Package Manager管理器或者配置manifest.json文件来导入资源包,这个以后再说。

接着,就是在Assets/Scripts/Editor文件夹下,新建脚本命名为AutoCreateFloder,双击打开脚本编辑代码:

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

/// <summary>
/// 自动导入资源创建文件夹
/// </summary>
public class AutoCreateFloder : AssetPostprocessor
{
    
    
    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
    {
    
    
        foreach (string s in importedAssets)
        {
    
    
            if (s.Equals("Assets/Scripts/Editor/AutoCreateFloder.cs"))
            {
    
    
                CreateProjectFloder.CreatAllProjectFolder();
                return;
            }
        }
    }
}

选中这个脚本选择Export Paclage导出:
在这里插入图片描述
导出后,新建一个新项目,将这个包导入后,就会自动创建文件夹了:

在这里插入图片描述

三、后记

本篇文章实现了在创建项目后,导入资源包后,自动创建文件夹的功能。

整体来说比较简单(代码),流程的话对于初学者可能不太理解有什么用。

但是对于开发项目比较多的,可以有效的提高效率。

好啦

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。


你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏 方向 简介
Unity3D开发小游戏 小游戏开发教程 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶 入门 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUI UGUI Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据 文件读取 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合 数据集合 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发 虚拟仿真 总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件 插件 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发 日常记录 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG 日常记录 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

猜你喜欢

转载自blog.csdn.net/q764424567/article/details/129662252