Несколько месяцев назад я разработал проект, очень похожий на ваш. Недавно я экстраполировал библиотеку из этого проекта и опубликовал ее на github. библиотека называется gamepad.js ?
и позволяет вам создавать структуру game
с блочной структурой и взаимодействовать с ней с помощью таких методов, как play()
или pause()
.
Я считаю, что это значительно упростит взаимодействие между blockly
и unity
, если вам интересна документация, вы можете найти живую demo
игры.
Вот gif демо.
![enter image description here](https://i.stack.imgur.com/bAfGi.gif)
Как это работает
Это другой и упрощенный подход по сравнению с обычным использованием blockly.
Сначала вы должны определить блоки (см. Их определение в документации ) .
Вам не нужно определять any code generator
, все, что касается генерации кода, выполняется библиотекой.
![enter image description here](https://i.stack.imgur.com/E7xltm.png)
Каждый блок генерирует запрос .
// the request
{ method: 'TURN', args: ['RIGHT'] }
Когда блок выполнен, соответствующий запрос передается в вашу игру .
class Game{
manageRequests(request){
// requests are passed here
if(request.method == 'TURN')
// animate your sprite
turn(request.args)
}
}
Вы можете использовать обещания для управления асинхронной анимацией .
class Game{
async manageRequests(request){
if(request.method == 'TURN')
await turn(request.args)
}
}
Связь между блоками и вашей игрой управляется геймпадом .
let gamepad = new Blockly.Gamepad(),
game = new Game()
// requests will be passed here
gamepad.setGame(game, game.manageRequest)
Геймпад предоставляет несколько методов для управления выполнением блоков и, следовательно, генерация запросов .
// load the code from the blocks in the workspace
gamepad.load()
// reset the code loaded previously
gamepad.reset()
// the blocks are executed one after the other
gamepad.play()
// play in reverse
gamepad.play(true)
// the blocks execution is paused
gamepad.pause()
// toggle play
gamepad.togglePlay()
// load the next request
gamepad.forward()
// load the prior request
gamepad.backward()
// use a block as a breakpoint and play until it is reached
gamepad.debug(id)
Вы можете прочитать полную документацию здесь .
Надеюсь, мне помогло и удачи в проекте!.