Unity中两种播放器

这篇具有很好参考价值的文章主要介绍了Unity中两种播放器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Animator动画播放器

1.简单搭建UI,通过Slider来控制Cube当前状态动画的播放

unity 播放动画,Unity,unity,游戏引擎,c#,动画

2.给Cube加上Animator组件,做两个简单的动画(随便做个来回移动的动画就行),注意要关闭动画的循环播放

unity 播放动画,Unity,unity,游戏引擎,c#,动画

unity 播放动画,Unity,unity,游戏引擎,c#,动画

 3.给摄像机挂在脚本,并拖拽对应组件

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SliderAni : MonoBehaviour
{
    public static Animator ani;
    public Slider ani_Slider;//滑动条
    public Button play;//播放按钮
    public Button pause;//暂停按钮
    public Button replay;//重播按钮
    public Button nextplay;//播放下一个动画按钮
    public static bool isStop = true;
    public List<AnimationClip> t = new List<AnimationClip>();//记录对应动画控制器中的所有动画片段
    int index = 0;
    void Start()
    {
        ani = GameObject.Find("Cube").GetComponent<Animator>();
        AnimationClip[] clip = ani.runtimeAnimatorController.animationClips;
        foreach(AnimationClip item in clip)
        {
            t.Add(item);
        }
        play.onClick.AddListener(PlayOnClickBtn);//添加监听事件
        pause.onClick.AddListener(PauseOnClickBtn);
        replay.onClick.AddListener(RePlayOnClickBtn);
        nextplay.onClick.AddListener(NextPlayOnClickBtn);
        ani_Slider.minValue = 0;
        ani_Slider.maxValue = clip[0].length;
        ani_Slider.value = 0;
        ani.Play("run", 0, 0);
    }
    private void Update()
    {
        ChangeName();
    }
    public void ChangeName()
    {
        if (isStop)
        {
            if (index == 0)
            {
                ani_Slider.value = ani.GetCurrentAnimatorStateInfo(0).normalizedTime * t[index].length;
            }
            if (index == 1)
            {
                ani_Slider.value = ani.GetCurrentAnimatorStateInfo(0).normalizedTime * t[index].length;
            }
        }
        else
        {
            ani.Play(t[index].name, 0, ani_Slider.value / t[index].length);
        }
    }
    public void PlayOnClickBtn()
    {
        ani.speed = 1;
    }
    public void PauseOnClickBtn()
    {
        ani.speed = 0;
    }
    public void RePlayOnClickBtn()
    {
        ani.Play(t[index].name, 0, 0f);
        ani.speed = 1;
    }
    public void NextPlayOnClickBtn()
    {
        index = 1;
        ani_Slider.minValue = 0;
        ani_Slider.maxValue = t[index].length;
        ani_Slider.onValueChanged.RemoveAllListeners();
        ani.Play("run2", 0, 0f);
    }
}

unity 播放动画,Unity,unity,游戏引擎,c#,动画

 4.给Slider挂载脚本

using UnityEngine;
using UnityEngine.EventSystems;

public class Test : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        SliderAni.ani.speed = 0;
        SliderAni.isStop = false;
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        SliderAni.ani.speed = 1;
        SliderAni.isStop = true;
    }
}

5.运行Unity即可文章来源地址https://www.toymoban.com/news/detail-724653.html

二、Video Player视频播放器

1.搭建场景

unity 播放动画,Unity,unity,游戏引擎,c#,动画

 2.RawImage游戏对象的Raw Image组件和Video Player组件添加同一个Render Texture(可在Project中创建),给Video Player赋值视频

unity 播放动画,Unity,unity,游戏引擎,c#,动画

3.在Dropdown游戏对象上设置视频倍数

unity 播放动画,Unity,unity,游戏引擎,c#,动画 

4.将脚本挂载到Slider游戏对象上,并赋值对应参数

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
using UnityEngine.EventSystems;


public class VideoPlayerController : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public VideoPlayer videoPlayer;
    public Slider progressBar;
    public Dropdown speedDropdown;
    public Button playBt;
    public Button pauseBt;

    private bool isDragging;

    void Start()
    {
        videoPlayer.loopPointReached += OnVideoFinished;
        playBt.onClick.AddListener(PlayVideo);
        pauseBt.onClick.AddListener(PauseVideo);
        speedDropdown.onValueChanged.AddListener(ChangePlaybackSpeed);
    }

    void Update()
    {
        if (!isDragging && videoPlayer.isPlaying && progressBar.value < 1f)
        {
            // 更新进度条的值
            progressBar.value = (float)(videoPlayer.time / videoPlayer.clip.length);
        }
    }

    private void PlayVideo()
    {
        videoPlayer.Play();
    }

    private void PauseVideo()
    {
        videoPlayer.Pause();
    }
    //拖动滑动条后暂停播放视频再改变视频的播放时间,当行为被触发时执行一次
    public void OnPointerDown(PointerEventData eventData)
    {
        isDragging = true;
        float progress = progressBar.value;
        videoPlayer.time = progress * videoPlayer.clip.length;
        progressBar.value = (float)(videoPlayer.time / videoPlayer.clip.length);//更新进度条的值
    }
    public void OnPointerUp(PointerEventData eventData)
    {
        isDragging = false;
        videoPlayer.Play();
    }
    //当行为被触发时会持续执行
    public void OnDrag(PointerEventData eventData)
    {
        // 拖动进度条改变视频播放进度
        float progress = progressBar.value;
        videoPlayer.time = progress * videoPlayer.clip.length;
    }

    public void OnVideoFinished(VideoPlayer vp)
    {
        // 视频播放完成,可根据需要进行操作
    }
    public void ChangePlaybackSpeed(int value)
    {
        // 获取选择的倍速值
        string selectedSpeedString = speedDropdown.transform.GetChild(0).GetComponent<Text>().text;

        // 解析倍速值
        float selectedSpeed;
        if (float.TryParse(selectedSpeedString, out selectedSpeed))
        {
            // 设置播放速度
            videoPlayer.playbackSpeed = selectedSpeed;
            print(videoPlayer.playbackSpeed);
        }
    }
}

 unity 播放动画,Unity,unity,游戏引擎,c#,动画

