# ET Package规范
1. ET Package是标准的Unity Package
   
2. ET Package包目录的格式是cn.etetet.+包名，例如cn.etetet.core
   
3. ET Package 本质上是npm包，ET使用github package功能来实现托管ET Packages，注意在package.json中添加
   ```
   "publishConfig": 
   { 
      "registry": "https://npm.pkg.github.com/@ET-Packages" 
   }  
   ```
4. 在你们包的根目录加上.github/workflows/release-package.yml 这个文件可以从 https://github.com/ET-Packages/cn.etetet.yiui/tree/master/.github/workflows 复制过去，这是一个github action文件

5. 包的制作者在你们github仓库中，点开Actions，点击ET Package这个Action，然后点击右侧的Run workflow即可制作成package

6. 注意ET包的目录永远在Packages目录下，包安装完成后cn.etetet开头的包会自动移动到Packages目录

7. 包中特殊目录跟文件
   a. Scripts 该目录放置Model Hotfix ModelView HotfixView代码，这些代码unity中可热更，这几个子目录下面的结构跟ET8.1完全一样，包含Server Client Share 分别表示在服务端 客户端 双端生效的代码  
   b. Runtime 该目录放置aot代码，里面都要定义asmdef，作为一个程序集使用，一般以ET.Core这种格式命名  
   c. Excel，该目录用来放置Excel表格，ExcelExporter工具会扫描这个目录，导出代码到cn.etetet.excel中去，导出配置放在ET/Config/Excel中，其中json格式放在ET/Config/Json中  
   d. Proto, 该目录放置消息定义，Proto2CS工具会扫描这个目录，生成代码在cn.etetet.proto包中  
   e. DotNet~ 该目录放置DotNet专用的工程跟代码，因为不能被Unity编辑器识别，所以用了~号  
   f. CodeMode 该目录类似Scripts目录，区别是Model Hotfix ModelView HotfixView目录下面是Server Client ClientServer，分别是不同CodeMode下使用的代码  
      Scripts中的Share代表双端都会使用的代码，而CodeMode目录下的ClientServer表示只有Unity编辑器使用ClientServer模式才会使用  
   g. Editor目录，表示这个包的Editor代码，一般命名是ET.Core.Editor这样命名  
   h. 其它目录例如Plugins Scenes等等并没有严格限制  
   i. 注意，每个Package在顶层放一个Ignore的asmdef，这样的好处是这个包的代码默认是不生效的，只有放了asmdef才生效  
   j. 每个包都放一个packagegit.json文件，里面定义了包的Id跟包名以及git依赖，包的id是统一由熊猫分配  

8. 注意，假如package是一个完整的可运行的demo，需要包含DotNet~目录，里面放好Model跟Hotfix工程，需要将ET.sln工程复制到包中，这样方便使用者可以复制这个sln到根目录，双击使用  
9.  DotNet~目录中的csproj工程可以引用其它包的csproj，也可以引用nuget等，都没有限制  
10. Model ModelView Hotfix HotfixView中的引用怎么配置？因为每个包都可能有这四个目录，每个包的4个目录引用的程序集都可能不一样，ET提供了一种方法，在packagegit.json中写好依赖，具体可以参考cn.etetet.core中的packagegit.json文件
    因为最终这些目录会合并到demo的4个程序集中去，我们可以运行ET->Refresh来将所有的引用最终设置到demo的Model ModelView Hotfix HotfixView四个程序集的引用中去  
11. 如果自己制作的包需要依赖其它git包，例如memorypack，那么可以在自己项目中的packagegit.json文件添加GitDependencies项，具体可以参考cn.etetet.core包  
12. demo包制作需要给Model ModelView Hotfix HotfixView4个asmdef加上INITED宏，防止包一下载下来就生效，导致错误。只有在运行ET->Init后才会加上INITED宏，这样4个程序集才会生效
13. 注意为了让自定义菜单简洁统一，Package自定义的菜单使用"ET->Package名->具体功能" 这种风格，例如ET->Loader->Init