Unity中两种播放器

一、Animator动画播放器

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

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

 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);
    }
}

 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即可

二、Video Player视频播放器

1.搭建场景

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

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

 

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);
        }
    }
}

 

5.运行Unity即可

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity的Slider Drag是指在游戏使用Slider(滑动器)组件时,可以通过拖动滑块来改变其数值。 Slider是Unity提供的用于处理数值的UI组件,它通常用于调整游戏的参数或设置。当我们将Slider添加到游戏场景后,可以通过编辑器或脚本来设置其最小值、最大值以及初始值。 当玩家在游戏运行时通过鼠标或触摸屏点击并拖动滑块时,Slider Drag的功能就启动了。玩家可以根据需要拖动滑块左右移动,以调整Slider的数值。当滑块被拖动时,数值会实时显示,并且会触发相应的事件,可以通过监听这些事件来执行特定的逻辑。 Slider Drag功能的应用场景很广泛。比如在游戏设置界面,可以使用Slider Drag调整游戏的音量、音效或画面亮度等参数;在角色属性界面,可以通过Slider Drag来调整角色的生命值或能量值;在游戏内的其他界面,也可以使用Slider Drag来调整道具的数量或其他可调的数值。 通过Slider Drag,玩家可以通过直观的操作来修改游戏的数值,提升了游戏的可玩性和用户体验。同时,开发者可以通过监听Slider Drag事件,实时更新游戏的相应数据和逻辑,使得游戏能够实时响应玩家的操作。这种交互方式在游戏开发被广泛应用,使得游戏更加灵活、可定制和易于玩家操作。 ### 回答2: Unity Slider Drag是Unity游戏开发引擎用于实现滑动条拖动的功能。滑动条是游戏界面常见的控件,可以用于调整数值、音量、进度等。在Unity,我们可以通过以下步骤实现Slider的拖动功能: 首先,在Unity的编辑器创建一个滑动条控件,可以使用UGUI的Slider组件。 然后,在代码获取Slider组件的引用,可以通过Find或者GetComponent等方法。 接下来,我们可以通过给Slider组件添加事件回调的方式来实现拖动事件的响应。通过使用AddListener方法,我们可以向Slider的回调函数添加相应的处理逻辑。 在处理逻辑,我们可以通过监听OnValueChanged事件来获取Slider的数值变化。当拖动条的值发生改变时,会触发这个事件,并将新的数值作为参数传递给回调函数。 在回调函数,我们可以根据Slider的值来更新游戏的相关内容,比如更新进度条的显示、调整游戏的音量大小等。 最后,我们需要将Slider组件添加到游戏界面的适当位置,以便玩家能够看到并进行拖动操作。 综上所述,Unity Slider Drag即是指在Unity游戏开发使用滑动条控件Slider,并通过其拖动功能实现相应的调整数值、音量、进度等的功能。 ### 回答3: Unity Slider Drag 是 Unity 引擎的滑动器拖动功能。滑动器是一种常见的用户界面元素,用于让用户在指定的范围内拖动滑块来选择一个值。 在 Unity ,我们可以使用 Unity UI 或 UGUI 来创建滑动器,并为其添加拖动功能。首先,我们需要创建一个滑动器对象,并将其放置在适当的位置。然后,我们可以通过设置滑动器的最小值和最大值来定义滑动的范围。 当用户拖动滑块时,我们可以通过监听滑动器的事件来获取滑动的数值。在 Unity ,我们可以使用滑动器的 OnValueChanged 事件来实现这个功能。当滑块的数值发生改变时,该事件会被触发,我们可以在事件回调函数获取到最新的数值。 通过获取到滑块的数值,我们可以在游戏做出相应的处理。比如,我们可以根据滑块的数值来改变对象的位置、大小、透明度等属性,实现滑块控制游戏的某些功能。滑块的拖动功能可以给用户带来更好的交互体验,并增加游戏的可玩性。 总之,Unity Slider Drag 是 Unity 引擎用于实现滑动器拖动功能的一种机制。通过监听滑动器的事件,我们可以获取到滑块的数值,并在游戏做出相应的处理。这种功能可以为游戏增加更好的用户交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冷的晚风

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值