5.运行Unity即可

到了这里,关于Unity中两种播放器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity零基础到进阶 ☀️| 视频播放器 Video Player组件 详解

    🎬 博客主页:

    2024年02月13日
    浏览(50)
  • Unity 视频播放器,基于VideoPlayer,实现滑动进度条,显示视频时长,全屏显示,音量调节

    unity播放视频的方式有很多种,但即轻量又好用的,还是unity自带的VideoPlayer,但没有视频基础操作的UI组件,本篇带大家对视频的播放,以及UI组件的实现 效果展示: Unity带UI操作,视频播放器   DEMO下载: https://gitee.com/jacobkay/videoplayer 一、安装方式 1、下载文件 2、将文件拖

    2024年02月02日
    浏览(53)
  • Qt图片定时滚动播放器+透明过渡动画

    Qt图片浏览器 QT制作一个图片播放器 Qt中自适应的label+pixmap充满窗口后,无法缩小只能放大 Qt的动画类修改透明度来实现上下两张图片的切换效果 解决:[QWidget::paintEngine: Should no longer be called QPainter::begin: Paint device returned engine == 0, type: 1] 可以显示jpg、jpeg、png、bmp。可以从电脑

    2024年02月15日
    浏览(43)
  • [MAUI 项目实战] 手势控制音乐播放器(三): 动画

    @ 目录 吸附动画 确定位置 平移动画 回弹动画 使用自定义缓动函数 多重动画 点击动画 项目地址 上一章节我们创建了手势容器控件PanContainer,它对拖拽物进行包装并响应了平移手势和点击手势。 拖拽物现在虽然可以响应手势操作,但视觉效果较生硬,一个优秀的设计要求

    2023年04月09日
    浏览(39)
  • wpf下RTSP|RTMP播放器两种渲染模式实现

    在这篇blog之前,我提到了wpf下播放RTMP和RTSP渲染的两种方式,一种是通过控件模式,另外一种是直接原生RTSP、RTMP播放模块,回调rgb,然后在wpf下渲染,本文就两种方式做个说明。 以大牛直播SDK的Windows平台SmartPlayer为例,我们先说第一种通过控件模式,控件模式,非常简单:

    2024年04月15日
    浏览(31)
  • Spine2D骨骼动画播放器 - 微信小程序版

    SpinePlayer 2D骨骼动画播放器 - 微信小程序版 可用于播放 Spine 导出的动画文件。支持版本: 3.8 、 4.1 (这两个版本的官方资源测试通过) 动画师:K完动画,交给领导审核。对方不在电脑边。又不想浪费时间录一大堆GIF。 动画师:动画导给开发,他代码有BUG非说我导出有问题

    2024年02月09日
    浏览(45)
  • 用VLC开发视频播放器/组件(两种方式:libVLC / VLC-Qt)

    MSVC-2015 Qt 5.14.2 QCreator 参考:心流剑 libVLC 各版本 下载链接 我的下载版本为:3.0.11 sdk/lib文件夹目录 qmake vlc 部分的配置(路径根据自己的修改) 只需要 : libvlc.lib、libvlccore.lib 把 plugins 文件夹、libvlc.dll、libvlccore.dll 复制到 bin_Debug / bin_Release VLC-Qt 下载地址 参考链接1:链接

    2024年02月12日
    浏览(90)
  • csf格式手机播放器(安卓csf格式播放器)

    手机播放视频文件的方法: 1.使用手机自带的安卓播放器播放即可。 2.如果您的手机不支持所播放的视频文件格式,请下载第三方视频播放器播放。播放这种格式,需要下载一个CSF转化器的CSF编译软件,软件名字叫ScenicEditor。 另外也可以直接用格式工厂转换,将CSF直接转换成

    2024年02月10日
    浏览(52)
  • Android 13.0 系统多个播放器app时,设置默认播放器

     在13.0的系统产品开发中,对于在系统中有多个播放器的时候,这时候如果调用代码打开播放器,会出现多个播放器列表让用户 选择启动哪个播放器,所以产品开发需求需要设置默认播放器,当打开播放器的时候,就直接打开播放器就可以了,所以就需要 了解查询播放器列

    2024年02月08日
    浏览(67)
  • Android 中封装优雅的 MediaPlayer 音频播放器,支持多个播放器

    Android 中封装优雅的 MediaPlayer 音频播放器,支持多个播放器实例的示例: 上述代码中,使用 getInstance() 方法获取 AudioPlayer 的单例对象,参数传入 Context 对象。 在 getInstance() 方法中判断单例对象是否为空,如果为空则创建新的 AudioPlayer 对象,否则返回已有的单例对象。 这样

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包