第十天

  • 前言
  • Unity音频入门
  • 工作方式
  • 添加Non-diegetic sound
    • Setp 1 background music
    • Step 2
  • Step 3 修改GameEnding脚本
    • Step 4 添加脚步声
    • Step 5 添加幽灵的音效
  • 下一节

前言

有两种不同的音频将会在以下教程中用到
无固定音源的声音(Non-diegetic sound),如背景音乐等等。
有来源的音乐(Diegetic sound),如枪声,声音来源于枪膛。
接下来我们开始为我们的游戏添加无固定音源的声音。

Unity音频入门

工作方式

在开始添加音频之前,我们快速了解一下音频在Unity种是如何工作的,主要有以下三部分
音频片段(Audio Clips)
诸如MP3之类的资源,其中包含特定声音的所有数据。
音频源(Audio Sources)
即游戏中充当声音来源的组件。大多数在游戏中的声音都应该有一个音频源组件,这样声音就有了一个具体位置。
音频监听器(The Audio Listener)
这是一个单独的组件用于充当玩家的虚拟耳朵,其工作方式类似于相机组件。默认情况下啊该组件在Main Camera上。
这些不同的部分通常这样工作:音频源播放音频片段,如果音频监听器与音频源足够接近,音频就能够被听见。
特定音源的空间混合(spatial blend)
能使特定的声音来自游戏中一个特定的点,或使声音大小与音源和监听器之间的距离无关,也就是无固定音源的声音。
无固定音源的声音没有原点,因此将它的空间混合设为2D。当音频的spatial blend被设为纯2D后,音频源和监听器之间的距离不会影响音量;如果设为纯3D,音量将随间隔距离变化。如果所设值在这之间两种效果的强度会随所设的值变化。

添加Non-diegetic sound

我们将添加三个Non-diegetic sound
第一:一个环境轨道循环播放制造一个大体的鬼屋气氛
第二:一个特效音乐当JohnLemon被抓住的后播放
第三:一个特效音乐当JohnLemon逃脱后播放

Setp 1 background music

创建一个空对象命名为Ambient,设置position为(0,0,0),为其添加Audio Source组件。

可以看到Spatial Blend已经是2D了所以不需要调整, Play On Awake被允许意味着该音频会在场景加载后第一时间开始播放。
另外该需要允许循环播放,所以勾选上Loop,测试后发现音量有点大,所以再将Volume设置为0.5后保存。

Step 2

用上一节使用的CTRL+D复制两个Ambient对象,并分别更名为Escape和Caught,如下图

将他们Audio Source属性中的Play On Awake和Loop都取消我们只希望这两个声音在特定的时候再响起,同样的方法为这两个对象添加AudioClip

建一个空对象Audio,将所有的音频对象都拖入其中,作为一个分类,保存。

Step 3 修改GameEnding脚本

