Skip to content

Latest commit

 

History

History
136 lines (116 loc) · 5.36 KB

README_CN.md

File metadata and controls

136 lines (116 loc) · 5.36 KB

UNES

UNES 是一个在 Unity 环境中运行 Nintendo Entertainment System 任天堂红白机游戏 *.nes 文件的模拟器插件,该项目基于 Emulator.NES 实现,通过 Unity 实现跨平台。

license Release Version topLanguage size last 996.icu

[English Documents Available]

1. 开始

  • 1.在场景中新建或选择一个 GameObject 并添加 UNESBehaviour 组件。
  • 2.新建一个 RenderTexture 用于渲染游戏画面。
  • 3.使用任何你想要的方式在游戏中显示 RenderTexture 文件。
  • 4.使用默认的输入方式或者按需实现自定义输入。
  • 5.按需实现 *.nes 文件的加载获取 byte[] 格式数据。
  • 6.调用 UNESBehaviour.Boot(byte[] romData) 接口启动游戏。

2. 加载

2.1. Resources 加载

如果需要使用 Resources.Load() 接口来加载ROM文件,则需要注意将 .nes 扩展名更改为 .bytes,然后使用如下方式加载:

var bytes = Resources.Load<TextAsset>(romPath).bytes;
UNES.BootRom(bytes);

2.2. FileStream 加载

如果使用加载原始文件字节流的方式,直接调用 UNESBehaviour.Boot(byte[] romData) 接口即可。

3. 配置

3.1. Filter Mode

游戏画面渲染的过滤模式:

模式 描述
Point 纹理像素近距离变得块状。
Bilinear 双线性双线性滤波-将纹理样本平均。
Trilinear 三线性三线性过滤-对纹理样本进行平均,并在mipmap级别之间进行混合。

详细解释可参考 FilterMode

3.2. Logic Thread

如果打开 Logic Thread 选项,则 CPUPPU 部分的模拟计算会由子线程执行,Unity 主线程只负责读取状态数据刷新游戏画面,可显著提高帧数。

3.3. Input Config

自定义原生按键所对应的键盘物理按键。

4. 输入

默认配置操控方式:

原生按键 操作按键
Start Num1
Select Num2
Up Up Arrow
Down Down Arrow
Left Left Arrow
Right Right Arrow
A A
B S

5. API

5.1. Boot

以任何方式获取原始ROM文件的字节数组格式以供模拟器启动:

public void Boot(byte[] romData);

5.2. Save

模拟器本身只提供当前运行状态的数据,而不提供数据文件的持久化实现。需要自行实现存档数据的保存。

public byte[] GetSaveData();

5.3. Load

以任何方式获取存档文件数据以供模拟器恢复游戏进度:

public void LoadSaveData(byte[] saveData);

6. Mapper

NES 存在众多 Mapper 扩展格式,本项目实现的中已经实现部分,理论上可以支持大部分常见游戏。

0 NROM
1 MMC1
2 UxROM
3 CNROM
4 MMC3
7 AxROM
9 MMC2 (Mike Tyson's Punch-Out!!)
10 MMC4
11 Color Dreams
66 GxROM
71 Camerica
79 NINA-003-006
94 Senjou no Ookami
140 Jaleco
155 MMC1A
180 Crazy Climber
206 DxROM

7. 问题

  • 未实现音频 APU 模拟。
  • 仅实现 Unity 基础输入系统和纯键盘操作方式。
  • 未实现全部 Mapper。
  • PPU 模拟部分性能较低,在中低端移动设备上帧数不稳定。