首页 > 其他分享 >Godot 4.0 文件系统特性的总结

Godot 4.0 文件系统特性的总结

时间:2023-04-28 09:58:02浏览次数:57  
标签:文件 Godot 4.0 导出 文件系统 导入 png 资源

关于文件系统,官方文档犹抱琵琶半遮面,有一些很独特的特性并没有集中地摆出来,导致用的时候晕头转向。
这里总结了目前我发现的Godot文件系统的一些特性。

这是专门针对导出后的,因为一些操作在编辑器里面能跑,但是拿出来就不起作用了。
这里并没有"自定义Resource"之类关于Resource的高级话题,但是有Resource相关内容。


本人使用C#作为开发语言,使用GDScript的朋友还请灵活理解~


文件的路径和特点(常规知识)

这一部分官方文档讲得比较详细,我这里简单提一下。

Godot会对文件进行组织,从而将它们管理起来,引擎的使用者要访问被管理的文件,需要遵循这样的规定:

  • 使用Godot提供的函数和类访问文件
    • 个人发现常用的有这些: ResourceLoader类GD.Load()Godot命名空间的FileAccess类
  • 文件的路径使用正斜杠/而不是反斜杠。
  • 项目的资源目录采用res://作为前缀。导出后,该目录只读。
  • 用户文件目录采用user://作为前缀。导出后,该目录可读写,存档之类数据可安放其中。
  • 可以使用ProjectSettings.GlobalizePath()将Godot管理的路径转化为系统路径,然后就可以用更一般的IO函数处理它们了。
    • 这要求文件存在于实际的物理位置,也就是说"资源目录"被打包导出后用这个函数并不能找到它真正的位置,但"用户文件目录"可以。

文件的导入

文件被放入Godot项目文件夹后,会发生下面的情况。

  1. 引擎根据文件后缀,对文件产生一个初步的印象。
  2. 熟悉的后缀会被显示在编辑器的"文件系统"管理器显示,不熟悉的就不显示。
  • 举例: .png会显示,.txt会显示,.my_cool_extension默认不会显示。
  • 自定义资源、自定义资源导入工具应该能影响这个过程。
  1. 导入为资源。能够变成资源的才会导入成资源,否则只能看到它在那里。
  • 举例: .png会被导入,你可以在左上角窗格中选择导入为什么类型的资源,
  • .txt默认不会被导入。在实际使用时,你会发现默认情况下,txt文件虽然能被显示在编辑器里,但是也不能被拖到场景里面,也不能拖放到某个对象的检查器里,也不能查看和编辑,好像显示在这里没有太大的实际意义。
  • .my_cool_extension默认不会被导入
  • 自定义资源、自定义资源导入工具应该能影响这个过程。
    image

打包导出时的"非资源文件"

导出时,有一个项目让人选择——"筛选导出非资源文件或文件夹"。

一开始这句话我的理解是:

在这里指定不是资源的文件,因为它们不是资源,所以打包时会按照这个规则进行筛选,排除掉这些文件。

但是实践证明我的理解是错误的,阅读了一些官方网站的Q&A后,我才明白这一项的意义是这样:

有一些文件在打包时会被忽略,因为它们不是资源文件,在这里指定你想保留的文件,他们会以原始的文件形式保留于Godot内部控制的文件系统中以供运行时读取。

因此,当我填写*.miao时,Godot打包时会保留此后缀的文件,而不是丢弃它们。

image

文件的访问

这是一个我未曾想到的坑。

一言以蔽之,

虽然看上去都在res://目录下,但是被导入的资源处于资源的世界,非资源文件都处于文件的世界。


具体而言,根据上几节所述,可以理解的是,被打包后,Godot的文件系统中会存在这两类内容:
  • 资源。类型为引擎自带的资源或是引擎使用者自定义的资源。
  • 保留文件。在导出设置中指定的"非资源文件"。

对于"资源",你必须使用Load函数(GD.Load()ResourceLoader.Load())进行加载。
对于"保留文件",你必须使用Godot.FileAccess类,以文件的形式访问。

如果你使用Godot.FileAccess类访问一个被认定是资源的路径,会报错,错误信息称"文件不存在"。


这意味着,如果你希望将一个导入为资源.png的文件看作是文件本身,比如把它拷贝到用户信息目录中,这其实无法实现,可能在Godot中,.png文件直接是以资源的形式存在的,例如Texture2D这种资源,而资源系统登记了该png文件的路径,和资源进行了匹配,所以Load函数能够找到它们。

好在Texture2D提供了SavePng()方法,可以间接地达到拷贝图片的目标。

还有一种方案是把.png文件重命名成别的后缀,让Godot无法将其作为资源导入,并在导出设置中指定它,这样它就能以"保留文件"的方式"偷渡"了,拷贝到用户信息目录时,再改头换面,把后缀改成.png

