【Unity声音与视频播放】播放声音视频、代码控制、UI播放视频

这篇具有很好参考价值的文章主要介绍了【Unity声音与视频播放】播放声音视频、代码控制、UI播放视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

闲谈:

游戏开发比普通软件开发难也是有原因的,第一 游戏功能需求变化多样内部逻辑交错纵横, 而软件相对固定,无非也就是点击跳转、数据存储 第二,游戏需要很多3D数学知识、物理知识,最起码得有高中物理的基础,力、向量、射线,除了这些数据存储一样不少

但是,心态要放平,愚公移山乐此不疲的态度,一点点加,一点点玩就行了!现查现学,现学现用,用完就忘是常态!

Unity 声音控制要根据需求来说。每个项目需求都不一样!

今天实现一个撞金币并且发出声音的业务需求!

场景导入声音到仓库

直接把声音拖到Unity  文件夹就行

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

然后播放声音的实现需要两个组件,一个是听到声音组件,整个场景只能有一个,一般都在摄像机挂在好了AudioListener

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

另一个就是AudioSource,这个组件就像一个播放器,里面指定一个声音片段即可播放。也有对应的类来控制它的一切。

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

当你播放的声音很多的时候,可以创建多个这样的组件,也可以用一个组件,通过代码切换Audioclip,来实现播放不同的声音。但是也有些声音需要同时播放,这些Unity 在类里面都考虑到了,Playoneshot()就是叠加播放。

简单了解对应类

  1. 声音组件AudioSource类(可以存储声音播放组件,用来播放和控制声音)

  2. AudioClip类 声音片段(用来存储音频),将来可以赋值给AudioSource.clip实现音频切换

一、播放声音的函数

1.AudioSource.Play()

直接播放当前AudioSource类对象中clip的内容

// Assuming an AudioSource component is attached to the same GameObject
public class AudioPlayer : MonoBehaviour
{
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    public void PlaySound()
    {
        if (audioSource.clip != null)
        {
            audioSource.Play();
        }
    }
}

AudioSource.clip 可以从外部赋值,也可以声明变量,外部赋值,也可以用加载本地资源ResourceLoad()办法赋值!

2下面这个代码实现,自己外部指定多个音频,然后播放的时候切换音频

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

public class PlayAudio : MonoBehaviour
{
    private AudioSource audioSource;
    public AudioClip[] OneClip=new AudioClip[3];

    void Start()
    {
        //获取播放组件
        audioSource = GetComponent<AudioSource>();
    }
    //这个函数将来关联按钮
    public void PlaySound()
    {
        //把数组中存储的声音变量给声音播放组件中作为默认音频
        audioSource.clip = OneClip[0];
        if (audioSource.clip != null)
        {
            audioSource.Play();//播放组件
        }
    }
}

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

2.PlayOneShot:

PlayOneShot 方法是 Unity AudioSource 类的一个函数,它允许你在不中断当前正在播放的音频的情况下播放一个音频剪辑。这个方法特别适合用于播放短暂的声音效果,如爆炸声、点击声等。它接受两个参数:一个 AudioClip 对象和一个可选的音量倍数(float 类型),这个音量倍数会乘以 AudioSource 的音量。例如,如果你有一个音效用于玩家的跳跃动作,你可以使用 PlayOneShot 来播放这个跳跃音效,即使背景音乐已经在用同一个 AudioSource 播放。这样,跳跃音效就会与背景音乐同时播放,而不会停止或替换背景音乐。


using UnityEngine;
public class SoundManager : MonoBehaviour
{
    // 音频源组件的引用
    public AudioSource audioSource;

    // 要播放的音频剪辑
    public AudioClip jumpSound;

    void Start()
    {
        // 获取当前游戏对象上的AudioSource组件
        audioSource = GetComponent<AudioSource>();
    }

    // 用于播放跳跃声音的方法
    public void PlayJumpSound()
    {
        // 使用PlayOneShot播放jumpSound音频剪辑
        // 第二个参数是可选的,用于调整播放音量,如果省略,默认为1(即AudioSource的当前音量)
        audioSource.PlayOneShot(jumpSound, 1.0f);
    }
}

