在游戏开发过程中,我遇到了许多关于用户数据库功能的疑问,主要来源如下:
- 其调用方法为
GameManager.get_project_database_plain("database_name", "record_name", "column_name"),其中"record_name"为字符串类型。这使得我在脚本中遍历数据库时非常困难且麻烦。例如,如果我希望有10个背包槽位,我需要使用一种非常繁琐的方法在 int 类型和 str 类型之间转换。目前我采用的临时方法如下:
var backpack_item = []
var database_name = "背包"
# 获取背包物品状态
for i in range(11):
var database_item_numberName = "背包" + str(i) + "号位"
var database_item_number = AGMakerManager.get_project_database_plain(database_name, database_item_numberName, "是否有东西")
# 打印从数据库获取的原始值
print("从数据库获取第 ", i, " 个位置的原始值: ", database_item_number)
# 检查获取的值是否为 null
if database_item_number == null:
print("警告:第 ", i, " 个位置获取的值为 null,默认设置为 false")
database_item_number = true
backpack_item.append(database_item_number)
print("添加到数组的第 ", i, " 个位置的值: ", database_item_number)
print(value)
# 扩展遍历范围到 11 个元素
for i in range(last_updated_index + 1, min(11, backpack_item.size())):
if not backpack_item[i]:
print("更新前第 ", i, " 个位置状态: ", backpack_item[i])
backpack_item[i] = true
var database_item_numberName = "背包" + str(i) + "号位"
# 更新数据库,传入布尔值 true
AGMakerManager.update_project_database_plain(database_name, database_item_numberName, "是否有东西", true)
print("已更新第 ", i, " 个位置,更新值为 true")
# 重新获取更新后的值
var updated_value = AGMakerManager.get_project_database_plain(database_name, database_item_numberName, "是否有东西")
print("更新后第 ", i, " 个位置从数据库获取的值: ", updated_value)
last_updated_index = i
break
else:
print("第 ", i, " 个位置已有物品,继续检查下一个")
print(backpack_item)
由于所有参数均为字符串类型,我不确定是否有更好的处理方式,但这在代码维护方面给我带来了诸多麻烦。
- 从 VS 脚本调用用户数据库的过程也非常繁琐。
首先,在动作转换中的开关或变量值比较条件检查时,无法选择用户数据库。
这些转换条件非常奇怪,耗费了我大量精力。我别无选择,只能通过信号来完成此任务。我必须先向脚本发送信号,然后在 GameObject 上创建一个新的开关变量,最后在脚本中修改它以实现所需操作。
func _on_test_同步信号测试(signal_name:String, value:Variant) -> void:
var teststatus = AGMakerManager.get_project_database_plain("背包","背包1号位","是否有东西")
print("同步信号测试,当前值: ", teststatus)
$".".set_value("同步开关",teststatus)
pass # Replace with function body.
其次,关于图像显示,我不清楚如何在 VS 脚本中获取存储在用户数据库中的图像数据。在动作编辑器中,似乎没有直接指定用户数据库的选项。我之前的解决方法是使用脚本从数据库中获取数据,并修改 Sprite2D 组件的 texture 属性以实现所需效果。
然后是对象开关的问题。当选择“self”(对象本身)时,我无法使用变量赋值,也无法直接引用项目数据库中的值来设置其状态。
在将用户数据库功能与 VS 脚本结合使用时,我经常遇到无法指定变量的地方,这让我非常头疼。使用 AGM 的初衷是为了减少编写代码的工作量,但这些效果和限制迫使我探索许多其他解决方案。受限于我的编程水平,我遇到了诸多麻烦和困难。我真诚希望 VS 脚本中变量、用户数据库和 GameObject 之间的交互逻辑能够得到优化。如果有任何好的解决方案,我将不胜感激。