补充:我刚刚发现了一种更简单的方法,在文件的导入选项中选择保留文件(不导入)即可使文件正式地成为"保留文件"。

目前,我没有研究动态导入资源,也许动态导入资源又有它值得一提的文件机制吧。

参考

https://godotengine.org/qa/111374/load-an-save-files-after-export
https://www.reddit.com/r/godot/comments/j94pam/problem_with_png_files_after_export/

标签:文件,Godot,4.0,导出,文件系统,导入,png,资源
From: https://www.cnblogs.com/qiiimiu/p/17360811.html

相关文章

  • 文件系统切换
    //疑问:到底采用swith_root还是chroot?/若采用了chroot之后,web端能见到chroot之后的文件系统吗?!!!/switch_root好像需要多建一个分区/结合chroot可以退出的特性ctrl+d //busybox默认调用initramfs中根目录的linuxrc程序。该程序调用rcS脚本,但该脚本并不是以PID=1运行的。所以,......
  • 必须经典GPT4.0
    学习C#编程,有一些经典的教材和资源值得关注。下面列出了一些建议供你参考:1.《C#编程黄皮书》(C#ProgrammingYellowBook):RobMiles编著的这本书是学习C#的经典教材,适合初学者。书中详细介绍了C#的基本概念和编程技巧,同时也涵盖了面向对象编程等高级主题。2.《C#7.0inaNu......
  • 如何在Godot中使用ParallaxBackground实现稳定的2d游戏背景[一问随笔]
    问题:我尝试给2d游戏添加静态的背景,当角色运动速度很快时相机的渲染就跟不上角色了,背景会发生这样巨大的位移。我将Camera2d节点和背景节点绑在一起,但根本无法解决这个问题。我还尝试制作天空盒子作为解决方案,有没有什么更好的方案?解决:Godot提供了两种节点ParallaxBa......
  • 《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变
    动态字典(DynamicDictionary)是指一个键值对集合,其中键和值的类型都可以在运行时确定并且可以动态变化。在C#中,可以使用dynamic关键字来实现这一功能。例如,下面的代码演示了如何创建一个动态字典并向其中添加元素:dynamicdict=newSystem.Dynamic.ExpandoObject();dict.Name......
  • 《c#高级编程》第4章C#4.0中的更改(八)——协变和逆变
    一、协变C#协变是指在一些特定的情况下,可以将一个派生类型的实例赋值给其基类或接口类型的引用。这里的“派生类型”指的是从某个基类或接口继承并增加了新的成员的类型。C#4.0引入了对协变和逆变的支持。其中,协变针对的是返回类型,逆变则针对参数类型。通过使用协变和逆变,可以......
  • Echarts4.0 迁徙图模拟Echarts2.0样式
     由于公司业务需求做Echarts4.0的迁徙图,但是Echarts4.0默认的迁徙图的飞行轨迹和迁徙线的颜色都是一样的,比较单调,现在模拟Echarts2.0的样式模拟了一个demo,虽然没有全部相同,但大体相近。备忘一下letminigrateChart=echarts.init(document.getElementById("MinigrateChart"));......
  • 虚拟机文件系统损坏
    问题描述linuxwindows问题原因问题影响问题解决问题确认修复虚拟机磁盘linux操作系统修复准备修复镜像通过下载的镜像/磁盘镜像启动新的kvm虚拟机,将故障虚拟机磁盘挂载到系统进行修复启动虚拟机,进行修复验证使用ISO修复需注意windows操作系统修复下载windowsiso镜像从镜像启......
  • 《c#高级编程》第4章C#4.0中的更改(六)——动态绑定
    一、概念下面是一些代码示例,说明C#动态绑定的上述特点:1.延迟确定类型```dynamicobj=GetDynamicObject();//获取动态对象obj.DoSomething();//在运行时才能确定DoSomething方法是否存在及其参数类型和返回值类型```2.动态调用成员```dynamicobj=GetDynamicObject(......
  • 《c#高级编程》第4章C#4.0中的更改(七)——命名参数和可选参数
    一、概念C#中的命名参数和可选参数是两种函数参数的特殊形式,它们可以提高代码的可读性和灵活性。命名参数命名参数允许我们在调用函数时指定参数名称,从而不必按照函数定义时的参数顺序进行传参。这样做可以使代码更加易读易懂,同时也可以提高代码的灵活性,因为我们可以只传递某些......
  • windows和Linux文件系统区别
    windows和Linux文件系统区别 一、用户操作系统单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源WindowsXP 之前的版本都是单用户操作系统多用户操作系统:指一台计算机在同一时间可以由 多个用户 使用,多个用户......