Unity и интеграция библиотек Google Blockly - PullRequest
2 голосов
/ 23 июня 2019

Для моего финального проекта для студентов я хочу разработать обучающую игру для обучения основам программирования, поэтому я хочу предоставить им некоторый простой редактор визуального программирования drag'n'drop, как в этом коде , но у меня нет Идея, как это сделать, я новичок в единстве, и я сделал много поиска в Google, но я не понял (я очень потерял). Поэтому, пожалуйста, кто-нибудь может мне помочь в этом и дать мне подсказку так я могу опираться на это. Спасибо за помощь это пример моего игрового дизайна expl (я хочу переместить игрока с помощью перетаскивания вправо, вверх, вперед ......). Я дома, моя идея и вопрос ясны

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Ваша игра выглядит круто! Для code-it мы используем Blockly в качестве редактора кода. Затем код выполняется интерпретатором Lua внутри игры. Вы можете сделать что-то попроще: создать один тип блока для каждого действия, например MoveForward и т. Д., И заставить их генерировать вызовы функций, такие как SendMessage ('gameInterfaceObject', 'MoveForward'). В игре вам нужен объект, который прослушивает такие сообщения с сайта.

Вот как ваша игра взаимодействует с сайтом: https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html

Если у вас есть дополнительные вопросы, не стесняйтесь обращаться к нам: info@code-it-studio.de

0 голосов
/ 13 июля 2019

Несколько месяцев назад я разработал проект, очень похожий на ваш. Недавно я экстраполировал библиотеку из этого проекта и опубликовал ее на github. библиотека называется gamepad.js ? и позволяет вам создавать структуру game с блочной структурой и взаимодействовать с ней с помощью таких методов, как play() или pause().

Я считаю, что это значительно упростит взаимодействие между blockly и unity, если вам интересна документация, вы можете найти живую demo игры.


Вот gif демо.

enter image description here

Как это работает

Это другой и упрощенный подход по сравнению с обычным использованием blockly.

Сначала вы должны определить блоки (см. Их определение в документации ) .
Вам не нужно определять any code generator, все, что касается генерации кода, выполняется библиотекой.

enter image description here


Каждый блок генерирует запрос .

// 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)

Вы можете прочитать полную документацию здесь .
Надеюсь, мне помогло и удачи в проекте!.

...