已知结束判断是由GameEnding脚本控制的,我们需要对不同的结局播放相应的声音所以,将脚本作如下修改。
思路:创建两个AudioSource公共类对象用于关联我们的两个音频对象,在合适的时候调用他们的公共方法play来播放音频

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class GameEnding1 : MonoBehaviour
{public AudioSource exitAudio;//关联音频public AudioSource caughtAudio;//关联音频public float fadeDuration = 1f;//渐变发生持续时间public GameObject player;//用于添加John对象bool m_IsPlayerAtExit;//是否逃脱游戏bool m_IsPlayerCaught;//是否被抓住bool m_HasAudioPlayed;//是否播放音频float m_Timer;//记录持续时间public CanvasGroup exitBackroundImageCanvasGroup;//用于关联CanvasGroup组件public CanvasGroup caughtBackroundImageCanvasGroup;//用于关联CanvasGroup组件public float displayImageDuration = 1f;void OnTriggerEnter(Collider other)//触发器{if(other.gameObject == player)//如果触发者是John{m_IsPlayerAtExit = true;//游戏结束}}void Update()//帧更新{if(m_IsPlayerAtExit)//如果触发了逃脱条件{EndLevel(exitBackroundImageCanvasGroup, false, exitAudio);//逐渐显示逃脱成功结束图片播放成功的音频,并退出游戏}else if(m_IsPlayerCaught)//如果被抓住{EndLevel(caughtBackroundImageCanvasGroup, true, caughtAudio);//组件显示逃脱失败图片播放失败的音频,并且重新开始游戏}}void EndLevel (CanvasGroup imageCanvasGroup, bool doRestart, AudioSource audioSource)//根据第一个参数处理结束画面{if(!m_HasAudioPlayed)//如果没有音频在播放,防止重复{audioSource.Play();//根据传入的AudioSource播放音频m_HasAudioPlayed = true;//正在播放音乐}m_Timer += Time.deltaTime;if(doRestart)//是否重新开始游戏{caughtBackroundImageCanvasGroup.alpha = m_Timer / fadeDuration;//在一秒类组件显示失败图片if (m_Timer > displayImageDuration + fadeDuration)//持续2秒{SceneManager.LoadScene(0);//重新加载你的第一个场景}}else{exitBackroundImageCanvasGroup.alpha = m_Timer / fadeDuration;//在一秒内逐渐显示成功图片if(m_Timer > displayImageDuration + fadeDuration)//持续2秒{Application.Quit();//退出}}}public void CaughPlayer (){m_IsPlayerCaught = true;}
}

Inspector中设置好接口后保存测试。

Step 4 添加脚步声

修改控制John行走的脚本
思路:创建一个AudioSource类型变量,start方法中使用GetComponent<类名>();方法初始化它,通过isWalking为Ture的时候,查看其数据成员isPlaying的值是否为True,若是则调用其方法Play();,否则调用Stop;方法。
首先创建一个
private AudioSource audioSource;
start()方法中添加
audioSource = GetComponent<AudioSource>();
FixedUpdate()方法中添加

