前言

组织好项目的目录结构,是维护项目的很重要的一个点,我们学习别人源码,了解别人的设计思路都是从目录结构开始,一个清晰的目录结构,对项目开发维护,项目管理来说非常的重要,目录维护的好,大家在一起工作很愉快,目录维护的不好,有可能会把项目搞的乱七八糟。

今天我们一起来看看Unity架构师是如何维护自己的目录结构的,再看看有几个是和你相同的。

1: Unity项目的几个基本原则

原则(1):

不在场景里面除启动节点意外的任何节点。Unity 提供方便的场景编辑器,好像我们拖拉带拽,直接往场景里面搭建游戏场景,然后来做场景切换,这个我们在开放项目的时候是不提倡的。这样做有两个缺点:A:不方便多人同时编辑场景后的代码提交与合并, 如果有冲突更麻烦。B: 不方便打空包,节点都在场景,打包时,节点依赖的资源都会被打包进去。C: 方便维护,维护复杂的场景,谁维护过谁知道。

原则(2):

不要在节点或预制体上直接挂与逻辑相关的代码组件。这个很好理解,如果我们直接在节点or预制体上挂代码组件,代码极难维护,如果我们要搜索哪些代码在哪些地方调用,根本就无法通过搜索查到,如果一个一个节点,一个一个预制体的点开找,这样维护起来非常麻烦, 也不方便资源更新与代码热更。

原则(3)

不要直接拖动节点,组件, 资源到代码逻辑组件的属性编辑器上。比如直接给Button组件挂响应函数等,原则2可以保证原则(3)不会出现,但是我还是要强调一下。

理由是不方便维护代码,和多人协作开发与提交。

原则(4)

运行的时候只有一个场景,所有的内容代码控制。

场景里面不允许放内容,那么做场景切换也就没有意义了,所以我们只有一个运行时的场景。所有的内容,我们都要通过代码来生成出来,这样,搜索代码,维护代码就能看到整个完整的游戏逻辑。其他的场景可以用来编辑地图,编辑角色等。编辑好后生成一个一个的资源预制体。所以我们项目里面一个运行时的空场景,以及其他资源编辑器关卡编辑的场景,而这些是编辑资源地图而用,不会被打包进去。

原则(5)

使用纯AssetsBundle来管理整个资源的加载与卸载, 不使用Resouces机制。

为什么不使用Resources, 机制来加载与卸载资源呢?Resources机制不方便资源更新,不方便打空包, Resources下的所有资源以及相关依赖都会被打包进去。Resources也不方便资源更新, 所以干脆使用纯AssetsBundle来做资源的加载与卸载,方便打空包,同时也方便资源更新。如果不打空包,只要把打包出来的ab包放到StreammingAssets目录下,这个目录下的所有的资源都会打包进去,到时候到这里来读取ab包就可以了。

原则(6)

第三方的资源与插件的目录结构要统一放到一个文件夹下。

我们完成一个Unity项目会经常需要用到Unity插件,而Unity插件在开发的时候,从自己的角度出发,所以目录结构可能和我们的项目目录结构理念维护不一致,所以我们要整理第三方插件, 还有可能包含代码。

2: Unity项目的一级目录结构

1级目录结构如下:

AssetsPackages:所有的游戏资源,都存放到这个目录下。Editor: 框架与项目编辑器扩展代码。Scenes: 所有的游戏场景,包括运行场景,地图编辑场景,角色编辑场景,特效编辑场景。Scripts: 所有游戏的代码,含框架与游戏逻辑代码。3rd: 第三方插件存放的位置。SteammingAssets: 用来存放打包以后的ab资源包,这样ab包能打入安装包。

1-1

3: 重要一级目录结构子目录结构

1: AssetsPackage目录如何分类?

AssetsPackage里面存放所有的资源,资源如何分类有决定了打ab包的时候的资源管理等,所以我们尽可能的要把资源按照功能来分类放好,那么我这边会把AssetsPackage分成一下主要的子目录。

AssetsPackage/GUI: 存放每个UI界面的GUI的图片等相关。AssetsPackage/Sounds: 存放游戏的音乐与音效 AssetsPackage/Maps: 存放游戏的地图场景,可以在里面再继续分关卡。AssetsPackage/Charactors: 存放角色动画等相关资源。AssetsPackage/Effects: 存放粒子特效等相关资源 AssetsPackage/Excels: 存放游戏中配置文件的表格数据。

2-1

2: Scripts 目录如何分类?

Scripts是代码的主体维护的文件夹,这个文件夹的分类其实非常的重要,我这边是这样分类的。Scripts/3rd : 用来存放纯粹的第三方的C#代码,不是插件,比如protobuf for C#等 Scripts/Game: 用来存放游戏逻辑代码 Scripts/Utils: 用来存放游戏工具类的代码, 比如单例,MD5, SHA1 Scripts/Managers: 用来存放主要的管理模块代码(资源管理,网络模块,声音模块等) Scripts/AssetsBundle: 与Ab资源包管理更新相关的代码。……

3-1

3: Editor 目录如何分类?

Editor是编辑器扩展代码所放的目录,我这边是按照功能和扩展的模块来分类放好对应的编辑器扩展代码,如下:

Editor/AssetBundle: 编辑器扩展ab包自动化打包管理,版本管理,等编辑器相关代码; Editor/Common: 一些编辑器扩展的公用代码。Editor/ExcelBuild: 表格处理工具代码; Editor/PackageBuild: 打包时候的工具代码 …

你有哪些编辑器扩展的工具和功能分类放到Editor目录下。

