Unity, C#
Не уверен, что Юнити на это способна, она скорее всего не умеет в окне работать или хотя-бы мышу отдать.
У всех нормальных игровых движках хоть в старых, хоть в новых разделяются на методы Init, Paint, Keyboard, KeyPad, Mouse. В методе Init происходит инициализация и подгрузка чего-ниубдь (3D моделей, текстур, аудио, музыка), в методе Paint рисует, метод постоянно вызывается как-будто от таймера, в методах Keyboard, KeyPad, Mouse ловите нажатие кнопок. Чтобы передать в метод Paint какую нажали кнопку, нужно завести глобальную переменную и передавать код кнопки в методах Keyboard, KeyPad, Mouse а в методе Paint считываете код клавиши из глобальной переменной.
Допустим в колледже мы изучали библиотеку FreeGlut простой пример, нужно зарегистрировать Callback-функции:
int main(int argc, char **argv) { // init GLUT and create window glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Lighthouse3D- GLUT Tutorial"); // register callbacks glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); glutIdleFunc(renderScene); // here are the new entries glutKeyboardFunc(processNormalKeys); glutSpecialFunc(processSpecialKeys); // enter GLUT event processing cycle glutMainLoop(); return 1; }
В Callback-функции glutDisplayFunc обрабатываетсся графика, а в Callback-функции glutKeyboardFunc обрабатывается нажатие клавиши.