在这个例子中,audioSource 是附加到同一个游戏对象上的 AudioSource 组件的引用,jumpSound 是要播放的 AudioClip 对象。PlayJumpSound 方法通过 PlayOneShot 方法播放 jumpSound 音效,并将音量设置为 AudioSource 的当前音量。这种方式不会打断任何当前正在 AudioSource 上播放的音频。

3.PlayClipAtPoint

PlayClipAtPoint 是 Unity 中的一个静态方法,用于在 3D 空间的特定位置播放一个音频剪辑(AudioClip),而不需要音频源(AudioSource)组件。它会在指定位置创建一个临时的 AudioSource,播放音频一次,然后销毁该 AudioSource。这个方法非常适合播放不需要细致控制的瞬时音效,如爆炸声或玩家收集物品的声音。

使用 PlayClipAtPoint 方法时,你需要提供音频剪辑和一个 Vector3 位置。你还可以选择提供一个音量参数,但这不是必须的。这个方法会自动处理音频的播放和清理工作,使得你无需在场景中预先放置音频源。

using UnityEngine;

public class AudioManager : MonoBehaviour
{
    // 要播放的音频剪辑
    public AudioClip explosionSound;

    // 在3D空间中的特定位置播放音频剪辑
    public void PlayExplosionSound(Vector3 position)
    {
        // 使用PlayClipAtPoint在指定位置播放explosionSound音频剪辑
        // 第二个参数是音频的位置,第三个参数是可选的,用于调整音量,默认值是1.0
        AudioSource.PlayClipAtPoint(explosionSound, position, 1.0f);
    }
}

在这段代码中,我们有一个名为 explosionSound 的 AudioClip 变量。PlayExplosionSound 方法被调用时,它将使用 PlayClipAtPoint 方法在指定的 position 位置播放 explosionSound 音效。这个方法自动创建一个临时的 AudioSource 来播放音效,并在音效播放结束后销毁该 AudioSource。这种方式是处理不与特定游戏对象关联的音效的理想选择。

我的撞金币案例

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

public class Collision222 : MonoBehaviour
{
    // 克隆金币
    //挂在到主角上,分别检测 金币克隆区和障碍物克隆区
    //让主角去触发,金币触发器,如果触发了就开始克隆金币
    public GameObject CoinMuban;
    GameObject TempTriggerCoin;
    public Transform oneCoinParent;


    public AudioClip coinSound; // 金币音效,从外边拖拽赋值
    public AudioClip MonsterAudio;// 掉血音效,从外边拖拽赋值

    private void OnTriggerEnter(Collider other)//当我触发到别人 就把别人的碰撞器存在other里面
    {
        TempTriggerCoin = other.transform.gameObject;
        if (other.transform.gameObject.name== "TriggerCoin01")
        {

            CloneCoin();//开始克隆金币
        }

        if (other.transform.gameObject.name == "TriggerStru")
        {
            CloneStruction();//开始克隆障碍物
        }


        if (other.transform.gameObject.tag == "Coin")
        {
            //开始加分
            Debug.Log("开始加分");
            Destroy(other.transform.gameObject);
            AudioSource.PlayClipAtPoint(coinSound, other.transform.position);//临时播放,完毕销毁
        }

        if (other.transform.gameObject.tag == "Monster")
        {
            //开始加分
            Debug.Log("开始掉血");
         
        }
    }

    void CloneCoin()
    {
        for (int i = 0; i < 10; i++)
        {
            Vector3 clonePos = new Vector3(156, 0.5f, TempTriggerCoin.transform.position.z + 50+i*3);
            Debug.Log("开始克隆金币");
            GameObject.Instantiate(CoinMuban, clonePos, Quaternion.Euler(0, 0, 0), oneCoinParent);
        }       
    }
    void CloneStruction()
    {
        Debug.Log("开始克隆障碍物");
    }
}

