当前位置:   article > 正文

【Unity2D 2022:Audio】添加游戏音乐和音效

【Unity2D 2022:Audio】添加游戏音乐和音效

一、添加背景音乐

1. 创建空的游戏物体,名为BackgroundMusic

2. 为音频播放器添加音频源(Audio Source)组件

3. 将背景音乐音频赋值到AudioClip(红色)

4. 设置循环播放(蓝色)

二、添加草莓拾取音效

1. 为角色添加音频源组件

2. 取消勾选Play On Awake选项(即取消游戏开始时自动播放)

3. 编辑角色脚本

        (1)创建音频源对象

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建音频源对象
  4. public AudioSource audioSource;
  5. }

        (2)编写playSound方法播放音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建音频源对象
  4. public AudioSource audioSource;
  5. // 播放音效
  6. public void playSound(AudioClip audioClip)
  7. {
  8. audioSource.PlayOneShot(audioClip);
  9. }
  10. }

        PlayOneShot()方法为只播放一次音效

4. 编辑草莓脚本

        (1)创建拾取音效

  1. public class Strawberry : MonoBehaviour
  2. {
  3. // 创建拾取音效
  4. public AudioClip pickUpSound;
  5. }

        (2)在角色与草莓碰撞的方法中添加播放拾取音效

  1. public class Strawberry : MonoBehaviour
  2. {
  3. // 创建拾取音效
  4. public AudioClip pickUpSound;
  5. // 当角色与草莓发生碰撞时
  6. private void OnTriggerEnter2D(Collider2D collision)
  7. {
  8. Ruby ruby = collision.GetComponent<Ruby>();
  9. if(ruby != null) {
  10. if(ruby.healthPoint < ruby.maxHealthPoint) {
  11. // 播放拾取音效
  12. ruby.playSound(pickUpSound);
  13. }
  14. }
  15. }
  16. }

5. 将拾取音效赋值到pickUpSound

三、添加角色受伤音效

1. 编辑角色脚本

        (1)创建Ruby受伤音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建ruby受伤音效
  4. public AudioClip rubyHitSound;
  5. }

        (2)编写changeHealthPoint()方法,当生命改变量小于0(即受到伤害)时,播放角色受伤音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建ruby受伤音效
  4. public AudioClip rubyHitSound;
  5. // Ruby改变生命值
  6. public void changeHealthPoint(int value)
  7. {
  8. if(value < 0) {
  9. playSound(rubyHitSound);
  10. }
  11. }
  12. }

2. 将角色受伤音效赋值到rubyHitSound

四、添加角色射击音效

1. 编辑角色脚本

        (1)创建Ruby射击音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建ruby射击音效
  4. public AudioClip rubyShootSound;
  5. }

        (2)编写shoot方法,播放ruby射击音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建ruby射击音效
  4. public AudioClip rubyShootSound;
  5. // Ruby发射子弹
  6. private void shoot()
  7. {
  8. playSound(rubyShootSound);
  9. }
  10. }

2. 将角色射击音效赋值到rubyShootSound

五、添加角色走路音效

1. 编辑角色脚本

        (1)创建行走音频源对象和ruby移动音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建行走音频源对象
  4. public AudioSource walkAudioSource;
  5. // 创建ruby移动音效
  6. public AudioClip rubyWalkSound;
  7. }

        (2)用walkAudioSource接收AudioSource组件

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建行走音频源对象
  4. public AudioSource walkAudioSource;
  5. // 创建ruby移动音效
  6. public AudioClip rubyWalkSound;
  7. void Start()
  8. {
  9. // 用walkAudioSource接收AudioSource组件
  10. walkAudioSource = GetComponent<AudioSource>();
  11. }
  12. }

        (3) 当Ruby移动且不播放移动音效时,播放角色移动音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建行走音频源对象
  4. public AudioSource walkAudioSource;
  5. // 创建ruby移动音效
  6. public AudioClip rubyWalkSound;
  7. void Start()
  8. {
  9. // 用walkAudioSource接收AudioSource组件
  10. walkAudioSource = GetComponent<AudioSource>();
  11. }
  12. // 当Ruby移动时
  13. if(!Mathf.Approximately(move.x, 0) || !Mathf.Approximately(move.y, 0)) {
  14. if(!walkAudioSource.isPlaying) {
  15. walkAudioSource.clip = rubyWalkSound;
  16. walkAudioSource.Play();
  17. }
  18. }
  19. }

        (4)当Ruby停止移动时,停止播放移动音效

  1. public class Ruby : MonoBehaviour
  2. {
  3. // 创建行走音频源对象
  4. public AudioSource walkAudioSource;
  5. // 创建ruby移动音效
  6. public AudioClip rubyWalkSound;
  7. void Start()
  8. {
  9. // 用walkAudioSource接收AudioSource组件
  10. walkAudioSource = GetComponent<AudioSource>();
  11. }
  12. // 当Ruby移动时
  13. if(!Mathf.Approximately(move.x, 0) || !Mathf.Approximately(move.y, 0)) {
  14. if(!walkAudioSource.isPlaying) {
  15. walkAudioSource.clip = rubyWalkSound;
  16. walkAudioSource.Play();
  17. }
  18. } else { // 当Ruby停止移动时
  19. walkAudioSource.Stop();
  20. }
  21. }

