UnityGB ช่วยให้คุณสามารถเรียกใช้ Game Boy ROM ในโครงการ Unity ของคุณ มันถูกเขียนใน C# และใช้เฉพาะโมโนช่วยให้คุณส่งออกโครงการไปยังแพลตฟอร์มใด ๆ ที่สนับสนุนโดย Unity
UnityGB กลายเป็นหัวข้อหลักของบทความหลายอย่างเช่น CNET, Gameboy Emulator บน Oculus Rift: Gamecetion
UnityGB ยังคงอยู่ในรุ่นอัลฟ่าข้อบกพร่องและข้อบกพร่องมากมายสามารถเกิดขึ้นได้ นอกจากนี้รหัสยังห่างไกลจากความสมบูรณ์แบบและต้องการการเพิ่มประสิทธิภาพมากมาย ยินดีต้อนรับทุกคนและยินดีต้อนรับ! โปรดอย่าลังเลที่จะมีส่วนร่วมในโครงการนี้
โปรดใช้เวลาสักครู่เพื่อดูแอปพลิเคชันอื่น ๆ ของเราในเว็บไซต์ของเรา takohi.com และสินทรัพย์เอกภาพอื่น ๆ ของเรา -
Emulator GameBoy GameBoy Hide
Oculus Rift Gameboy Emulator ใน Unity โดย Shane O'Brien
UnityGB4BB10, Gameboy Emulator สำหรับ BlackBerry 10
การสาธิตเว็บอย่างเป็นทางการ โดย Takohi
UnityGB สามารถทำงานได้หลายวิธี สิ่งที่คุณต้องทำคือการใช้งานของคุณเองเกี่ยวกับวิธีการจัดการอินพุต (ควบคุม) และเอาต์พุต (วิดีโอและเสียง) ในแพ็คเกจ Unity และแหล่งที่มาคุณจะได้พบกับฉากคลาสสิกหนึ่งรายการที่แสดงวิดีโอในพื้นผิวคลาสสิกวิธีการตรวจสอบเสียงด้วยวิธี onaudiofilterread และอินพุต Joypad จากแป้นพิมพ์
ตัวอย่างของวิธีการใช้งานการควบคุมสามารถพบได้ใน DefaultemulatorManager.cs
เมื่อคุณต้องการเลียนแบบอินพุตจากผู้เล่นเข้าสู่เกมคุณเพียงแค่ต้องเรียกวิธี การ setInput จากการอ้างอิง Emulator:
void SetInput(Button button, bool pressed);
ปุ่มเป็น enum ที่มีค่าเหล่านี้:
public enum Button {Up, Down, Left, Right, A, B, Start, Select};
ตัวอย่างเช่นหากคุณต้องการกดปุ่มเริ่มต้นเมื่อผู้เล่นกดปุ่ม Space:
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
ในการส่งออกวิดีโอจาก Emulator หรือกล่าวอีกนัยหนึ่งเพื่อแสดงหน้าจอเกม Boy คุณจะต้องทำให้คลาสของคุณเองใช้อินเตอร์เฟส IVIDEOOUTPUT
อินเทอร์เฟซนี้มีเพียงสองวิธีเท่านั้น:
void SetSize(int w, int h);
void SetPixels(uint[] colors);
วิธี การตั้งค่า จะถูกเรียกหลังจากโหลด ROM มันจะบอกคุณว่าขนาดของหน้าจอเป็นพิกเซล (160x144 มันไม่ควรเปลี่ยน) เพื่อให้คุณสามารถเริ่มต้นวิธีการแสดง
Method 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);
}
ตัวอย่างของวิธีการใช้งานเสียงสามารถพบได้ใน defaultaudioUtput.cs
ด้วย Unity วิธีเดียวที่จะสร้างเสียงแบบไดนามิกคือการใช้วิธีการ onaudiofilterread (ข้อมูล float [], ช่อง int) จากวัตถุ monobehaviour
ในแพ็คเกจเรามีวิธีการผลิตรางเสียงที่คลาส DefaultaudioOutput หากคุณต้องการใช้เพียงแค่แนบสคริปต์นั้นกับวัตถุเกมและเพิ่มส่วนประกอบ Audiosource
หากคุณยังต้องการทำการใช้งานของคุณเองเพื่อส่งสัญญาณเสียงคุณจะต้องสร้างคลาสที่ใช้อินเตอร์เฟส IaudioOutput
อินเทอร์เฟซนี้มีสามวิธี:
int GetOutputSampleRate();
int GetSamplesAvailable();
void Play(byte[] data, int offset, int count);
ตัวอย่างถูก interleaved ( %0 = ซ้าย, %1 = ขวา) ซึ่งหมายความว่าสำหรับแต่ละตัวอย่าง: ข้อมูล [i] = ตัวอย่างซ้าย, ข้อมูล [i + 1] = ตัวอย่างที่ถูกต้อง
ตัวอย่างของวิธีการจัดการไฟล์บันทึกสามารถพบได้ใน defaultSaveMemor.cs
ในการจัดการไฟล์บันทึกคุณจะต้องทำให้คลาสของคุณใช้งานอินเตอร์เฟส isavememory
อินเทอร์เฟซนี้มีเพียงสองวิธีเท่านั้น:
void Save(string name, byte[] data);
byte[] Load(string name);
วิธี การบันทึก จะถูกเรียกเมื่อผู้ใช้หยุดเกมและวิธี การโหลด จะถูกเรียกเมื่อโหลดเกม พารามิเตอร์ ชื่อ คือชื่อของเกมที่เล่นอยู่ในปัจจุบัน
ทั่วโลกเมื่อมีการเรียกวิธี การบันทึก คุณเพียงแค่ต้องจัดเก็บไว้ที่ไหนสักแห่งอาร์เรย์ไบต์ที่กำหนดเป็นพารามิเตอร์จากนั้นโหลดและส่งคืนอาร์เรย์ไบต์เดียวกันนี้เมื่อวิธี การโหลด ถูกเรียกใช้สำหรับเกมเดียวกัน
ตัวอย่างของวิธีการใช้ emulator สามารถพบได้ใน defaultemulatorManager.cs
รหัสด้านล่างเป็นวิธีง่ายๆที่แสดงวิธีเริ่มต้นและทำให้การเรียกใช้ UnityGB ด้วยสคริปต์ monobehaviour
ก่อนอื่นเราสร้างอินสแตนซ์ของ emulator และโหลด 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 ก่อนหน้าเข้ากับวัตถุเกมเพื่อให้มันทำงาน