如何在Godot 4中播放GIF?GDscript实现及替代方案咨询
Godot 4中播放GIF与视频的实现方案
一、播放GIF文件
Godot 4没有原生的GIF专属播放组件,但可以通过两种方式实现播放:
1. 用AnimatedSprite2D逐帧播放
先把GIF拆成单独的帧图片(可用PS、免费在线工具完成拆分),导入Godot后创建SpriteFrames资源并导入所有帧,再给AnimatedSprite2D组件绑定该资源,最后用代码控制播放:
extends AnimatedSprite2D func _ready(): # 提前在编辑器给sprite_frames赋值拆分后的帧资源 play() # 强制开启循环(也可直接在SpriteFrames面板设置) set_animation_loop(true)
2. 用TextureRect+GDScript动态加载帧
借助Godot的Image类读取GIF的帧数据和延迟时间,定时切换TextureRect的纹理:
extends TextureRect var gif_frames: Array[Texture2D] = [] var frame_delays: Array[float] = [] var current_frame: int = 0 var timer: Timer = null func _ready(): var gif_image = Image.load("res://video.gif") if gif_image: # 提取所有帧和每帧延迟时间 for i in range(gif_image.get_frame_count()): gif_image.set_current_frame(i) gif_frames.append(ImageTexture.create_from_image(gif_image)) # 把毫秒转成秒 frame_delays.append(gif_image.get_frame_delay(i) / 1000.0) # 创建定时器控制帧切换 timer = Timer.new() add_child(timer) timer.timeout.connect(_on_timer_timeout) timer.wait_time = frame_delays[current_frame] timer.start() func _on_timer_timeout(): current_frame = (current_frame + 1) % gif_frames.size() texture = gif_frames[current_frame] timer.wait_time = frame_delays[current_frame] timer.start()
二、播放视频文件
Godot 4原生支持视频播放,直接用VideoPlayer组件即可:
- 给场景添加VideoPlayer节点
- 在编辑器的属性面板里,把
stream设置为你的视频文件(支持MP4、WebM等格式,推荐用H.264编码的MP4或VP9编码的WebM) - 用代码控制播放逻辑:
extends VideoPlayer func _ready(): stream = load("res://your_video.mp4") play() # 监听播放结束事件 finished.connect(_on_video_finished) func _on_video_finished(): print("视频播放完毕")
三、替代方案
- 若GIF拆分帧太麻烦,可直接在Godot资源库搜索安装
GIFPlayer第三方插件,用插件提供的节点一键播放GIF。 - 若视频出现编码不兼容无法播放的情况,用FFmpeg等工具把视频转成Godot支持的编码格式即可。
内容的提问来源于stack exchange,提问作者Coding_Guy
相关产品推荐
相关产品推荐