2. 把两个音频源组件赋值到audioSource、walkAudioSource

3. 将角色行走音效赋值到rubyWalkSound中

六、添加机器人走路音效

1. 为机器人添加Audio Source组件

2. 将机器人走路音效赋值到AudioClip中

3. 取消勾选PlayOnAwake属性

七、添加机器人受伤音效

1. 创建机器人受伤音效数组

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人受伤音效数组
  4. public AudioClip[] enemyHitSounds;
  5. }

2. 新建一个随机数,为0~机器人受伤音效数组长度之间的随机值,然后随机播放机器人受伤特效数组中的音效

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人受伤音效数组
  4. public AudioClip[] enemyHitSounds;
  5. // 敌人改变生命值
  6. public async void changeHealthPoint(int value)
  7. {
  8. if(value < 0) {
  9. // 新建一个随机数,为0~机器人受伤音效数组长度之间的随机值
  10. int randomNum = Random.Range(0, enemyHitSounds.Length);
  11. // 随机播放机器人受伤特效数组中的音效
  12. audioSource.PlayOneShot(enemyHitSounds[randomNum], 40);
  13. }
  14. }
  15. }

 3. 将两个机器人受伤音效赋值到enemyHitSounds数组

八、添加机器人修理完成音效

1. 创建机器人修理完成音效

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人修理完成音效
  4. public AudioClip enemyFixSound;
  5. }

2. 播放修复完成特效

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人修复完成音效
  4. public AudioClip enemyFixSound;
  5. // 敌人修复完成
  6. public void enemyFixed()
  7. {
  8. // 播放修复完成音效,100为音效音量放大倍数
  9. audioSource.PlayOneShot(enemyFixSound, 25);
  10. }
  11. }

3. 延迟播放修复完成特效

        (1)新建playFixSound方法,将播放修复完成音效的语句移动到playFixSound方法中

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人修复完成音效
  4. public AudioClip enemyFixSound;
  5. // 敌人修复完成
  6. public void enemyFixed()
  7. {
  8. }
  9. // 播放敌人修复完成音效
  10. private void playFixSound()
  11. {
  12. audioSource.PlayOneShot(enemyFixSound, 25);
  13. }
  14. }

        (2)使用Invoke方法延迟调用playFixSound方法 

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人修复完成音效
  4. public AudioClip enemyFixSound;
  5. // 敌人修复完成
  6. public void enemyFixed()
  7. {
  8. Invoke("playFixSound", 0.2f);
  9. }
  10. // 播放敌人修复完成音效
  11. private void playFixSound()
  12. {
  13. audioSource.PlayOneShot(enemyFixSound, 25);
  14. }
  15. }

        (3) 新建stopAudioSourcePlay方法,将stop语句移动到其中,在playFixSound方法中使用Invoke方法延迟调用stopAudioSourcePlay方法

  1. public class Enemy : MonoBehaviour
  2. {
  3. // 创建机器人修复完成音效
  4. public AudioClip enemyFixSound;
  5. // 敌人修复完成
  6. public void enemyFixed()
  7. {
  8. Invoke("playFixSound", 0.2f);
  9. }
  10. // 播放敌人修复完成音效
  11. private void playFixSound()
  12. {
  13. audioSource.PlayOneShot(enemyFixSound, 25);
  14. Invoke("stopAudioSourcePlay", 1.0f);
  15. }
  16. // 停用音频源组件
  17. private void stopAudioSourcePlay()
  18. {
  19. audioSource.Stop();
  20. }
  21. }

3. 将机器人修复完成音效赋值到enemyFixSound

        本章完。感谢阅读! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/810964
推荐阅读
  

闽ICP备14008679号