Files
shooter-demo/CLIENT_RUNNER_GUIDE.md
2025-11-28 18:11:30 +08:00

162 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ClientRunner 集成说明
## 概览
`ClientRunner` 已更新为支持自动启动 Pinball Standalone 模式。它现在作为游戏的主入口点,自动管理 `PinballManager` 的创建和配置。
## 新增功能
### 1. 自动模式启动
- 根据 `mode` 属性自动启动相应的游戏模式
- 当前完全支持 `RunMode.STANDALONE`
- 为多人模式预留了扩展接口
### 2. 节点引用管理
- **主相机节点**: 自动配置给 PinballManager
- **渲染容器**: 游戏对象渲染的父节点
- **UI容器**: UI界面的容器节点
### 3. 智能回退
- 如果未设置渲染容器,自动使用当前节点
- 如果未设置相机节点PinballManager 会尝试自动查找
## 使用方法
### 在场景中设置 ClientRunner
1. **添加 ClientRunner 组件**
```
在场景中创建一个节点(建议命名为 "GameManager"
添加 ClientRunner 组件
```
2. **配置属性**
```typescript
运行模式: Standalone (选择下拉菜单中的值)
主相机节点: 拖拽场景中的 Main Camera 节点
渲染容器: 拖拽或创建一个渲染容器节点
UI容器: 拖拽或创建一个UI容器节点可选
```
3. **运行游戏**
- 启动场景ClientRunner 会自动:
- 创建 PinballManager
- 配置所有必需的引用
- 启动 Standalone 模式
- 开始弹珠物理模拟
## 代码示例
### 基本用法
```typescript
// ClientRunner 会在 start() 方法中自动运行
// 无需手动调用
// 获取 PinballManager 实例(如果需要)
const pinballManager = clientRunner.getPinballManager();
// 重启游戏
await clientRunner.restart();
```
### 高级配置
```typescript
// 在运行时切换模式(如果添加了对应实现)
clientRunner.mode = RunMode.CLIENT_MULTIPLAYER;
await clientRunner.restart();
// 检查当前模式
if (clientRunner.isMode('standalone')) {
console.log('当前正在运行单机模式');
}
```
## 场景设置建议
### 推荐的节点层级结构
```
Scene
├── Main Camera (Camera 组件)
├── GameManager (ClientRunner 组件)
├── RenderContainer (空节点,用作渲染容器)
│ └── [游戏对象将在此创建]
└── UIContainer (空节点UI元素容器)
└── [UI元素]
```
### 最小设置
如果只想快速测试,最少只需要:
```
Scene
├── Main Camera
└── GameManager (ClientRunner 组件)
├── mode: Standalone
└── cameraNode: Main Camera
```
## 控制台输出
成功启动时会看到以下日志:
```
[ClientRunner] 开始启动,运行模式: standalone
[ClientRunner] 启动 Standalone 模式...
[ClientRunner] Standalone 模式启动成功
[PinballManager] 初始化完成
[StandaloneMode] 初始化完成
```
## 游戏交互
启动成功后:
- **点击/触摸屏幕**: 在点击位置创建弹珠
- **弹珠物理**: 弹珠受重力影响下落并与边界碰撞
- **实时渲染**: 弹珠位置实时更新显示
## 故障排除
### 常见问题
1. **WASM 加载失败**
```
确保 assets/wasm/pinball_physics.wasm 文件存在
文件大小应该是 666KB
```
2. **相机未找到**
```
检查 cameraNode 是否正确设置
确保相机节点有 Camera 组件
```
3. **渲染不显示**
```
检查 renderContainer 设置
确保渲染容器在相机视野内
```
4. **控制台错误**
```
查看具体错误信息
检查所有必需的文件是否存在
确认节点引用是否正确设置
```
## 扩展功能
### 为多人模式做准备
`ClientRunner` 已经为多人模式预留了接口:
- `startClientMultiplayerMode()`
- `startServerMultiplayerMode()`
当实现这些模式时,只需要在对应方法中添加逻辑即可。
### 自定义配置
可以通过修改 `startStandaloneMode()` 方法来自定义 PinballManager 的配置:
```typescript
// 自定义物理参数
this.pinballManager.defaultMode = PinballMode.STANDALONE;
this.pinballManager.autoStart = true;
this.pinballManager.debugMode = false; // 关闭调试信息
```
这个更新让游戏启动变得更加简单和自动化,同时保持了扩展性和配置灵活性。