概述
以前用Unity做DLC的时候首先要用到AssetBundle进行打包,整个过程还是挺繁琐的。Unity的assetbundle中的文件的原始位置和最终所在的包无关,因此要严格定义好打包的规则,当资源较多的时候需要用到插件及自己扩展的脚本来进行打包。这样的设计虽然对一些复杂场景是合理的,但是对于一些简单场景,总有点弄巧成拙的感觉。而且,Unity没有提供一个方便使用的处理包加载的方法,需要自己使用底层API再封装,总之当时用Unity实现DLC的那段日子,很是辛苦。相比之下,Godot实现DLC的打包->下载->加载->调用这几个步骤一气呵成,不需要你自己再造轮子。更为重要的是,Godot的GDScript可以直接放到包里,以实现逻辑的更新,不需要像Unity那样还要使用Lua并且还要给予xLua或者sLua这样的第三方技术。总之,再次感到Godot真的是贴心又到位!
实现要点
以下是我的DLC步骤,如果有问题或错误,敬请大家帮我指出!
1.首先还是要开启User Dir,用于存储下载到的DLC资源,开启方式如图
2.导出PCK
3.将PCK放到服务器端
我用PHP实现了一个简单的服务器,把PCK文件放上去设置好目录即可,此步略
4.Godot端实现下载和加载
extends Node2D
func _ready():
$HTTPRequest.download_file = "user://test.pck"#指定保存的文件名
$HTTPRequest.request("http://localhost/game.php/dlc/download")#下载
func _on_HTTPRequest_request_completed(result, response_code, headers, body):
if response_code == 200:
ProjectSettings.load_resource_pack("user://test.pck")#加载
get_tree().change_scene("res://DLCs/DLCScene.tscn")#调用,文件的路径依据打包时的原始路径