精简的记录一下简单过场动画脚本。不会进行过多讲解了。
前置
需要一个GameObject,装载必须组件Video Player和Raw Image。
这里是把GameObject作为GUI了所以有Canvas Renderer.Raw Image和Video Player都需要Render Texture作为属性,前者是象征后者是投射对象。
简单来说,Video Player会把Video Clip投射到对应Render Texture上,然后Raw Image是它的载体。
Render Texture可以直接在资源管理面板中右键创建。
脚本
using UnityEngine;
using UnityEngine.Video;
/// <summary>
/// 挂载在具有VideoPlayer组件的物体上,用于实现基本过场动画功能
/// </summary>
[RequireComponent (typeof(VideoPlayer))]
public class CutScene : MonoBehaviour
{
private VideoPlayer videoPlayer;
private GameObject skipTip;
public bool allowToSkip;//允许跳过
private bool skipTipExist = false;//跳过提示已存在
public float skipTipExistTime = 2f;//跳过提示持续时间
private float curSkipTipExistTime = 0f;//当前跳过提示时间
private void Awake()
{
videoPlayer = GetComponent<VideoPlayer>();
skipTip = transform.GetChild(0).gameObject;//获取方式要具体看情况
}
private void Start()
{
skipTip.SetActive(false);//跳过提示默认初始为关闭
}
private void Update()
{
CloseWhenEnd();
Skip();
}
public void Play()//播放(用于外联)
{
videoPlayer.Play();
}
private void CloseWhenEnd()//播放结束时关闭(提前一帧)
{
if (videoPlayer.frame == (long)videoPlayer.frameCount - 1)//通过当前与视频帧数比较
{
gameObject.SetActive(false);
}
}
private void Skip()//“跳过动画”功能
{
if(skipTipExist)//如果跳过提示存在则一直计时
{
curSkipTipExistTime += Time.deltaTime;
if (curSkipTipExistTime > skipTipExistTime)
{
skipTipExist = false;
skipTip.SetActive(false);
}
}
if(Input.GetKeyDown(KeyCode.E)&&skipTipExist)//如果玩家在提示存在期间按下E(这段一定要置于下一段之前!)
{
gameObject.SetActive(false);
}
if(Input.anyKeyDown&&!skipTipExist)//玩家按下任意键且跳过提示不存在
{
curSkipTipExistTime = 0f;
skipTip.SetActive(true);
skipTipExist = true;
}
}
}
代码内容包含跳过动画和自动结束播放的功能。
挂载在对应的GameObject上即可。
我写的其实比较简单随意,请大家自行修改。
只是简单分享一下。最近在准备GGJ 2024,怕到时候用到顺便记录一下。
扫描二维码关注公众号,回复:
17492583 查看本文章
