Unity 和 Google 的 Blockly 库集成
Unity and Google's Blockly library integration
对于我的本科期末项目,我想开发一个教育游戏来教授基本编程,所以我想为他们提供一些简单的拖放可视化编程编辑器,就像这个 code it 但我不知道如何做到这一点我是 unity 的新手,我在 google 中做了很多搜索,但我没有得到它(我很迷茫)。所以请任何人帮助我并给我一个线索,所以我可以以此为基础。谢谢您的帮助
这是我的游戏设计示例 expl(我想通过拖放移动玩家向右移动、向上移动、向前移动......)。我回家我的想法和问题很清楚
你的游戏看起来很酷!
对于 code-it,我们使用 Blockly 作为代码编辑器。然后代码由游戏内的 Lua 解释器执行。您可以做一些更简单的事情:为每个操作创建一个块类型,例如 MoveForward 等,并让它们生成函数调用,例如 SendMessage('gameInterfaceObject','MoveForward')。在游戏中,您需要一个对象来侦听来自网站的此类消息。
以下是您的游戏与网站的对话方式:
https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
几个月前,我开发了一个与您的项目非常相似的项目。我最近从这个项目中推断出一个库并将其发布在 github 上。该库名为 blockly-gamepad
,允许您使用 blockly 创建 game
的结构,并使用 play()
或 pause()
等方法与其交互。
我相信这将大大简化 blockly
和 unity
之间的交互,如果您对文档感兴趣,您可以找到游戏的实时 demo
。
这是演示的 gif。
工作原理
与 blockly 的正常使用相比,这是一种不同且简化的方法。
首先你必须定义方块(参见documentation中如何定义它们)。
您不必定义any code generator
,所有与代码生成有关的内容都由库执行。
每个块生成一个请求。
// the request
{ method: 'TURN', args: ['RIGHT'] }
执行块时,相应的请求将传递给您的 game.
class Game{
manageRequests(request){
// requests are passed here
if(request.method == 'TURN')
// animate your sprite
turn(request.args)
}
}
您可以使用 promises 来管理 异步动画 。
class Game{
async manageRequests(request){
if(request.method == 'TURN')
await turn(request.args)
}
}
方块和您的游戏之间的 link 由 游戏手柄 管理。
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)
您可以阅读完整文档 here。
我希望我对这个项目有所帮助,祝你好运!
编辑:我更新了库的名称,现在叫做blockly-gamepad。
对于我的本科期末项目,我想开发一个教育游戏来教授基本编程,所以我想为他们提供一些简单的拖放可视化编程编辑器,就像这个 code it 但我不知道如何做到这一点我是 unity 的新手,我在 google 中做了很多搜索,但我没有得到它(我很迷茫)。所以请任何人帮助我并给我一个线索,所以我可以以此为基础。谢谢您的帮助 这是我的游戏设计示例 expl(我想通过拖放移动玩家向右移动、向上移动、向前移动......)。我回家我的想法和问题很清楚
你的游戏看起来很酷! 对于 code-it,我们使用 Blockly 作为代码编辑器。然后代码由游戏内的 Lua 解释器执行。您可以做一些更简单的事情:为每个操作创建一个块类型,例如 MoveForward 等,并让它们生成函数调用,例如 SendMessage('gameInterfaceObject','MoveForward')。在游戏中,您需要一个对象来侦听来自网站的此类消息。
以下是您的游戏与网站的对话方式: https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
几个月前,我开发了一个与您的项目非常相似的项目。我最近从这个项目中推断出一个库并将其发布在 github 上。该库名为 blockly-gamepad
,允许您使用 blockly 创建 game
的结构,并使用 play()
或 pause()
等方法与其交互。
我相信这将大大简化 blockly
和 unity
之间的交互,如果您对文档感兴趣,您可以找到游戏的实时 demo
。
这是演示的 gif。
工作原理
与 blockly 的正常使用相比,这是一种不同且简化的方法。
首先你必须定义方块(参见documentation中如何定义它们)。
您不必定义any code generator
,所有与代码生成有关的内容都由库执行。
每个块生成一个请求。
// the request
{ method: 'TURN', args: ['RIGHT'] }
执行块时,相应的请求将传递给您的 game.
class Game{
manageRequests(request){
// requests are passed here
if(request.method == 'TURN')
// animate your sprite
turn(request.args)
}
}
您可以使用 promises 来管理 异步动画 。
class Game{
async manageRequests(request){
if(request.method == 'TURN')
await turn(request.args)
}
}
方块和您的游戏之间的 link 由 游戏手柄 管理。
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)
您可以阅读完整文档 here。
我希望我对这个项目有所帮助,祝你好运!
编辑:我更新了库的名称,现在叫做blockly-gamepad。