如何在Ursina引擎中实现视频纹理播放后停止循环并移除
Ursina引擎实现开场视频播放完毕后自动移除
在Ursina中用视频作为Entity纹理时,直接给Entity加loop=False参数无效,因为该参数不属于Entity的属性,需要直接操作视频纹理对象控制循环,同时监听播放状态,在结束时销毁实体。
你的原始代码
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController app = Ursina() # ==================================Windows=============================================== window.fullscreen_resolution = (1920, 1080) window.fullscreen = True window.exit_button.visible = False #================================== menu ================================================ video = Entity(model='cube', texture='assets/ui/intro.mp4', parent=camera.ui, scale=(1.79, 1, 0)) videoaudio = Audio('assets/ui/intro.mp3') # ================================= Hangar A ============================================= hangara = Entity(model='assets/map/hangara.fbx', collider='mesh') app.run()
解决方法
- 获取视频纹理对象,设置其
loop属性为False - 添加
update函数,每帧检查视频播放进度,结束时销毁视频实体与音频对象
修改后的完整代码:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController app = Ursina() # ==================================Windows=============================================== window.fullscreen_resolution = (1920, 1080) window.fullscreen = True window.exit_button.visible = False #================================== menu ================================================ video = Entity(model='cube', texture='assets/ui/intro.mp4', parent=camera.ui, scale=(1.79, 1, 0)) # 关闭视频循环 video.texture.loop = False videoaudio = Audio('assets/ui/intro.mp3') def update(): # 检查视频是否播放完毕 if video.texture.time >= video.texture.duration: destroy(video) destroy(videoaudio) # ================================= Hangar A ============================================= hangara = Entity(model='assets/map/hangara.fbx', collider='mesh') app.run()
说明
- 视频纹理的
time属性实时更新播放进度,duration为视频总时长,当time >= duration时表示播放完成 destroy()函数会从场景中移除实体并释放资源,避免视频和音频持续占用内存
内容的提问来源于stack exchange,提问作者ʄօʀɢɨʋɛ ʍɛ
相关产品推荐
相关产品推荐

