# 运行步骤
1. IDE安装

   **使用[Rider2023.4](https://www.jetbrains.com/zh-cn/rider/)**(更新到最新版)，需要安装以下内容：
   - windows上用visual studio安装最新的.Net8， mac请用homebrew安装.Net8跟powershell  
   - 不支持VS，新人用VS搞出各种问题请不要来问我，我也没用过VS，后期搞熟了可以自己改用VS  

2. 出现如下报错   [Package Manager Window] Error searching for packages.  不用处理！！！！！！ 这是因为github package的注册表跟unity有些不兼容导致的，忽略即可 
   
3. 该分支必须使用Unity**2022.3.15**(初学者请在此版本用熟后再切换其他版本)  
   
4. 整个过程请开启全局翻墙，否则各种unity包 nuget包下载不下来，报memerypack等错误  
   
5. 注意一定要clone一个新的工程！clone一个新的工程！clone一个新的工程！重要的事情说三遍！！！

6. 启动UnityHub，打开(Open) -> 选中'ET'文件夹所在目录后打开工程，特别注意，ET9的目录结构跟ET8.1完全不同，请全新下载整个工程  

7. 打开工程后，点击Unity菜单 -> Edit -> Preferences -> External Tools，点击下拉框'External ScriptEditor'选择Rider，Generate .csproj files for要勾选前两个  
   
8. 在你的github中获取token，获取方法：打开 https://github.com/settings/tokens 选择tokens(classic),点击generate new token，下面全部勾选，点击确定，复制你的token保存
   
9.  打开菜单ET->Init->Manage scope registries, 点击ET-Packages Edit, 把你的github token粘贴到token里面 save，然后再看到User Credentials on this computer点+号，
   Registry URL填入 https://npm.pkg.github.com/@ET-Packages
   token填入你的github token  
   always auth 填 true
   点击add

10. 在https://github.com/orgs/ET-Packages/packages 中选择一个demo包安装，目前有两个demo， cn.etetet.lockstep跟cn.etetet.statesync分别是帧同步跟状态同步（一个工程只能安装一个demo，不能同时装多个）
    新手最好先选择状态同步，因为我都是先修改状态同步，偶尔会漏改了帧同步，等状态同步跑通再尝试帧同步
   
11. 两种安装包的方式，第一种，可以关闭Unity，打开Packages/manifest.json, 在dependencies中加上demo包跟版本号，例如"cn.etetet.lockstep": "0.0.36", 注意后面有个逗号，重启Unity，Unity就会自动下载依赖，并且会显示下载进度，该方案安装速度更快。第二种，打开Unity的菜单Windows->PackageManager，点击左上角加号，选择add package by name，输入包名，点击右边add，会把所有的依赖包下载。这种因为Unity有bug导致安装很慢。推荐使用第一种安装方式。

12. 注意，安装完成后，在PackageManager中观察一下，所有的ET开头的包都会是Custom包，这是因为安装后ET会把包挪到Packages目录，从而变成Custom包，如果有ET开头的包不是Custom，请重新点击ET->Init->RepairDependencies然后刷新Unity

13. 运行Unity菜单 ET->StateSync->Init或者ET->LockStep->Init （这一步会导Excel 导Proto 生成assemlbyreference 添加INITED宏，并且自动链接demo中的ET.sln到根目录，并且把Loader包中的GlobalConfig中的SceneName设置成demo名）
    
14. Unity中将Packages/ET.Loader/Resources/GlobalConfig中的CodeMode改成ClientServer，将SceneName设置成demo名StateSync或者LockStep（这个在上一步会自动设置，你这里检查一下名字是不是demo名）, 这个选项是将服务端运行在Unity中，一体化运行。如果客户端单独打包的话，这里要使用Client
15. Packages/ET.YooAssets/Resources/YooConfig中将EPlayMode修改为EditorSimulateMode（具体请看YooAssets的官方文档）
    
16. 点击Unity菜单 Assets->Open C# Project，这里由于修改了rider插件，会自动打开ET.sln
    
17. 编译整个ET.sln, 注意要翻墙，否则可能nuget包下载不下来，导致编译出错(翻墙后如果还有报错解决不了可以尝试先用VS打开ET.sln编译一次后再回到Rider重新编译一次)

18. Unity中, 然后双击Packages/ET.Loader/Scenes/Init场景，点击Play(▶)即可运行

19. 帧同步默认是一个人匹配，如果需要多人匹配，修改**LSConstValue.cs**中的**MatchCount** 客户端服务端都要重新编译，都要重启即可

20. 注意要独立启动服务器，右键UnityHub，以管理员身份运行UnityHub，然后启动Unity（没有管理员启动是不行的，因为服务端要开启http服务，普通权限开不了），
   停止Unity Play，点开Unity菜单->ET->Server Tools->Start Server(Single Process)，这样就单独启动了服务端。打开Unity菜单 -> ET -> BuildTool中CodeMode改成Client，点击Unity Play，登录。  
   如果还是连接不上报10037错误，注意看ET/Logs目录，看有没有Error日志。 如果要用rider启动服务器，rider也必须用管理员权限启动
   注意一定要用 netsh http delete urlacl 命令删除掉所有自己添加的urlacl，具体使用方法请谷歌
   客户端注意要打开cn.etetet.loader/Resources/GlobalConfig, 把CodeMode换成Client

21. 注意独立运行服务器的目录不再是Bin目录，而是Bin的上一层目录，也就是Unity目录，比如 dotnet.exe Bin/ET.App.dll --Console=1。用rider启动默认是在Bin目录，需要自己修改运行目录，去掉Bin

22. 有问题请论坛提问，贴出服务端error log跟客户端error log，没有日志无法回复

# 打包过程
1. 点击HybridCLR -> Installer，点击安装，等待安装完成

2. 右键编译ET.sln

3. 点击HybridCLR -> Generate -> All

4. 点击ET -> HybridCLR -> CopyAotDlls，这一步会把需要补充元数据的dll复制到'Assets/Bundles/AotDlls'目录

5. 打开YooAsset -> AssetBundle Builder窗口，按照以下步骤操作:

   ①BuildPipeline : '**ScriptableBuildPipeline**'

   ②BuildMode : '**IncrementalBuild**'

   ③CopyBuildinFileOption : '**ClearAndCopyAll**'

   ④点击'**Click Build**'

6. ET.YooAssets/Resources YooConfig中 EPlayMode选择'HostPlayMode', 打开Unity菜单 -> ET -> BuildTool，点击'BuildPackage'，Windows下生成的exe在'ET/Release'里面

另：**请自行研究**YooAsset包管理库的使用方式([YooAsset官网](https://www.yooasset.com/))

# 热重载
1. 若需要体验此功能，需要在Unity菜单 -> Edit -> Preferences -> General窗口的 'ScriptChangesWhilePlaying' 中 选择 '**RecompileAfterFinishedPlaying**'

2. 运行后修改并编译代码，点击Unity菜单 -> ET -> Reload(或按快捷键**F7**)即可

# 注意事项：

一、常见出错原因：
1. 中文目录
2. Rider或VS没有更新到最新版本
3. Rider或VS没有安装相关组件
4. 没安装.Net8
5. 没编译服务端所有工程
6. Unity版本不兼容
7. Win7用户，没有特别设置
8. 如果打包报错缺少"StreamingAsset"，自己在 'ET/Unity/Assets' 下新建一个 StreamingAsset 文件夹即可
