【Unity基础】AudioSource 常用方法总结

在 Unity 中,AudioSource 组件用于控制音频的播放和管理。以下是常用的 AudioSource 控制方法及其说明。
1. 播放和暂停音频
Play():开始播放音频,如果是从暂停的地方继续播放,可以直接调用。Pause():暂停当前播放的音频。Stop():完全停止当前播放的音频并重置播放进度。
AudioSource audioSource = GetComponent<AudioSource>();
audioSource.Play(); // 播放音频
audioSource.Pause(); // 暂停音频
audioSource.Stop(); // 停止音频
2. 设置播放时间
time:获取或设置音频的当前播放时间(以秒为单位)。你可以用它来设置从指定的时间点开始播放。
audioSource.time = 10f; // 从10秒开始播放
3. 循环播放
loop:控制音频是否循环播放。设为true时,音频会循环播放,直到调用Stop()。
audioSource.loop = true; // 启用循环播放
audioSource.loop = false; // 禁用循环播放
4. 音量控制
volume:控制音频的音量,范围是 0 到 1。
audioSource.volume = 0.5f; // 设置音量为50%
5. 音高控制
pitch:调整音频的播放速度和音高。范围通常是 0.1 到 3。
audioSource.pitch = 1.2f; // 提高音高并加速播放
6. 静音
mute:控制是否静音音频。
audioSource.mute = true; // 静音
audioSource.mute = false; // 恢复音量
7. 播放短音效
PlayOneShot():用于播放短音效,不会打断当前的背景音乐。
audioSource.PlayOneShot(someAudioClip); // 播放音效
8. 检查音频是否正在播放
isPlaying:返回一个布尔值,表示音频是否正在播放。
if (audioSource.isPlaying)
{// 音频正在播放
}
else
{// 音频没有播放
}
9. 获取音频数据
GetOutputData()和GetSpectrumData():获取音频的输出数据和频谱数据,用于音频可视化和分析。
float[] data = new float[256];
audioSource.GetOutputData(data, 0); // 获取音频的输出数据
完整代码示例
下面的代码示例展示了如何结合使用 AudioSource 的常用控制方法来实现一个简单的音频管理器。该管理器能够播放、暂停音频、从指定时间点播放音频,控制音量、音高,以及播放短音效等功能。
using UnityEngine;public class AudioManager : MonoBehaviour
{public AudioSource audioSource; // 用于播放音频的 AudioSource 组件public AudioClip backgroundMusic; // 背景音乐public AudioClip shortEffect; // 短音效public float startTime = 10f; // 从10秒开始播放背景音乐private void Start(){// 获取 AudioSource 组件audioSource = GetComponent<AudioSource>();audioSource.clip = backgroundMusic; // 设置背景音乐}private void Update(){// 按P键播放或暂停音乐if (Input.GetKeyDown(KeyCode.P)){if (audioSource.isPlaying){audioSource.Pause();}else{audioSource.Play();}}// 按S键从指定时间点播放音乐if (Input.GetKeyDown(KeyCode.S)){audioSource.time = startTime; // 设置从10秒开始播放audioSource.Play(); // 播放音乐}// 按L键启用循环播放if (Input.GetKeyDown(KeyCode.L)){audioSource.loop = true; // 启用循环播放}// 按K键禁用循环播放if (Input.GetKeyDown(KeyCode.K)){audioSource.loop = false; // 禁用循环播放}// 按M键静音或取消静音if (Input.GetKeyDown(KeyCode.M)){audioSource.mute = !audioSource.mute; // 切换静音状态}// 按V键播放短音效if (Input.GetKeyDown(KeyCode.V)){audioSource.PlayOneShot(shortEffect); // 播放短音效}// 按U键增加音量if (Input.GetKeyDown(KeyCode.U)){audioSource.volume = Mathf.Clamp(audioSource.volume + 0.1f, 0f, 1f); // 增加音量}// 按D键减少音量if (Input.GetKeyDown(KeyCode.D)){audioSource.volume = Mathf.Clamp(audioSource.volume - 0.1f, 0f, 1f); // 减少音量}// 按I键增加音高if (Input.GetKeyDown(KeyCode.I)){audioSource.pitch = Mathf.Clamp(audioSource.pitch + 0.1f, 0.1f, 3f); // 增加音高}// 按O键减少音高if (Input.GetKeyDown(KeyCode.O)){audioSource.pitch = Mathf.Clamp(audioSource.pitch - 0.1f, 0.1f, 3f); // 减少音高}}
}
代码说明:
- 播放、暂停和停止:通过
audioSource.Play(),audioSource.Pause()和audioSource.Stop()控制背景音乐的播放状态。 - 从指定时间点播放:通过
audioSource.time设置播放起始点,再调用audioSource.Play()从该点开始播放。 - 循环播放:通过
audioSource.loop控制音频是否循环。 - 音量控制:通过
audioSource.volume增减音量。 - 音高控制:通过
audioSource.pitch调整播放速度和音高。 - 静音控制:通过
audioSource.mute切换静音状态。 - 播放短音效:通过
audioSource.PlayOneShot()播放音效,不会影响背景音乐的播放。
这个示例通过键盘输入控制音频的各种操作,适合在实际项目中灵活调整音频的播放行为。
相关文章:
【Unity基础】AudioSource 常用方法总结
在 Unity 中,AudioSource 组件用于控制音频的播放和管理。以下是常用的 AudioSource 控制方法及其说明。 1. 播放和暂停音频 Play():开始播放音频,如果是从暂停的地方继续播放,可以直接调用。Pause():暂停当前播放的…...
CSS系列(25)-- 滚动优化详解
前端技术探索系列:CSS 滚动优化详解 📜 致读者:探索流畅滚动的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 滚动优化,学习如何创建流畅、高性能的滚动体验。 平滑滚动 🚀 基础设置 /* …...
CST天线设计的六大核心特点:为天线分析提供完整解决方案!
CST Studio Suite 为天线设计提供了从最初的概念评估到最终的合规性测试所需的所有功能,确保天线设计在各种环境下实现稳定通信。这一套工具覆盖了所有重要的设计阶段,帮助设计师顺利完成从概念到成品的全过程。 下面我们来看一看CST电磁仿真中天线设计…...
Ubuntu下C语言操作kafka示例
目录 安装kafka: 安装librdkafka consumer Producer 测试运行 安装kafka: Ubuntu下Kafka安装及使用_ubuntu安装kafka-CSDN博客 安装librdkafka github地址:GitHub - confluentinc/librdkafka: The Apache Kafka C/C library $ apt in…...
怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法
怎么将pdf中的某一个提取出来?传统上,我们可能通过手动截取屏幕或使用PDF阅读器的复制功能来提取信息,但这种方法往往不够精确,且无法保留原文档的排版和格式。此外,很多时候我们需要提取的内容可能涉及多个页面、多个…...
HTTP接口报错详解与解决 200,500,403,408,404
前言: 仅做学习记录,侵删 背景 当后端编写接口时,经常需要对接口使用ApiFox或者PostMan进行测试,此时就会出现各种各样的报错,一般都会包括报错编码:200,400,401等。这个状态码一般是服务器所返回的包含…...
监控IP频繁登录服务器脚本
该脚本的作用是监控IP登录失败次数,如果某个IP的登录失败次数超过设定的最大次数,则阻止该IP的进一步登录尝试。通过iptables防火墙阻止连接,当一个IP尝试登录次数超过5次时,iptables会阻止来自该IP的所有连接 #!/bin/bashfuncti…...
分布式链路追踪-03-Jaeger、Zipkin、skywalking 中的 span 是如何设计的?
开源项目 auto-log 自动日志输出 Jaeger、Zipkin 中的 spanId 是如何生成的? 在 Jaeger 和 Zipkin 这两个分布式跟踪系统中,Span ID 是通过不同的方法生成的。 下面分别介绍它们的生成方式: Jaeger 中的 Span ID 生成: 在 Ja…...
【达梦数据库】获取对象DDL
目录 背景获取表的DDL其他 背景 在排查问题时总会遇到获取对象DDL的问题,因此做以下总结。 获取表的DDL 设置disql工具中显示LONG类型数据的最大长度,避免截断: SET LONG 9999获取DDL SELECT DBMS_METADATA.GET_DDL(TABLE,表名,模式名) …...
InnoDB和MyISAM引擎优缺点和区别
nnoDB和MyISAM是MySQL数据库中常用的两种存储引擎。它们各自具有不同的特性和优势,适用于不同的应用场景。 一、InnoDB引擎: 1、它有如下特性: 1)、支持事务(ACID) 2)、支持外键约束(FOREIGN KEY const…...
文件上传知识点汇总
归纳总结一下文件上传(其实是懒得写wp) 基于Dream ZHO师傅的CTF show 文件上传篇(web151-170,看这一篇就够啦)-CSDN博客 和dota_st 师傅的ctfshow-Web1000题系列修炼(一) | dota_st 做一篇自己的总结 目录 一、什么…...
计算机网络技术基础:5.数据通信系统
一、数据通信的基本概念 1.信息 信息是对客观事物的运动状态和存在形式的反映,可以是客观事实的形态、大小、结构、性能等描述,也可以是客观事物与外部之间的联系。信息的载体可以是数字、文字、语音、图形和图像等。计算机及其外围设备产生和交换的信息…...
光谱相机在农业的应用
一、作物生长监测1、营养状况评估 原理:不同的营养元素在植物体内的含量变化会导致植物叶片或其他组织的光谱反射率特性发生改变。例如,氮元素是植物叶绿素的重要组成部分,植物缺氮时,叶绿素含量下降,其在可见光波段&a…...
高考志愿填报:如何制定合理的志愿梯度?
高考志愿填报中常见的避雷行为,深入分析了专业选择、招生政策了解、学校选择、备选方案准备以及防诈骗等方面的关键问题,并提出了针对性的建议与策略。旨在为考生和家长提供实用的指导,助力考生科学合理地填报高考志愿,避免陷入各…...
Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1)
Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1) <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res…...
webGL硬核知识:图形渲染管渲染流程,各个阶段对应的API调用方式
一、图形渲染管线基础流程概述 WebGL 的图形渲染管线大致可分为以下几个主要阶段,每个阶段都有其特定的任务,协同工作将 3D 场景中的物体最终转换为屏幕上呈现的 2D 图像: 顶点处理(Vertex Processing)阶段࿱…...
区块链详解
1. 概述 1.1 什么是区块链? 区块链是一种分布式数据库技术,它以链式数据结构的形式存储数据,每个数据块与前一个数据块相关联,形成了一个不断增长的数据链。每个数据块中包含了一定数量的交易信息或其他数据,这些数据…...
【EXCEL 逻辑函数】AND、OR、XOR、NOT、IF、IFS、IFERROR、IFNA、SWITCH
目录 AND:当所有条件都为真时返回 TRUE,否则返回 FALSE OR:当任一条件为真时返回 TRUE,否则返回 FALSE XOR:当奇数个条件为真时返回 TRUE,否则返回 FALSE NOT :反转逻辑值 IF:根…...
ubuntu下gdb调试ROS
参考: 使用VsCode进行ROS程序调试_ros vscode 调试-CSDN博客 https://blog.csdn.net/weixin_45031801/article/details/134399664?spm1001.2014.3001.5506 一、调试准备 1.1 CMakeLists改动 注释文件中的 set(CMAKE_BUILD_TYPE "Release") #构建类…...
Docke_常用命令详解
这篇文章分享一下笔者常用的Docker命令供各位读者参考。 为什么要用Docker? 简单来说:Docker通过提供轻量级、隔离且可移植的容器化环境,使得应用在不同平台上保持一致性、易于部署和管理,具体如下 环境一致性: Docker容器使得…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