if(state.isWalking){if(!audioSource.isPlaying){audioSource.Play();//会更改audioSouce.isPlaying为Ture}}else{audioSource.Stop();//会更改audioSouce.isPlaying为false}

保存
选中Main Cramera对象,移除Audio Listener组件,再选中JohnLemon对象,添加Audio Listener,最后将全部组件都加入prefab预设,点击Override
然后选择Apply All。

Step 5 添加幽灵的音效

进入幽灵的预设,Assets/Audio目录中找到SFXGhostMove Audio Clip文件,将其拖入Ghost对象,效果如下

其中禁用Play On Awake,启用Loop,Volume设置为0.4,Spatial Blend设为1全3D。打开3D Sound Settings选项,该设置控制着声音随距离变化的规则
将Max Distance设为10,你在10点距离以外的地方时就听不到幽灵发出的声音了。
Volume Rolloff 是设置声音的衰减方式,目前设置的是成对数衰减这在长距离的情况下效果很好。
由于最大距离只有10,所以将音量设为自定义衰减。
为了使声音听起来没有方向性将Spread设为180,完成效果如下

保存完成

下一节

打包项目

菜鸟的Unity自学日志10 音频相关推荐

  1. 菜鸟的Unity自学日志8 添加第一个敌人—石像鬼

    第8天 设置视线石像鬼的预设 添加碰撞器 添加一个触发器来模拟石像鬼的视线 自定义一个脚本用于应对John被发现后的触发事件 修改FaderCanvas和GameEnding 编辑 个人练习:让石像鬼 ...

  2. 使用Microsoft Unity进行日志记录

    需要记录日志的地方包括:进入方法的时候,传参的时候,统计执行时间,方法返回参数的时候,退出语句块的时候,出现异常的时候,等等.先来体验不使用Micirosoft Unity进行日志记录. class ...

  3. DirectX 9.0c游戏开发手记之RPG编程自学日志之1 : 开场白

            本文由哈利_蜘蛛侠原创,转载请注明出处!有问题请联系2024958085@qq.com RPG,一个响亮的名字!从古至今,有多少英雄儿女为之竞折腰! "什么?!你要学习RPG ...

  4. Unity学习日志_车轮碰撞器简介

    Unity学习日志_车轮碰撞器简介 1. 简介: 车轮碰撞器是一种针对地面车辆的特殊碰撞体.他有内置的碰撞检测.车轮物理系统和有滑胎摩擦的参考体.除了车轮,该碰撞体也可以用于其他游戏对象. 属性: M ...

  5. 使用ADB 查看模拟器得日志,unity得日志 以及保存

    一.安装ADB以及配置环境 下载ABD工具,如果付费了通知我,我改下价格 下载完成后解压到任意路径,记住此路径 如我解压到桌面: 我的adb路径即为: C:\Users\admin\Desktop\a ...

  6. 我的游戏学习日志10——数字游戏策划(5)游戏策划的概念与分工

    我的游戏学习日志10--数字游戏策划(5)游戏策划的概念与分工 1.游戏学的概念 "游戏学"一词来自于英文"Ludology",指从游戏本体的角度研究现象.游戏 ...

  7. Python自学笔记10:实操案例七(根据星座测试性格特点、模拟12306火车订票下单)

    Python自学笔记10:实操案例七(根据星座测试性格特点.模拟12306火车订票下单) 网课传送门:https://www.bilibili.com/video/BV1Sw411Z779?p=157 ...

  8. Unity学习日志_Unity地形系统简介

    Unity学习日志_Unity地形系统简介 地形创建: Terrain中的组件: Transform Terrain 四大功能: paint Terrain,可以选择下面几种具体的模式: Create ...

  9. Linux自学笔记 | 10 常用命令 - 压缩解压类

    Linux自学笔记 | 10 常用命令 - 压缩解压类 Linux自学笔记 | 01 文件系统和目录结构 Linux自学笔记 | 02 VIM编辑器的安装与使用 Linux自学笔记 | 03 Linu ...

最新文章

  1. Java BufferImage图片处理(获取宽高、图片截取、转换灰度图)
  2. Java浮点值拒绝服务漏洞危害分析
  3. Linux下配置FTP、SSH服务
  4. sqoop2 java api实现_Sqoop2 Java客户端API指南
  5. 转载:pycharm最新版新建工程没导入本地包问题:module 'selenium.webdriver' has no attribute 'Firefox'...
  6. linux SNAT、DNAT目标函数
  7. 专用计算机数控编程软件有哪些,大家都用什么数控编程软件
  8. Unity 模拟鼠标自动点击事件
  9. Error:Execution failed for task ':app:mergeDebugResources'. Crunching Cruncher bg_btn.9.png
  10. Ant Design vue 表格内换行
  11. 统一身份认证(CAS)中文文档 请多指教
  12. wordpress 数据库_如何一键优化您的WordPress数据库
  13. Java实现短信验证
  14. PSNR SSIM BD-rate BD-PSNR
  15. Arch Linux 下安装 st (终端模拟器)
  16. 用excel替换word里的文字,deepcopy
  17. 1966. 棋盘(chess)
  18. 又一家著名游戏公司在西雅图开分店了
  19. RationalDMIS 7.1 XYZ IJK Data
  20. 学习ASP.NET + MVC(四)

热门文章

  1. 学黑客要学什么编程语言
  2. linux如何授权HADOOP,hadoop用户权限管理
  3. ScyllaDB安装
  4. 妙手回春,AI修复让老旧视频重焕新生
  5. 在北邮做《开源中国说》演讲
  6. mysql最高安全级别双一_MySQL技术体系之核心参数
  7. 结绳中文编程[第一节]
  8. 03-CSS文字文本样式
  9. The requested URL was not found on the server. If you entered the URL manually please check your spe
  10. B站榜单丨B站UP主行业排行榜周榜