UnityGBを使用すると、Unityプロジェクト内でゲームボーイROMを実行できます。 C#で作成されており、Monoのみを使用して、Unityがサポートする任意のプラットフォームにプロジェクトをエクスポートできます。
UnityGBは、CNET、Oculus Rift:GameceptionのGameboy Emulatorなどのいくつかの記事の主な主題になりました。
UnityGBはまだアルファバージョンで、多くのバグやグリッチが発生する可能性があります。また、コードは完璧ではなく、多くの最適化が必要です。すべてが歓迎されます!このプロジェクトにお気軽に貢献してください。
また、当社のウェブサイトTakohi.comと他のUnityアセットの他のアプリケーションをご覧ください。 ?
ピアスウォルコットによる、統一された跳躍の動きを伴う陽気なゲームボーイエミュレーター
Oculus Rift GameBoy Emulator in Unity 、Shane O'Brien
UnityGB4BB10、BlackBerryのGameBoyエミュレーター10
タコヒによる公式ウェブデモ
UnityGBはいくつかの方法で動作できます。あなたがしなければならないことは、入力(コントロール)と出力(ビデオとサウンド)の管理方法について独自の実装を作成することです。 Unityパッケージとソースでは、ビデオをクラシックテクスチャ、オーディオトラフonAudioFilterReadメソッド、およびキーボードからのJoypad入力で1つのクラシックシーンを既に見つけることができます。
コントロールの実装方法の例は、 defaultemulatormanager.csにあります。
プレイヤーからの入力をゲームにエミュレートする場合は、エミュレータリファレンスからSetInputメソッドを呼び出すだけです。
void SetInput(Button button, bool pressed);
ボタンは、これらの値を備えた列挙です。
public enum Button {Up, Down, Left, Right, A, B, Start, Select};
たとえば、プレーヤーがスペースボタンを押しているときにボタンを押したい場合は:
if(Input.GetKeyDown(KeyCode.Space))
Emulator.SetInput(EmulatorBase.Button.Start, true);
else if(Input.GetKeyUp(KeyCode.Space))
Emulator.SetInput(EmulatorBase.Button.Start, false);
ビデオを実装する方法の例は、 defaultVideooutput.csにあります。
エミュレータまたは言い換えれば、ゲームボーイの画面を表示するには、ビデオを表示するには、 IvideoOutputインターフェイスを実装する独自のクラスを作成する必要があります。
このインターフェイスには2つの方法しかありません。
void SetSize(int w, int h);
void SetPixels(uint[] colors);
ROMがロードされた後、 SetSizeメソッドが呼び出されます。画面のサイズがピクセル(160x144、変更されないでください)のサイズがわかります。これにより、表示する方法を初期化できます。
メソッドセットピクセルは、フレームが更新されるたびに呼び出されます。パラメーターとして、各ピクセルの色に対応する色の配列。アレイのサイズは幅x高さになります。
UINTの色をUnity色に変換する方法は次のとおりです。
private Color UIntToColor(uint color)
{
byte a = (byte)(color >> 24);
byte r = (byte)(color >> 16);
byte g = (byte)(color >> 8);
byte b = (byte)(color >> 0);
return new Color(r / 255f, g / 255f, b / 255f, a / 255f);
}
オーディオの実装方法の例は、 defaultAudiooutput.csにあります。
Unityを使用すると、オーディオを動的に生成する唯一の方法は、 MonobehaviourオブジェクトからAudioFilterRead(float [] data、intチャンネル)を使用することです。
パッケージでは、既定のAudioOutputクラスをオーディオトラフを作成する方法を既に提供しています。使用したい場合は、そのスクリプトをゲームオブジェクトに添付し、 AudioSourceコンポーネントを追加してください。
それでも、オーディオを出力するための独自の実装を作成したい場合は、インターフェイスIAUDIOOUTPUTを実装するクラスを作成する必要があります。
このインターフェイスには3つの方法があります。
int GetOutputSampleRate();
int GetSamplesAvailable();
void Play(byte[] data, int offset, int count);
サンプルはインターリーブされます(%0 =左、%1 =右)。これは、各サンプルの意味:データ[i] =左サンプル、データ[i + 1] =右サンプル。
保存ファイルを管理する方法の例は、 defaultsavememory.csにあります。
ファイルの保存を管理するには、 ISAVEMEMORYインターフェイスを実装して独自のクラスを作成する必要があります。
このインターフェイスには2つの方法しかありません。
void Save(string name, byte[] data);
byte[] Load(string name);
保存方法は、ユーザーがゲームを停止したときに呼び出され、ゲームがロードされたときにロードメソッドが呼び出されます。名前パラメーターは、現在再生されているゲームの名前です。
グローバルに、保存メソッドが呼び出された場合、パラメーターとして与えられたバイト配列をどこかに保存する必要があります。次に、同じゲームのロードメソッドが呼び出されたときにこの同じバイト配列をロードして返します。
エミュレータの使用方法の例は、 defaultemulatormanager.csにあります。
以下のコードは、 Monobehaviourスクリプトを使用してUnityGBを初期化して実行する方法を示す簡単な方法です。
最初に、エミュレータのインスタンスを作成し、 STARTメソッドにROMをロードします。
void Start()
{
// Load emulator
IVideoOutput drawable = ...; // Reference to your IVideoOutput implementation.
IAudioOutput audio = ...; // Reference to your IAudioOutput implementation.
ISaveMemory saveMemory = ...; // Reference to your ISaveMemory implementation.
Emulator = new Emulator(drawable, audio, saveMemory); // Instantiate emulator.
byte[] rom = ...; // Load ROM binary.
Emulator.LoadRom(www.bytes); // Load ROM into emulator.
}
次に、モノベハビアの更新方法中にエミュレーターを実行します。また、この方法を使用して、ユーザーからの入力を管理し、エミュレータに送信します。
void Update()
{
// Input
if(Input.GetKeyDown(KeyCode.Space))
Emulator.SetInput(EmulatorBase.Button.Start, true);
else if(Input.GetKeyUp(KeyCode.Space))
Emulator.SetInput(EmulatorBase.Button.Start, false);
...
// Run
Emulator.RunNextStep();
}
以前のモノベハビアをゲームオブジェクトに添付することを忘れないでください。