实现独立渲染的加载进度条界面(已弃用)
基本步骤
创建 CanvasLayer
作为独立渲染节点
使用Godot自带的ProgressBar
作为子节点
- 修改颜色
- 添加
Value
类
添加脚本
GDScript
写法:
进度条的脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| extends Control
var loading_path = "" @onready var progressBar:ProgressBar = $ProgressBar
var progress = [] var scene_load_status = 0 fun _ready(): progressBar.max_value ResourceLoader.load_threaded_request(SceneChanger.loading_path) pass fun _process(): scene_load_status = ResourceLoader.load_threaded_get_status(ScenChanger.loading_path) progressBar.value = progress[0] * 100 if scene_load_status = ResourceLoader.THEAD_LOAD_LOADED: set_proess(false) await get_tree().create_timer(0.5).timeout SceneChanger.change_scene(ReosurceLoader.load_threaded_get(SceneChanger.loading_path)) pass
|
场景的定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| extends CanvasLayer var loading_path = "" @onready var animation:AnimationPlaer = $AnimationPlayer func _ready(): self.hide() pass func _process(delta): pass func change_scene(path, isLoading:bool = false): self.show() self.set_layer(999) animation.play("changer") await animation.animation_finished if is Loading: loading_path = path get_tree().change_scene_to_file("res://page_loading/page_loading.tscn") else: if typeof(path) == TYPE_STRING: get_tree().change_scene_to_file(path) else: get_tree().change_scene_to_packed(path) get_tree().change_scene_to_file(path) animation.play_backwards("changer") await animation.animation_finished self.set_layer(-1) self.hide() pass
|
调用时
1
| SceneChanger.change_scene("res://scene2.tscn", true)
|
C#
写法
主要思路就是,先检查是否加载,若未加载,则运行进度条,加载后出现
定义方法,接收场景资源和进度条资源
进度条根据场景资源的加载速度来加载
使用 ResourceLoader¶
通常使用 ResourceLoader.load_threaded_request 将资源加载请求加入队列,其他线程会在后台进行加载。
你可以使用 ResourceLoader.load_threaded_get_status 检查状态。给 progress 传一个数组变量就可以获取进度,返回时该数组中包含一个元素,表示百分比。
最后调用 ResourceLoader.load_threaded_get 即可获取加载到的资源。
传入需要加载的场景的路径,让场景都在进度条的类下进行加载。
加载完毕后关闭进度条类。
实例化场景类。
迫真写法
我这个无敌了上面麻烦死了!!!
1 2 3
| ResourceLoader.LoadThreadedRequest(resourcePath, "PackedScene", true); ResourceLoader.ThreadLoadStatus loadState = ResourceLoader.LoadThreadedGetStatus(resourcePath, progressArray);
|