如何在Unity中设置时间延迟让按钮在视频播放完毕后显示
Unity/C# 交互式视频按钮延迟显示实现方案
有两种成熟的实现方式可以满足你的需求:
方案1:监听视频播放完成事件(最推荐)
该方案和视频实际播放进度绑定,不会受视频卡顿、变速播放的影响,逻辑最准确:
- 首先确认你的视频使用Unity官方
VideoPlayer组件播放 - 提前将需要控制的跳转按钮在Inspector面板取消勾选,默认设置为隐藏状态
- 编写C#脚本挂载到
VideoPlayer所在的游戏对象上,代码示例如下:
using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; public class ShowButtonAfterVideo : MonoBehaviour { // Inspector里拖拽赋值你要显示的按钮 public Button targetButton; private VideoPlayer _videoPlayer; void Start() { _videoPlayer = GetComponent<VideoPlayer>(); // 注册视频播放完成回调事件 _videoPlayer.loopPointReached += OnVideoPlayFinished; } // 视频播放到末尾时自动触发该方法 void OnVideoPlayFinished(VideoPlayer vp) { targetButton.gameObject.SetActive(true); } }
方案2:固定时长延迟显示
如果你只需要固定延后多少秒显示按钮,和视频进度无关,可以用该方案:
- 同样先将按钮默认设置为隐藏状态
- 编写C#脚本挂载到任意持久存在的游戏对象上,代码示例如下:
using UnityEngine; using UnityEngine.UI; public class DelayShowButton : MonoBehaviour { public Button targetButton; // 这里设置延后多少秒显示按钮,单位为秒 public float delayTime = 15f; void Start() { // 方法1:用Invoke实现 Invoke(nameof(ShowTargetButton), delayTime); // 方法2:用协程实现,二选一即可 // StartCoroutine(ShowButtonCoroutine()); } void ShowTargetButton() { targetButton.gameObject.SetActive(true); } /* IEnumerator ShowButtonCoroutine() { yield return new WaitForSeconds(delayTime); targetButton.gameObject.SetActive(true); } */ }
注意:如果你的按钮是需要在视频播放完毕后才显示交互,优先使用方案1,避免视频时长调整后还要手动修改延迟参数
内容的提问来源于stack exchange,提问作者geoffrey wilson
相关产品推荐
相关产品推荐

