UnityGB позволяет вам запустить Game Boy ROM в вашем проекте Unity. Он был написан в C# и только использует Mono, позволяя вам экспортировать проект на любую платформу, поддерживаемую Unity.
UnityGB стал основным предметом нескольких статей, таких как Cnet, Gameboy Emulator на Oculus Rift: Gameception.
UnityGB все еще находится в альфа -версии, может возникнуть множество ошибок и глюков. Кроме того, код далеко не идеально и нуждается в большой оптимизации. Все и все помогают приветствовать! Пожалуйста, не стесняйтесь вносить свой вклад в этот проект.
Пожалуйста, также потратьте некоторое время, чтобы посмотреть на другие наши приложения на нашем веб -сайте Takohi.com и других наших активов Unity. ?
Веселый эмулятор Gameboy с прыжком в Unity , Pierce Wolcott
Oculus Rift Gameboy Emulator в Unity , Шейн О'Брайен
Unitygb4bb10, эмулятор Gameboy для BlackBerry 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 .
Чтобы вывести видео из эмулятора или, другими словами, для отображения экрана Game Boy, вам придется сделать свой собственный класс, внедряющий интерфейс ivideoOutput .
Этот интерфейс имеет только два метода:
void SetSize(int w, int h);
void SetPixels(uint[] colors);
Метод SETSIZE будет вызван после того, как ПЗУ будет загружен. Он расскажет вам, что такое размер экрана в пикселях (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 единственный способ динамического производства аудио - это использование метода onaudiofilterread (float [] data, int -каналы) из объекта Monobehaviour .
В пакете мы уже предоставляем способ создать аудио -коридор класса DefaultAudioOutput . Если вы хотите его использовать, просто прикрепите этот скрипт к игровому объекту и добавьте к нему компонент AudioSource .
Если вы все еще хотите сделать свою собственную реализацию для вывода аудио, вам придется сделать класс, который реализует интерфейс iaudioOutput .
Этот интерфейс имеет три метода:
int GetOutputSampleRate();
int GetSamplesAvailable();
void Play(byte[] data, int offset, int count);
Образцы чередуются ( %0 = слева, %1 = справа). Это означает, что для каждого образца: Data [i] = левый образец, данные [i + 1] = правый образец.
Пример того, как управлять сохранением файлов, можно найти в default avememory.cs .
Чтобы управлять сохранением файлов, вам придется сделать свой собственный класс, реализуя интерфейс Isavememory .
Этот интерфейс имеет только два метода:
void Save(string name, byte[] data);
byte[] Load(string name);
Метод сохранения вызывается, когда пользователь останавливает игру, и метод загрузки вызывается при загрузке игры. Параметр имени - это название игры, которая в настоящее время играет.
Во всем мире, когда вызовут метод сохранения , вам просто нужно хранить где -то массив байтов, приведенный в качестве параметра, затем загрузить и вернуть тот же массив байтов, когда метод загрузки вызывает для той же игры.
Пример того, как использовать эмулятор, можно найти в defaultemulatormanager.cs .
Приведенный ниже код - простой способ, показывающий, как инициализировать и сделать запуск UnityGB с помощью сценария Monobehaviour .
Во -первых, мы создаем экземпляр эмулятора и загружаем ПЗУ в методе начала .
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 к игровому объекту, чтобы он запустил.