4-1

4: AssetBundles输出目录结构

整个项目,都采用AssetsBundle资源管理模式,所以打出的AssetsBundle包也会有一个对应的目录结构,这个目录结构,不放在Unity项目的Assets文件夹中,而是放到和Assets文件夹同级的位置,如图:

5-1

每个平台,每个渠道的ab包是不一样的,所以,在AssetsBundle里面我们要分渠道分平台来打包。所以在AssetBundles路径下,先分了平台,再分渠道。AssetBundles/Android/xxxx平台 AssetBundles/iOS/xxxx平台

当然这些最好制作AssetBundles打包工具的时候都能自动完成。

最后

今天的Unity框架目录结构分类与管理,就给大家介绍到这里,主要是介绍管理项目目录结构的一些理念,与你的项目有多少是吻合的呢?

Unity项目如何组织目录结构相关推荐

  1. Unity项目如何组织目录结构,有几个习惯与你相同

    前言 组织好项目的目录结构,是维护项目的很重要的一个点,我们学习别人源码,了解别人的设计思路都是从目录结构开始,一个清晰的目录结构,对项目开发维护,项目管理来说非常的重要,目录维护的好,大家在一起工作 ...

  2. vue项目开发的目录结构

    vue项目开发的目录结构 一.通过命令行工具安装vue(npm install webpack vue-project) build -- 项目构建的相关代码 config -- 配置目录,包括端口. ...

  3. 【 Vue全家桶 · Vue CLI(四)】Vue项目的详细目录结构解析

    文章目录 前言 -- 一级目录解析 一. dist 二. node_modules 三. public 四. src(基础版) 4.1 main.js 4.2 App.vue 4.3 src / as ...

  4. Python项目通用的目录结构总结

    一个好的项目结构会让我们在开发中更加得心应手. 对于Web项目,我们通常采用Flask或Django等框架,会有一套适合这种项目的工程目录. 对于爬虫项目,通常有Scrapy等开源框架,也会提供一套适 ...

  5. iOS项目工程及目录结构

    做过一些iOS的项目,不同项目的沉淀没有积累到一起,目录的管理都在后期随着人员的增加越来越混乱,因此在这里做一些梳理,希望达到两个目的. 一套相对通用的目录结构,作为后续项目的模版. 积累相应的基础库 ...

  6. Django(part2)--创建项目与Django目录结构

    学习笔记,仅供参考 文章目录 Django框架开发 创建项目的指令 Django目录结构 Django框架开发 创建项目的指令 创建项目的指令: django-admin startproject 项 ...

  7. java获取项目的部署目录结构_JAVA WEB项目目录结构以及web应用部署的根目录,编译路径和项目根目录的区别...

    本文链接:https://blog.csdn.net/l00149133/article/details/78984083 web应用部署的根目录,编译路径和项目的根目录有什么区别? 直接上例子: 你 ...

  8. README文档模板 含下载地址0积分 项目文档模板 springboot文档示例 readme参考文档 目录跳转 项目架构 使用说明 目录结构 等等 (含附件下载)

    下载地址0积分 项目名称 在线签约(signup) (v1.1.0) 目录 项目简介 功能简述 项目架构 目录结构 使用效果 安装说明 使用说明 开发人员 版权信息 更新日志 项目简介 *-signu ...

  9. ① uni-app 介绍、项目搭建、目录结构

    uni-app uni-app介绍 项目搭建 目录结构 App.vue 和 main.js manifest.json uni.scss pages.json 页面配置 tabbar的配置 condi ...

最新文章

  1. vb 6.0服务器组件选哪个,VB 6.0包括几种版本?分别是什么?
  2. Please use HDF reader for matlab v7.3 files
  3. python怎么安装matplotlib-python 安装matplotlib
  4. 无向图的邻接矩阵存储,4个顶点、4条边
  5. JS中document和window的区别
  6. tensorflow一维卷积输入_tensorflow中一维卷积conv1d处理语言序列的一点记录
  7. UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)
  8. 华为做raid5步骤_华为验厂验厂流程如何?主要内容是什么呢?
  9. Apache Kylin原理学习之Cube的创建与Build
  10. 【C语言】创建一个函数,判断某一正整数是否为素数,并调用这个函数找出1000以内所有素数...
  11. python写二进制大文件,如何将文件写入二进制文件,或在大文件中编辑单行– Python...
  12. python 模拟键盘_Python模拟键盘输入和鼠标操作
  13. linux系统超好用的QQ
  14. Linux 计划任务crontab详解,含笔试题讲解
  15. LED背光源的技术术语
  16. 白苹果修复_苹果手机突然屏幕变白怎么办
  17. 写给产品经理的第5封信:项目管理二三事
  18. 机器学习中SVM的损失函数,向量积
  19. wot服务器例行维护,wot
  20. CC2530编程基础

热门文章

  1. Java绘制海螺_FreeHand怎样绘制海螺?FreeHand绘制海螺教程
  2. 云原生热门话题|什么是可观测性-Observability
  3. springboot多环境配置学习笔记
  4. iOS14.5 续航测试,7款iPhone实测对比,结果让人惊喜!
  5. Python:记录一次pycharm启动python程序报验证警告问题及解决方案
  6. ELK性能优化实战分析:如何化身BAT面试收割机
  7. 迅雷云加速开放平台学习笔记——实现
  8. 提升刷屏速度,降低显示水纹效果的一点想法
  9. 从零开始,详解亚马逊店铺注册流程及技巧指南
  10. 基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Medi