UnityGB memungkinkan Anda menjalankan Rom Game Boy di dalam proyek Unity Anda. Telah ditulis dalam C# dan hanya menggunakan mono yang memungkinkan Anda untuk mengekspor proyek ke platform apa pun yang didukung oleh Unity.
UnityGB menjadi subjek utama dari beberapa artikel seperti CNET, Gameboy Emulator di Oculus Rift: Gameception.
UnityGB masih dalam versi alfa, banyak bug dan gangguan dapat terjadi. Juga, kode ini jauh dari sempurna dan membutuhkan banyak optimasi. Setiap dan semua membantu menyambut! Silakan berkontribusi pada proyek ini.
Harap luangkan waktu untuk melihat aplikasi kami yang lain di situs web kami Takohi.com dan aset persatuan kami yang lain. ?
Emulator Gameboy yang lucu dengan lompatan di Unity , oleh Pierce Wolcott
Oculus Rift Gameboy Emulator di Unity , oleh Shane O'Brien
UnityGB4BB10, Emulator Gameboy untuk BlackBerry 10
Demo web resmi , oleh Takohi
UnityGB dapat bekerja dalam beberapa cara. Yang harus Anda lakukan adalah membuat implementasi Anda sendiri tentang cara mengelola input (kontrol) dan output (video dan suara). Dalam paket Unity dan sumber -sumber, Anda sudah akan menemukan satu adegan klasik yang menghasilkan video dalam tekstur klasik, audio melalui metode OnAudiofilterRead, dan input Joypad dari keyboard.
Contoh cara mengimplementasikan kontrol dapat ditemukan di defaultemulatormanager.cs .
Ketika Anda ingin meniru input dari pemain ke dalam game, Anda hanya perlu memanggil metode setInput dari referensi emulator:
void SetInput(Button button, bool pressed);
Tombol adalah enum dengan nilai -nilai ini:
public enum Button {Up, Down, Left, Right, A, B, Start, Select};
Misalnya, jika Anda ingin menekan tombol mulai ketika pemain menekan tombol ruang:
if(Input.GetKeyDown(KeyCode.Space))
Emulator.SetInput(EmulatorBase.Button.Start, true);
else if(Input.GetKeyUp(KeyCode.Space))
Emulator.SetInput(EmulatorBase.Button.Start, false);
Contoh cara mengimplementasikan video dapat ditemukan di defaultVideoUtput.cs .
Untuk mengeluarkan video dari emulator atau dengan kata lain, untuk menampilkan layar Game Boy, Anda harus membuat kelas Anda sendiri mengimplementasikan antarmuka IvideoTput .
Antarmuka ini hanya memiliki dua metode:
void SetSize(int w, int h);
void SetPixels(uint[] colors);
Metode setsize akan dipanggil setelah ROM dimuat. Ini akan memberi tahu Anda berapa ukuran layar dalam piksel (160x144, itu tidak boleh berubah) sehingga Anda dapat menginisialisasi cara Anda untuk ditampilkan.
Metode setpixels akan dipanggil setiap kali bingkai telah diperbarui. Sebagai parameter, serangkaian warna yang sesuai dengan warna setiap piksel. Ukuran array akan menjadi lebar x tinggi .
Berikut adalah metode untuk mengubah warna Uint menjadi warna persatuan:
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);
}
Contoh cara mengimplementasikan audio dapat ditemukan di defaultAudioOutput.cs .
Dengan Unity, satu -satunya cara untuk secara dinamis menghasilkan audio adalah dengan menggunakan metode OnAudiofilterRead (float [], saluran int) dari objek monobehaviour .
Dalam paket, kami sudah menyediakan cara untuk memproduksi kelas audio di kelas DefaultAudioOutput . Jika Anda ingin menggunakannya, cukup lampirkan skrip itu ke objek game dan tambahkan komponen audioSource .
Jika Anda masih ingin membuat implementasi sendiri untuk mengeluarkan audio, Anda harus membuat kelas yang mengimplementasikan antarmuka IAudioOutput .
Antarmuka ini memiliki tiga metode:
int GetOutputSampleRate();
int GetSamplesAvailable();
void Play(byte[] data, int offset, int count);
Sampel disisipkan ( %0 = kiri, %1 = kanan). Ini berarti untuk setiap sampel: data [i] = sampel kiri, data [i + 1] = sampel kanan.
Contoh cara mengelola file simpan dapat ditemukan di defaultSaveMemory.cs .
Untuk mengelola file simpan, Anda harus membuat kelas Anda sendiri mengimplementasikan antarmuka IsaVemeMory .
Antarmuka ini hanya memiliki dua metode:
void Save(string name, byte[] data);
byte[] Load(string name);
Metode Simpan dipanggil ketika pengguna menghentikan permainan, dan metode pemuatan dipanggil saat game dimuat. Parameter nama adalah nama game yang saat ini dimainkan.
Secara global, ketika metode Simpan dipanggil, Anda hanya perlu menyimpan di suatu tempat array byte yang diberikan sebagai parameter, kemudian memuat dan mengembalikan array byte yang sama ketika metode pemuatan dipanggil untuk game yang sama.
Contoh cara menggunakan emulator dapat ditemukan di defaultemulatormanager.cs .
Kode di bawah ini adalah cara sederhana yang menunjukkan cara menginisialisasi dan membuat Run UnityGB dengan skrip monobehaviour .
Pertama, kami membuat instance emulator dan memuat ROM di metode start .
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.
}
Kemudian kami membuat emulator berjalan selama metode pembaruan monobehaviour . Kami juga menggunakan metode ini untuk mengelola input dari pengguna dan mengirimkannya ke 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();
}
Jangan lupa untuk melampirkan monobehaviour sebelumnya ke objek game untuk membuatnya berjalan.