二、 多个声音播放 

1.创建多个AudioSource组件,每个组件播放自己的clip 片段

2.多个声音Clip,但是只有一个AudioSource组件

可以用AudioSource类中公共方法修改当前组件的声音片段。 

AudioSource audioSource;

核心代码:

audioSource.clip = clip1;

 audioSource.clip = clip2;

using UnityEngine;

public class PlayMultipleAudioClips : MonoBehaviour
{
    public AudioSource audioSource; // 你的AudioSource组件
    public AudioClip clip1; // 第一个声音片段
    public AudioClip clip2; // 第二个声音片段

    void Start()
    {
        // 播放第一个声音片段
        PlaySound(clip1, 0); // 0表示从头开始播放

        // 在3秒后播放第二个声音片段
        Invoke("PlaySecondSound", clip1.length + 3.0f); // 在第一个声音片段播放结束后3秒播放第二个声音片段
    }

    void PlaySound(AudioClip clip, float startTime)
    {
        audioSource.clip = clip;
        audioSource.time = startTime;
        audioSource.Play();
    }

    void PlaySecondSound()
    {
        PlaySound(clip2, 0); // 从头开始播放第二个声音片段
    }
}

三、播放视频

视频的播放和声音播放极其类似!区别是视频播放不需要侦听组件,直接一个VideoPlayer(就是播放器组件)完成。

但是视频需要一个宿主,帮助渲染视频(这个宿主可以是3D物体、也可以是UGUI-RawImage)

视频播放在3D物体上:比如我们应该首先创建一个游戏物体,确保这个物体有Rendener组件,正常渲染。然后给这个游戏物体添加VideoPlayer组件即可。这个组件可以给任何人!

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

在UGUI上创建视频

首先创建RawImage UI物体,然后添加视频组件

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

把视频片段拖上去之后,创建一个可以渲染视频的New Render Texture

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

这个渲染类型的贴图,既需要渲染视频,作为Video Player组件的渲染器,也作为Rawimage组件的贴图。分别拖到为Video Player组件的Target Texture中,然后拖到Raw Image组件上的Texture中!

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音

这样就完成了在UI上播放视频!

剩下的和声音几乎一致了! 

拖一个视频到Assets 中,直接赋值给组件Video Clip 即可!现在游戏运行就可以播放了!

代码控制:

代码可以实现切换不同的视频进行播放。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;


public class PlayVideo : MonoBehaviour
{
    // Start is called before the first frame update
    public VideoClip[] SomeVideo = new VideoClip[10];

    VideoPlayer OneVideoComp;
    void Start()
    {
        OneVideoComp = this.GetComponent<VideoPlayer>();
        OneVideoComp.frame = 10;
    }

    private void Update()
    {
        Debug.Log(OneVideoComp.frameCount/25);
    }
//下面函数关联外部UGUI按钮
    public void ButtonClikA()
    {
        OneVideoComp.clip = SomeVideo[0];
        OneVideoComp.Play();
    }
    public void ButtonClikB()
    {
        OneVideoComp.clip = SomeVideo[1];
        OneVideoComp.Play();
  
    }
}

unityplayoneshot,Unity零基础课程,unity,游戏引擎,播放声音文章来源地址https://www.toymoban.com/news/detail-826267.html

