103 lines
3.0 KiB
Plaintext
103 lines
3.0 KiB
Plaintext
# __PROJECT_NAME__
|
||
|
||
这是由 `ShrinkModFramework` 生成器创建的外部 DLL 模组模板。
|
||
|
||
## 模板内容
|
||
|
||
- `src/__PROJECT_NAME__Mod.cs`
|
||
- 模组主入口,演示 `ShrinkModFramework + ShrinkEventBus + ShrinkCommand + ShrinkNetwork`
|
||
- `src/__PROJECT_NAME__Contracts.cs`
|
||
- 示例事件、RPC 请求与响应
|
||
- `__PROJECT_NAME__.csproj`
|
||
- 独立类库工程,默认引用当前 SDK 仓库里的运行时工程
|
||
- `build.ps1`
|
||
- 一键构建,可选复制 DLL 到你的模组目录
|
||
- `dev-env.ps1`
|
||
- 先设置 `MSBuildEnableWorkloadResolver=false`,适合有些 IDE 打开项目前先跑一遍
|
||
- `global.json`
|
||
- 锁定到生成模板时检测到的 `dotnet SDK` 版本
|
||
|
||
## 默认标识
|
||
|
||
- `ProjectName`: `__PROJECT_NAME__`
|
||
- `Namespace`: `__ROOT_NAMESPACE__`
|
||
- `ModId`: `__MOD_ID__`
|
||
- `DisplayName`: `__DISPLAY_NAME__`
|
||
|
||
生成后建议你先改这几处,再开始写正式业务。
|
||
|
||
## 构建
|
||
|
||
```powershell
|
||
dotnet build .\__PROJECT_NAME__.csproj -c Release /nr:false
|
||
```
|
||
|
||
或者直接运行:
|
||
|
||
```powershell
|
||
.\build.ps1
|
||
```
|
||
|
||
如果你的 IDE 打开项目时报类似:
|
||
|
||
```text
|
||
Microsoft.NET.SDK.WorkloadAutoImportPropsLocator
|
||
```
|
||
|
||
先在 PowerShell 里执行:
|
||
|
||
```powershell
|
||
.\dev-env.ps1
|
||
```
|
||
|
||
然后在**同一个 shell** 里启动 IDE,或者直接继续 `dotnet build`。
|
||
|
||
默认产物输出到:
|
||
|
||
```text
|
||
artifacts\Release\
|
||
```
|
||
|
||
## 投放到游戏
|
||
|
||
`ShrinkModFramework` 当前会扫描:
|
||
|
||
```text
|
||
Application.persistentDataPath/Mods
|
||
```
|
||
|
||
所以常见流程是:
|
||
|
||
1. 先构建出 `__PROJECT_NAME__.dll`
|
||
2. 把 DLL 复制到游戏实际使用的 `Mods` 目录
|
||
3. 启动游戏,让 `ShrinkModLoader` 自动发现
|
||
|
||
如果你已经知道目标 `Mods` 目录,也可以直接用:
|
||
|
||
```powershell
|
||
.\build.ps1 -ModsDir "D:\YourGameMods\Mods"
|
||
```
|
||
|
||
## 这个模板示范了什么
|
||
|
||
- `[ShrinkMod]` 模组声明
|
||
- `ShrinkModBase` 生命周期
|
||
- `[ShrinkEventSubscriber]` / `[ShrinkSubscribe]` 生成式实例接入 Mod Bus
|
||
- `ShrinkCommandSubscriber` 实例命令自动接入
|
||
- `ShrinkNetworkSubscriber` 实例网络处理自动接入
|
||
- `context.RegisterContent(...)` 使用 ModId namespace 注册内容
|
||
- `context.OverrideContent(...)` 以显式优先级覆盖已有内容
|
||
- `context.RegisterNetworkHandler(...)` 走模组网络抽象层
|
||
|
||
## 注意
|
||
|
||
- 示例里用到的 `opcode`、命令路径、`modId` 都只是模板默认值,正式模组请自己调整,避免冲突
|
||
- 当前模板默认依赖当前仓库根目录下的:
|
||
- `ShrinkModFramework.Runtime.csproj`
|
||
- `ShrinkEventBus.Runtime.csproj`
|
||
- `Assets/Modules/ShrinkEventBus/Tools~/DotNet/ShrinkEventBus.Generator/ShrinkEventBus.Generator.csproj`(作为 Roslyn analyzer)
|
||
- `ShrinkCommand.Runtime.csproj`
|
||
- `ShrinkNetwork.Runtime.csproj`
|
||
- 如果你把模板工程移到别处,需要同步修正 `__PROJECT_NAME__.csproj` 里的 `ProjectReference`
|
||
- 某些 IDE / MSBuild 环境里,`MSBuildEnableWorkloadResolver=false` 写在项目文件内仍然太晚;这种情况要靠 `dev-env.ps1` 或系统环境变量在**打开项目之前**先设置
|