1. 建筑方块预览
在制作建造类方块游戏的时候,我们可能需要提前让玩家知道,一个东西摆放出来的位置、样子等等。这个时候我们希望能显示半透或者其他什么效果的实际模型给玩家预览。
Roblox为了安全考虑,目前已经禁止在LocalScript中创建Part等模型(以前有个模式可以,现在正在废弃,不要使用)。那么怎么实现我们这个需求呢?
- 由服务器创建一个目标模型,挂载玩家的Player下面。不要放在workspace下面,以免别的玩家看到。
- 客户端使用一个脚本,来定时或者其他方式检测预览模型是否存在,如果存在就由LocalScript将预览模型挂到workspace下面。客户端的这个动作只会在本客户端生效,不会影响其他人,别人依然无法看到。
- 根据逻辑需求,设置预览模型的位置,以正常预览。
- 预览模型使用固定的名字,方便查找
- 服务器创建新的预览模型时,需要删除老的预览模型
问题:
- 服务器重新创建预览模型时,不会触发它的父节点的ChildAdded事件,可能是因为同名的问题。所以最好不要监听这个事件来处理,定时或者每帧检测都行。
2. 代码组织管理
Roblox本身不支持版本管理,存储到本地也是一个完整的二进制文件(建议多备份)
那么当项目大了之后,多个脚本如何管理?想要回滚到以前的版本怎么办?一个简单的方法是每天定期备份二进制,并以时间作为后缀。
另一个方法稍微麻烦一点。将lua脚本每个都导出来,然后使用git或者其他版本工具定期提交。这样就有自己的版本记录了。Roblox的脚本导出比较坑的是,每次只能导出单个脚本,选择多个则只能导出二进制了(也可以选择xml的方式,也是可以阅读的内容了,但是没法跟踪单个文件的修改记录)。所以这里写了一个小插件来导出所有的脚本(由于没法自动保存,也只能弹出另存的对话框,挨个确认以及覆盖就好了)。下面的代码要在plugin中执行。
local toolbar = plugin:CreateToolbar("BlockTools")
local saveTool