Unity中使用Handheld.PlayFullScreenMovie实现指定比例带控制非全屏视频播放
Handheld.PlayFullScreenMovie 是Unity专为移动平台设计的全屏专属播放接口,本身不支持自定义播放区域,控制栏也由系统原生提供无法定制,因此无法实现你要的指定区域播放、自定义控制功能。你可以使用Unity自带的VideoPlayer组件实现需求,具体步骤如下:
实现步骤
1. 基础UI与资源准备
- 在你的UI画布下新建RawImage控件,调整它的RectTransform尺寸、位置为你需要的正方形/指定矩形区域
- 新建对应比例的RenderTexture(如果是正方形播放可以设为1024*1024,可根据清晰度需求调整参数),将该RenderTexture赋值给RawImage的
Texture属性
2. VideoPlayer组件配置
- 给场景内任意游戏对象挂载
VideoPlayer组件 - 将你的视频文件拖入VideoPlayer的
Video Clip字段 - VideoPlayer的
Render Mode选择Render Texture,并把刚才创建的RenderTexture赋值给Target Texture字段
3. 自定义控制功能实现
你可以自己在UI上添加播放/暂停、快进、快退、进度条等控件,通过以下代码实现控制逻辑:
using UnityEngine; using UnityEngine.Video; using UnityEngine.UI; public class CustomVideoController : MonoBehaviour { public VideoPlayer targetVideoPlayer; public Slider progressSlider; // 快进快退步长,单位为秒 private float skipOffset = 5f; void Start() { // 视频准备完成后初始化进度条总长度 targetVideoPlayer.prepareCompleted += (player) => { progressSlider.maxValue = (float)player.length; }; } void Update() { // 播放时同步进度条显示 if (targetVideoPlayer.isPlaying) { progressSlider.value = (float)targetVideoPlayer.time; } } // 切换播放/暂停状态 public void TogglePlayPause() { if (targetVideoPlayer.isPlaying) targetVideoPlayer.Pause(); else targetVideoPlayer.Play(); } // 快进 public void FastForward() { targetVideoPlayer.time = Mathf.Min((float)targetVideoPlayer.time + skipOffset, (float)targetVideoPlayer.length); } // 快退 public void FastBackward() { targetVideoPlayer.time = Mathf.Max((float)targetVideoPlayer.time - skipOffset, 0); } // 停止播放 public void StopPlay() { targetVideoPlayer.Stop(); progressSlider.value = 0; } // 拖动进度条跳转播放位置 public void OnProgressDrag() { if (!targetVideoPlayer.isPrepared) return; targetVideoPlayer.time = progressSlider.value; } }
4. 比例适配设置
如果需要固定正方形比例播放,直接锁定RawImage的宽高比为1:1即可。如果需要裁剪视频适配正方形,可调整VideoPlayer的Aspect Ratio属性为Fit Vertically或者Fit Horizontally,多余画面会自动裁剪,刚好填满你设置的正方形播放区域。
内容的提问来源于stack exchange,提问作者karthik keyan
相关产品推荐
相关产品推荐

