【Unity3D】AudioSource组件
1 简介
1)AudioSource 与 AudioListener 简介
AudioSource(音频源)组件用于控制播放 AudioClip(音频片段),能够控制 2D 和 3D(距离越远,声音越小)声音播放,它一般挂在产生声源的游戏对象上。
AudioListener (音频监听器)组件用于监听 AudioSource 播放的音频,它一般挂在 Camera 或游戏角色上,每个场景中最多只有一个 AudioListener。AudioSource 播放音频时,会产生一个音频场,只有在音频场范围内的 AudioListener 才能监听到声音。
AudioClip 是音频片段,AudioSource 在播放音频时,必须绑定一个 AudioClip。
2)AudioSource 面板属性

- AudioClip:音频片段
- Mute:静音
- Play On Awake:游戏开始时播放声音
- Loop:是否循环播放
- Volume:音量
- Spatial Blend:2D、3D 声音调节
- Min Distance:3D 声音最小距离
- Max Distance:3D 声音最大距离
补充:Unity3D 官方提供了一些音频资源,如下:

3)代码控制音频播放
// 加载音频片段
AudioClip audioClip = (AudioClip) Resources.Load("Audio/Footstep01");
// 获取AudioSource组件
AudioSource audioSource = GetComponent<AudioSource>();
// 绑定音频片段
audioSource.clip = audioClip;
// 播放音频(选其中一种方式)
audioSource.Play();
// 此方式播放音频, Unity3D会在transform.position处创建一个空游戏对象, 播放完音频后自动销毁该游戏对象
AudioSource.PlayClipAtPoint(audioClip, transform.position);
2 应用
本节将通过一个案例展示 Unity3D 播放立体声效果。
1)游戏界面

2)游戏对象层级结构

说明:AudioSourceSphere 游戏对象添加了 AudioSource 组件,并且将 Unity3D 官方提供的 Footstep01.wav 音频片段拖拽到 AudioSource 组件中;Player 游戏对象添加了 AudioListener,并移除 MainCamera 中默认添加的 AudioListener。
3)AudioSource 组件

4)脚本组件
AudioController.cs
using UnityEngine;
public class AudioController : MonoBehaviour {
private PlayerController player;
private AudioSource audioSource;
private void Awake() {
audioSource = GetComponent<AudioSource>();
player = GameObject.Find("Player").GetComponent<PlayerController>();
}
private void Update() {
if (player.isMoving) {
PlayAudio();
}
}
private void PlayAudio() {
if (!audioSource.isPlaying) {
audioSource.Play();
}
}
}
说明: AudioController 脚本组件挂在 AudioSourceSphere 游戏对象上。
PlayerController.cs
using UnityEngine;
public class PlayerController : MonoBehaviour {
public bool isMoving = false;
private void Update() {
isMoving = Move();
}
private bool Move() {
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
if (Mathf.Abs(hor) > 0.1f || Mathf.Abs(ver) > 0.1f) {
Vector3 dire = new Vector3(hor, 0, ver) * Time.deltaTime * 10;
transform.position += dire;
return true;
}
return false;
}
}
说明: PlayerController 脚本组件挂在 Player 游戏对象上。
5)运行效果
按 ↑ ↓ ← → 键控制胶囊体移动,在不同位置可以听到不同音量大小的脚步声。
声明:本文转自【Unity3D】AudioSource组件
【Unity3D】AudioSource组件的更多相关文章
- Unity3D中组件事件函数的运行顺序
事件函数的运行顺序 Unity 脚本中有很多按预设顺序以脚本身份执行的事件函数. 其执行顺序例如以下: 载入第一个场景 启动场景时调用这些函数(为场景中的每一个对象调用一次). Awake: 始终在调 ...
- Unity3d基础组件 (Component) 和脚本 (Script) 关系
原版的:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/TheComponent-ScriptRelations ...
- Unity3D Image 组件附入图片问题
作为新手经常会看到有个Image的组件 代码中理所当然的public 发现图片并不能附入其中, 解决办法直接 public Sprite 就可以了
- Unity3D深入浅出 -组件与节点之间的调用关系
一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...
- unity3d常用组件及分析
- Unity3D - UGUI组件的中英文对照
- Unity3d&C#分布式游戏服务器ET框架介绍-组件式设计
前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...
- [Unity3D]Unity3D游戏开发之飞机大战项目解说
大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...
- unity3d 学习笔记(两)
AudioClip 使用声音资源 unity3d资源可以被设置为声3d声音或2d声音.3d间的影响,越近声音越大 component: Audio source: 声音的发生物体 Audio list ...
- 【转】Unity3D研究院之两种方式播放游戏视频
http://www.xuanyusong.com/archives/1019 Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像 ...
随机推荐
- 05-Verilog基础语法_4
Verilog基础语法 Mixed Model(混合设计模型) System Tasks(系统任务,系统函数) 用随机数驱动验证 fd = $fopen("文件路径及文件名") / ...
- 【MACRO】嵌入式实用的宏技巧 DEBUG-printf 、 #/##
from: C语言.嵌入式中几个非常实用的宏技巧 (qq.com) 宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段.但是,在打印的信息量比较多的时候,就比较难知道哪 ...
- [转帖]记一次sst文件损坏修复过程
https://tidb.net/blog/54e388c8 [2023-07-14 14:26:28]应用系统报警删除数据失败,查看日志报Region is unavailable,同时企业微信群也 ...
- [转帖]tidb之旅——tidb架构选择
https://zhuanlan.zhihu.com/p/641650168 前言 从4月份开始利用tidb改造了我们公司bi系统.这个过程中,我感觉到了tidb的强大.也打算记录一下整个改造过程.我 ...
- [转帖]iptables开放指定端口
https://www.jianshu.com/p/5b44dd20484c 由于业务的需要, MySQL,Redis,mongodb等应用的端口需要我们手动操作开启 下面以 MySQL 为例,开启 ...
- mysql8 initialize 命令 初学版 lower_case_table_names
1. 今天开发找我跟我说 我安装的mysql 不对. 比较蛋疼. 需要修改一个参数 但是数据库已经初始进去了 重装起来比较麻烦. 硬着头皮搞. 2. 参数的名字为: lower_case_tabl ...
- Linux 通过命令方式反编译jar包的方法
第一步: 复制jar包到指定路径. find . -iname "*.jar" -exec scp {} /root/bf/ \; 第二步: 解压缩jar包解压缩出来class文件 ...
- alertmanager远程配置
用于远程配置alertmanager的rules. 主要步骤为: 通过proxy更新mount的告警规则文件 重启容器 # ./client -h Note: Only for update exis ...
- ABP vNext系列文章04---DynamicClient动态代理
一.动态代理在ABP系统中的应用 1.它主要在做什么事件 之前开发系统想要在后台调用别的服务都是用HttpClient发起请求,在abp vnext中不需要我们这样做了, 你只要知道服务调用的接口方法 ...
- MybatisPlus对Mysql数据库关键字作为列名的处理--SQLSyntaxErrorException: You have an error in your SQL syntax;
说明: 在设计数据库时,使用mysql关键字作为列名(比如order用于排序),就会报错:java.sql.SQLSyntaxErrorException: You have an error in ...