【极简代码】Godot Mono版的C#脚本实现对SQLite数据库的读写及对安卓端的兼容

本文介绍了在Godot Mono环境下,如何通过C#代码实现对SQLite数据库的读写操作,并解决在安卓平台运行时的兼容问题。文章提到了Nuget包在Godot中的限制,推荐使用Godot-SQLite插件,并详细阐述了环境配置、权限设置、文件路径处理以及C#与GDScript的通信方法,以实现跨平台数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特别说明

  • Unity 3D可以通过自建Plugins文件夹,放入SQLite相关配置文件,引入命名空间的方式快速实现对数据库的访问。具体步骤见此文:【极简代码】Unity C#连接查询SQLite数据库并支持安卓系统
  • 但是,Godot与Unity 3D很大不同,无法直接解析导入项目中的dll文件。网络上普遍的解决方案就是借助Visual Studio强大的Nuget功能,引入Microsoft.Data.Sqlite包(System.Data.SQLite包、SQLite包和Mono.Data.Sqlite.Portable包等都没有Microsoft.Data.Sqlite包好用,更何况System.Data.SQLite包中另有2000美刀的收费模块)。笔者经过多番尝试后发现,Nuget包只适用于PC平台,即打包出exe文件后读写SQLite数据库均无问题,而一旦打包成apk文件,在安卓真机上运行时,就会报“DllNotFoundException:e_sqlite3”这样的错误,即使把Sqlite3.dll文件拷贝到项目目录也不行,VS也无法像引入程序集一样引入这个Sqlite3.dll文件。
  • 综上所述,如果只想实现PC端读写Sqlite数据库,最省事的办法就是通过Nuget引入Microsoft.Data.Sqlite包。如果想实现PC和安卓多端兼容,就得使用一个“曲线救国”的办法——借助Godot SQLite插件。

环境配置

主要是对Godot做一些配置,包括插件的安装与启用、SQLite文件的“非资源文件筛选”、外部文件读写权限的开启、Godot面向安卓端的路径寻址等:

  1. 在Godot AssetLib资源商店搜搜并安装Godot-SQLite插件,然后在Gddot菜单栏“项目—项目设置—插件”中启动该插件;
  2. 在Godot安卓导出界面“资源—筛选导出非资源文件或文件夹”中填写SQLite文件,如res://SqliteTest.db,*.db;
  3. 在Godot安卓导出界面勾选启用“ReadExternalStorage”和“WriteExternalStorage”;
  4. Godot提供的“res://”和“user://”这两个地址各有一个坑:“res://”中的文件具备只读(ReadOnly)功能,对只读类型的数据库比较适用,但必须在GDScript脚本中明确添加一句代码db.read_only=true才算是真正开启了对该数据库的访问;“user://”所对应的安卓端地址是“/data/data/com.example.$genname/files”,该文件夹在非root手机中是看不到的,所以很不好通过外部管理数据库文件,而在非root手机中能够看到的文件夹是“/Storage/Emulated/0/Android/data/com.example.genname/files”,该文件夹在Godot中对应的访问方式是OS.GetSystemDir(OS.SystemDir.Desktop, false),在Unity 3D中对应的访问方式是Application.PersistentDataPath
  5. 通过C#与GDScript通信功能,实现C#对Godot-SQLite插件的间接调用:GDScript myGDScript = GD.Load<GDScript>("res://scripts/CanvasLayerSqlite.gd");//1.脚本寻址 sqliteObj = (GodotObject)myGDScript.New();//2.实例化脚本 labelMsg.Text = sqliteObj.Get("dbpath").ToString();//3.获取GD脚本中的字段 Variant result = sqliteObj.Call("db_insert", sql);//4.传参调用脚本中的函数
  6. 为什么要用C#与GDScript通信来调用Godot-SQLite插件,而不直接使用GDScript?答:探索出一条新路,供Godot Mono用户群参考。

C#代码片

using Godot;
using Godot.Collections;
using System;
using System.IO;

public partial class SQLiteManager : CanvasLayer
{
   

    GodotObject sqliteObj;

    Button butttonLogin, butttonLogup, buttonQuit;
    LineEdit lineEditUser, lineEditPwd;
    Label labelMsg;

    bool isUserExisted = false;

    //change bgimg
    int imgIndex = 0;
    FileInfo[] fileInfos;

    public override void _Ready()
    {
   
        GDScript myGDScript = GD.Load<GDScript>("res://scripts/CanvasLayerSqlite.gd");
        sqliteObj = (GodotObject)myGDScript.New();
        InitComps();

        //labelMsg.Text = OS.GetSystemDir(OS.SystemDir.Desktop, false);

        //labelMsg.Text = "数据库所有数据:" + sqliteObj.Call("db_sel_all").ToString();

        //sqliteObj.Call("my_ready");

        try
        {
   
            butttonLogin.Pressed += CheckLogin;
            butttonLogup.
想要在Godot Mono环境中利用DsUi插件进行快速的UI开发,首先你需要确保已经安装了Godot Engine的Mono本,并且熟悉C#语言的基础。接下来,请按照以下步骤操作: 参考资源链接:[Godot Mono插件DsUi:C#快速UI开发](https://wenku.csdn.net/doc/1cnwk18fza?spm=1055.2569.3001.10343) 1. 获取DsUi插件:下载'Ds_Ui_master.zip'文件并解压,确保你有插件的所有必要文件。 2. 集成DsUi插件:将解压出的DsUi相关文件夹拖入Godot项目中的'addons'目录下,这样DsUi插件就被集成到了你的项目中。 3. 配置插件:在Godot编辑器中,进入'项目'->'项目设置'->'插件',找到DsUi插件并启用它。 4. 导入必要的包:根据'DsUi插件'的说明文档,确保你的项目引用了DsUi插件所需的.NET程序集。 5. 编写UI代码:使用C#编写脚本,调用DsUi提供的API来创建和管理UI组件。DsUi插件通常会提供一套洁的API,帮助开发者快速实现按钮、列表、窗口等UI元素的创建和布局。 6. 测试UI:运行Godot项目来查看UI是否按照预期工作,根据测试结果调整代码以修复任何问题。 7. 进行UI迭代:使用DsUi插件的快速更新特性来迭代UI,例如添加或修改UI元素,调整布局等。 通过这些步骤,即使是对C#Godot不太熟悉的新手,也能迅速上手并利用DsUi插件来创建复杂的用户界面。这不仅提高了开发效率,也使得游戏UI的原型制作和迭代变得更加灵活和便捷。建议详细阅读《Godot Mono插件DsUi:C#快速UI开发》这本书来深入了解DsUi插件的高级用法和最佳实践,它将指导你如何最大限度地利用这个插件来优化你的游戏开发流程。 参考资源链接:[Godot Mono插件DsUi:C#快速UI开发](https://wenku.csdn.net/doc/1cnwk18fza?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值