Notifications
Article
[原创] VideoPlayer中seek frame的一些方法
Published 6 months ago
138
15
--- 转自AR4DS发表于Unity中国论坛
我想实现第一帧视频定位到第20帧的功能:
第一版:不行……
public VideoPlayer myVideo; void Start () { myVideo.frame = 20L; }
第二版:不行……
public VideoPlayer myVideo; void Start () { myVideo.Prepare (); myVideo.frame = 20L; }
第三版:貌似可以了,不过加载时间有点问题
public VideoPlayer myVideo; void Start () { StartCoroutine (PrepareVideo (myVideo, 20L)); } IEnumerator PrepareVideo (VideoPlayer video, long frame) { video.Prepare (); yield return new WaitForSeconds(3f); video.frame = frame; }
最终版
public VideoPlayer myVideo; IEnumerator PrepareVideo (VideoPlayer video, long frame) { video.Prepare (); while (!video.isPrepared) { yield return null; } video.frame = frame; }
最终版的最大优势就是可以在 Update 随时加载释放
当我们调用video.Stop();或video.gameObject.SetActive(false);资源就会被释放
这种释放方式也是个坑啊。。
另外说一下VideoPlayer倒播功能:
一般都是speed = -1;搞定,然而这这个组件没这功能,要自己实现……
public VideoPlayer myVideo; IEnumerator PlayBackwards () { int _frame = (int)myVideo.clip.frameCount; while (_frame > 0) { --_frame; --videoTuijin.frame; yield return new WaitForEndOfFrame (); } }
注意这里的循环条件,我用_frame替代videoTuijin.frame是为了提高效率,因为VideoPlayer的frame{get}读取特别耗性能
所以这样我们差不多就能做个简单的播放器了吧
Tags:
Jason like
Designer
12
Comments
花花
Staff
2 months ago
testhua
ee
1
花花
Staff
3 months ago
testhua
gggg
1
花花
Staff
3 months ago
testhua
good
0
花花
Staff
3 months ago
testhua
good
0
花花
Staff
3 months ago
testhua
good
0