项目中要实现的一个功能的简易版,搞了好久终于弄出来了。
接下来是保姆级教程
这个是hierarchy面板你需要设置的。clips(空对象)下面放你需要播放的视频(多个vedioplayer)
你必须设置vedioclip(在你的asset里已经转码了的视频,怎么转码在我另外一篇文章里),target texture(在asset里新建一个render texture,我是命名为clip,拖进来)这两个属性。(记住所有视频的target texture都要是同一个)
接着,新建一个canvas,里面加入raw image(用于播放渲染出的render texture)相当于显示屏;一个button(交互功能的按钮要勾选),一个控制播放的VedioManager(空对象),用来挂脚本。
rawimage对象的rawimage组件的texture需要挂上clip,才能确保它可以播放东西。还有strech那边设置成点开后右下角那个。
using UnityEngine;
using UnityEngine.Video;
using UnityEngine.UI;
using System.Collections;
public class VideoPlayerController : MonoBehaviour
{
public VideoPlayer[] videoPlayers; // 存储所有Video Player组件
public RenderTexture renderTexture; // 存储Render Texture
public Button playButton; // 存储UI按钮
private int currentVideoIndex; // 当前播放视频的索引
void Start()
{
// 随机选择一个视频开始播放
currentVideoIndex = Random.Range(0, videoPlayers.Length);
PlayVideo(currentVideoIndex);
// 确保按钮能够响应点击事件
if (playButton != null)
{
playButton.onClick.AddListener(GoToNextVideo);
}
}
// 播放指定索引的视频
void PlayVideo(int index)
{
// 停止所有视频
foreach (VideoPlayer player in videoPlayers)
{
player.Pause();
}
// 播放选中的视频
videoPlayers[index].Play();
currentVideoIndex = index; // 更新当前视频索引
}
// 点击事件处理,跳转到下一个视频
public void GoToNextVideo()
{
// 随机选择下一个视频的索引
int nextIndex;
if (videoPlayers.Length > 1)
{
do
{
nextIndex = Random.Range(0, videoPlayers.Length);
} while (nextIndex == currentVideoIndex);
}
else
{
nextIndex = 0; // 如果只有一个视频,总是播放这一个
}
PlayVideo(nextIndex);
}
}
记得把所有脚本需要的东西拖进来。(脚本已经在start里给button 自动添加监听了(evensystem记得要有)所以button的onclick就不需要再设置一次了)
总结,总体思路就是通过把rawimage变成一个显示屏,rendertexture是重要的渲染结果,vedioplayer把你的视频渲染到rendertexture上,然后通过脚本控制,实现随机选择一个视频进行渲染然后赋给rendertexture,再在rawimage上面播放。