UnityGB允許您在Unity項目中運行遊戲男孩ROM。它是用C#編寫的,僅使用單聲道允許您將項目導出到由Unity支持的任何平台中。
Unitygb成為了幾篇文章的主要主題,例如CNET,Oculus Rift:Gamection上的GameBoy Myulator。
UnityGB仍在Alpha版本中,許多錯誤和故障可能會發生。同樣,該代碼遠非完美,需要大量優化。所有人都歡迎!請隨時為這個項目做出貢獻。
請花一些時間在我們的網站takohi.com和其他Unity資產上查看我們的其他應用程序。 ?
Pierce Wolcott的搞笑Gameboy模擬器與Leap Motion in Unity進行
Shane O'Brien的Oculus Rift Gameboy模擬器
Unitygb4bb10,黑莓的Gameboy仿真器10
官方網絡演示,高霍人
UnityGB可以通過多種方式工作。您要做的是對如何管理輸入(控件)和輸出(視頻和聲音)進行自己的實現。在Unity軟件包和來源中,您已經找到了一個經典的場景,以經典的質感,音頻槽OnaudiofilterRead方法和鍵盤的JoyPad輸入來輸出視頻。
可以在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接口。
該界面只有兩種方法:
void SetSize(int w, int h);
void SetPixels(uint[] colors);
加載ROM後,將調用設置方法。它會告訴您像素中屏幕的大小是什麼(160x144,它永遠不會更改),以便您可以初始化顯示方式。
每次更新幀時,方法setPixels都會被調用。作為參數,與每個像素的顏色相對應的顏色數組。陣列的大小將是寬度x高度。
這是一種將UINT顏色轉換為統一顏色的方法:
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對象的方法使用方法OnaudiofilterRead(float []數據,int通道)。
在軟件包中,我們已經提供了一種產生音頻槽的方法。如果要使用它,只需將該腳本連接到遊戲對象並將其添加到AudioSource組件中即可。
如果您仍然想進行自己的實現來輸出音頻,則必須製作一個實現接口IaudioOutput的類。
該接口具有三種方法:
int GetOutputSampleRate();
int GetSamplesAvailable();
void Play(byte[] data, int offset, int count);
樣品交錯(%0 =左,%1 =右)。這意味著每個樣本:數據[i] =左樣品,數據[i + 1] =右樣本。
可以在defaultsavememory.cs中找到如何管理保存文件的示例。
為了管理保存文件,您將必須將自己的類實現ISAVEMEMORY接口。
該界面只有兩種方法:
void Save(string name, byte[] data);
byte[] Load(string name);
當用戶停止遊戲時,將調用保存方法,並且加載遊戲時調用負載方法。名稱參數是當前玩遊戲的名稱。
在全球範圍內,當調用保存方法時,您只需要存儲以參數為參數的字節數組的某個位置,然後在調用同一遊戲的加載方法時加載並返回相同的字節數組。
可以在defaultemulatormanager.cs中找到如何使用模擬器的示例。
下面的代碼是一種簡單的方法,顯示如何使用Monobehaviour腳本初始化和製作運行UnityGB。
首先,我們創建一個模擬器實例,然後將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.
}
然後,我們使模擬器在Monobehaviour的更新方法中運行。我們還使用此方法來管理用戶的輸入並將其發送到模擬器。
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();
}
不要忘記將以前的Monobehaviour附加到遊戲對像上以使其運行。