到了这里,关于【Unity声音与视频播放】播放声音视频、代码控制、UI播放视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity基础 视频组件VideoPlayer,视频的播放与控制

    在Unity中,视频播放功能具有广泛的应用,以下是一些视频播放在Unity中的常见用途:       游戏引入和过场动画:使用视频播放可以在游戏开始或过场动画中添加引人注目的视频,为游戏制造氛围和引起玩家的兴趣。这种方式可以通过播放游戏故事、游戏背景介绍或重要情

    2024年02月10日
    浏览(40)
  • Unity点击按钮控制视频播放和暂停

    省流:整体脚本放在底部,需要可直接到底部 1、导入命名空间 2、创建变量 3、第一帧开始时调用 4、每帧调用 5、定义方法OnplayorpauseVideo 6、创建图像,添加视频播放器(Video Player)组件,把脚本放到图像,把按钮添加到脚本。 完整代码

    2024年02月03日
    浏览(49)
  • 【Springboot + Vue 视频播放web项目】解决视频播放只有声音没有画面

    使用vue-video-player作为视频播放插件,捣鼓挺久de了一堆bug之后终于能读取本地MP4视频文件,但是只有声音没有画面 前端也是能够正确地根据url找到文件,音频也是正确的 经过前端堂哥的指点,首先把上面这个url直接输入到浏览器,看能不能正常播放,结果也是只有声音没有

    2024年02月16日
    浏览(46)
  • Unity 关于声音(AudioSource)的播放、结束、暂停、继续、声音大小

            在Unity开发的过程中用到声音(AudioSource)实现一些声音的效果是比不可少的 接下来看看关于声音(AudioSource)的内容吧          截图的时候忘记了 那Volume是调节声音大小的0-1   0表示没有声音,1表示完全音量 (懒得再截图了) 声音(AudioSource)的播放、结

    2024年02月11日
    浏览(56)
  • vue+萤石云ezuikit.js播放直播流视频(声音自动关闭,添加控件,多个视频播放)

    vue+萤石云ezuikit.js播放直播流视频(声音自动关闭,添加控件,多个视频播放) 实例使用 引入最新的ezuikit.js 看过官网的文档都知道萤石云的文档是多么的‘善解人意’哈,懂得都懂,很多东西没有说清楚的,只能靠自己去摸索或者看他们的demo来一点点测试实现 官网地址:

    2024年02月04日
    浏览(133)
  • Qt6 QMediaPlayer播放视频没有声音或者无法播放声音报错handleSourceError: 0x8007007B解决方法(无需下载解码器)

    Qt5到Qt6时变动了许多类QMediaPlayer也在其中。曾经只需要这样即可播放视频。 而如今需要这样 这样写完后运行,发现视频可以播放了,但是发现了个问题,播放的视频没有声音。打开浏览器搜索,发现好像没有类似问题的文章。至少笔者没找到太多类似的。有也是大部分都是

    2024年02月13日
    浏览(82)
  • 【方便的Opencv】实现播放有声音的视频+附带图片生成gif

            因为最近老是用到Opencv这个库来处理视频,过程遇到了非常多的细节问题,最后把成品干脆直接放到博客来,这样以后可以随时过来取用。         Opencv读取视频没有声音的原因是因为:视频是分为图像与音频的,Opencv仅仅只是读取了一帧帧图像,并没有读取

    2023年04月09日
    浏览(46)
  • Unity 之利用Audio Source(音频源)组件用于播放声音

    Unity中的Audio Source(音频源)是一个用于播放声音的组件,通常附加到游戏对象上,以便在游戏中播放音频效果、音乐或对话。以下是Audio Source的详细介绍: 添加Audio Source : 要在Unity中使用Audio Source,首先需要将其附加到一个游戏对象上。通常,您可以选择场景中的一个空游

    2024年02月09日
    浏览(52)
  • 【双核浏览器ChromeCore播放视频出错,重影、有声音但黑屏、缺角······】

        目录 一、【问题】 二、【解决方法】   1、找客服【首选】  2、去官网下载新版本 安装 (或者找客服要安装包)           这两天用 双核浏览器 打开哔哩哔哩播放视频时,却发现 页面很卡、视频播放不正常 (黑屏,或者加载半天也没反应,切换页面后,视频上面还

    2023年04月09日
    浏览(38)
  • Vue实现video视频倍速播放、调节声音、拖动进度条、生成智能字幕等

    前言介绍 在现代化的网站中,视频播放已经成为了不可或缺的一部分。而对于视频播放的需求也越来越多样化,比如倍速播放、调节声音、拖动进度条、生成智能字幕等。本文将介绍如何使用Vue实现这些功能。 组件实现思路 首先,我们需要一个video标签来播放视频。然后,

    2024年02月11日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包