Unity类银河战士恶魔城学习总结(P155 More example on audio effects更多的音效细节)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/
本章节添加了更多的音效细节
音频管理器
AudioManager.cs
使得多个音效可以同时播放,注释掉以下代码
public void PlaySFX(int _sfxIndex,Transform _source)//播放音效{//if(sfx[_sfxIndex].isPlaying)//如果音效正在播放// return;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AudioManager : MonoBehaviour
{public static AudioManager instance;[SerializeField] private float sfxMinimumDistance;//音效最小距离[SerializeField] private AudioSource[] sfx;//音效[SerializeField] private AudioSource[] bgm;//背景音乐public bool playBgm;private int bgmIndex;private void Awake(){if(instance != null)Destroy(instance.gameObject);elseinstance = this;}private void Update(){if (!playBgm)StopAllBGM();else{if(!bgm[bgmIndex].isPlaying)//如果背景音乐没有播放PlayBGM(bgmIndex);}}public void PlaySFX(int _sfxIndex,Transform _source)//播放音效{//if(sfx[_sfxIndex].isPlaying)//如果音效正在播放// return;if(_source!=null && Vector2.Distance(PlayerManager.instance.player.transform.position, _source.position) > sfxMinimumDistance)//距离过远不播放return;if (_sfxIndex < sfx.Length){sfx[_sfxIndex].pitch = Random.Range(.85f, 1.15f);//设置音效的音调sfx[_sfxIndex].Play();}}public void StopSFX(int _index) => sfx[_index].Stop();//停止音效public void PlayRandomBGM()//播放随机背景音乐{bgmIndex = Random.Range(0, bgm.Length);PlayBGM(bgmIndex);}public void PlayBGM(int _bgmIndex)//播放背景音乐{bgmIndex = _bgmIndex;StopAllBGM();bgm[bgmIndex].Play();}public void StopAllBGM(){for (int i = 0; i < bgm.Length; i++){bgm[i].Stop();}}}
Blackhole_Skill.cs
加上了释放技能的玩家语音和技能音效
AudioManager.instance.PlaySFX(3, player.transform);AudioManager.instance.PlaySFX(6, player.transform);
using UnityEngine;
using UnityEngine.UI;public class Blackhole_Skill : Skill
{[SerializeField] private UI_SkillTreeSlot blackHoleUnlockButton;public bool blackHoleUnlocked { get; private set; }[SerializeField] private int amountOfAttacks;[SerializeField] private float cloneCooldown;[SerializeField] private float blackholeDuration;[Space][SerializeField] private GameObject blackHolePrefab;[SerializeField] private float maxSize;[SerializeField] private float growSpeed;[SerializeField] private float shrinkSpeed;BlackHole_Skill_Controller currentBlackhole;//当前的黑洞private void UnlockBlackHole(){if (blackHoleUnlockButton.unlocked)blackHoleUnlocked =true;}public override bool CanUseSkill(){return base.CanUseSkill();}public override void UseSkill(){base.UseSkill();//调用了基类 Skill中的 UseSkill 方法GameObject newBlackHole = Instantiate(blackHolePrefab, player.transform.position, Quaternion.identity); //这行代码使用 Instantiate 方法在玩家当前位置生成一个新的黑洞对象currentBlackhole = newBlackHole.GetComponent<BlackHole_Skill_Controller>();currentBlackhole.SetupBlackhole(maxSize, growSpeed, shrinkSpeed, amountOfAttacks, cloneCooldown,blackholeDuration);//调用SetupBlackhole,传递一系列参数来配置黑洞的行为,包括最大尺寸、增长速度、缩小速度、攻击次数和克隆冷却时间AudioManager.instance.PlaySFX(3, player.transform);AudioManager.instance.PlaySFX(6, player.transform);}protected override void Start(){base.Start();blackHoleUnlockButton.GetComponent<Button>().onClick.AddListener(UnlockBlackHole);}protected override void Update(){base.Update();}public bool SkillCompeleted(){if(!currentBlackhole){return false;}if (currentBlackhole.playerCanExitState){currentBlackhole = null;return true;}return false;}public float GetBlackholeRadius()//解决水晶黑洞的攻击范围问题{return maxSize / 2;}protected override void CheckUnlock(){base.CheckUnlock();UnlockBlackHole(); }
}
ItemObject.cs
添加了拾取物品的音效
public void PickupItem()//将物品添加到背包,然后销毁
{//11月12日改if (!Inventory.instance.CanAddItem() && itemData.itemType == ItemType.Equipment)//如果不能添加物品并且物品类型是装备{rb.velocity = new Vector2(0, 7);return;}AudioManager.instance.PlaySFX(18, transform);Inventory.instance.AddItem(itemData);Destroy(gameObject);
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//创建一个物体,放入这个脚本
public class ItemObject : MonoBehaviour
{[SerializeField] private Rigidbody2D rb;[SerializeField] private ItemData itemData;//就是你放入的图标private void SetupVisuals()//设置物品的图标和名称{if (itemData == null)return;SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();if (spriteRenderer == null){Debug.LogError("SpriteRenderer component is missing");return;}GetComponent<SpriteRenderer>().sprite = itemData.icon;//在编辑器中显示图标gameObject.name = "Item object - " + itemData.itemName;//直接在编辑器中显示名字}public void SetupItem(ItemData _itemData,Vector2 _velocity)//配置物品的数据和掉落的初始速度{itemData = _itemData;rb.velocity = _velocity;SetupVisuals();}public void PickupItem()//将物品添加到背包,然后销毁{//11月12日改if (!Inventory.instance.CanAddItem() && itemData.itemType == ItemType.Equipment)//如果不能添加物品并且物品类型是装备{rb.velocity = new Vector2(0, 7);return;}AudioManager.instance.PlaySFX(18, transform);Inventory.instance.AddItem(itemData);Destroy(gameObject);}
}
Checkpoint.cs
到检查点如果火堆未启动过,加个点亮火堆的音效
if(activationStatus==false)AudioManager.instance.PlaySFX(5, transform);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//2024.11.28 19:38 疑似有点生病
//
public class Checkpoint : MonoBehaviour
{private Animator anim;public string id;public bool activationStatus;private void Awake(){anim = GetComponent<Animator>();}[ContextMenu("产生检查点ID")]//在编辑器中生成一个按钮private void GenerateId(){id = System.Guid.NewGuid().ToString();}private void OnTriggerEnter2D(Collider2D collision)//检测到碰撞{if (collision.GetComponent<Player>()!=null)//检测到玩家{ActivateCheckPoint();//激活检查点}}public void ActivateCheckPoint()//激活检查点{if(activationStatus==false)AudioManager.instance.PlaySFX(5, transform);activationStatus = true;anim.SetBool("active", true);}
}
PlayerMoveState.cs
移动会产生脚步声
public override void Enter(){base.Enter();AudioManager.instance.PlaySFX(14,null);}public override void Exit(){base.Exit();AudioManager.instance.StopSFX(14);}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMoveState : PlayerGroundedState
{public PlayerMoveState(Player _player, PlayerStateMachine _stateMachine, string _animBoolName) : base(_player, _stateMachine, _animBoolName){}public override void Enter(){base.Enter();AudioManager.instance.PlaySFX(14,null);}public override void Exit(){base.Exit();AudioManager.instance.StopSFX(14);}public override void Update(){base.Update();player.SetVelocity(xInput * player.moveSpeed, rb.velocity.y);if (xInput == 0 || player.IsWallDetected())stateMachine.ChangeState(player.idleState);//如果玩家没有按下左箭头键或右箭头键,我们将切换到Idle状态}
}
相关文章:

Unity类银河战士恶魔城学习总结(P155 More example on audio effects更多的音效细节)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节添加了更多的音效细节 音频管理器 AudioManager.cs 使得多个音效可以同时播放,注释掉以下代码 public void PlaySFX(in…...

【题解】—— LeetCode一周小结48
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结47 25.网络延迟时间 题目链接:743. 网络延迟时间 …...

040集——CAD中放烟花(CAD—C#二次开发入门)
效果如下: 单一颜色的烟花: 渐变色的火花: namespace AcTools {public class HH{public static TransientManager tm TransientManager.CurrentTransientManager;public static Random rand new Random();public static Vector3D G new V…...

一文理解多模态大语言模型——下
作者:Sebastian Raschka 博士, 翻译:张晶,Linux Fundation APAC Open Source Evangelist 编者按:本文并不是逐字逐句翻译,而是以更有利于中文读者理解的目标,做了删减、重构和意译,…...

ROS2创建 base 包用于其他模块的参数配置和头文件依赖
Demo 背景 ROS2项目开发中存在以下需求:有多个包需要读取一些共同的配置项(以txt或者yaml形式存在),且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...

自然语言处理期末试题汇总
建议自己做,写完再来对答案。答案可能存在极小部分错误,不保证一定正确。 一、选择题 1-10、C A D B D B C D A A 11-20、A A A C A B D B B A 21-30、B C C D D A C A C B 31-40、B B B C D A B B A A 41-50、B D B C A B B B B C 51-60、A D D …...

前端热门面试题目(四)——计算机网路篇
计算机网络常见面试题: 计算机网络面试(一) 计算机网络面试(二) 计算机网络速成: 计算机网络速成一 计算机网络速成二 计算机网络速成三 2. HTTP 1.0 和 2.0 的区别 连接复用: HTTP/1.0 使用短连…...

kubenetes流水线实施清单
整体实施方案概述 创建命名空间(Namespace):创建一个专用于 CI/CD 的命名空间 cicd。配置 Secrets: Git SSH 密钥(分别为 Maven 和 npm 项目)Docker Registry 凭证(Kaniko)SMTP 凭证…...

Redis4——持久化与集群
Redis4——持久化与集群 本文讲述了1.redis在内存占用达到限制后的key值淘汰策略;2.redis主从复制原理;3.redis的哨兵模式;4.redis集群模式。 1. 淘汰策略 设置过期时间 expire key <timeout>只能对主hash表中的键设置过期时间。 查…...

【LeetCode: 94. 二叉树的中序遍历 + 栈】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

Python系列 - MQTT协议
Python系列 - MQTT协议 资源连接 MQTT的介绍和应用场景的示例说明 一、什么是MQTT 百度关于MQTT的介绍如下: MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布订阅范式的消息协议。它工作在 TCP/IP协议之上,是为硬件性能低下的远程设…...

同时在github和gitee配置密钥
同时在github和gitee配置密钥 1. 生成不同的 SSH 密钥 为每个平台生成单独的 SSH 密钥。 # 为 GitHub 生成密钥(默认文件路径为 ~/.ssh/github_id_rsa) ssh-keygen -t rsa -b 4096 -C "your_github_emailexample.com" -f ~/.ssh/github_id_…...
Runway 技术浅析(六):文本到视频(Text-to-Video)
1. 核心组件与工作原理 1.1 自然语言处理(NLP) 1.1.1 文本解析与语义理解 文本到视频的第一步是将用户输入的自然语言文本解析为机器可理解的语义信息。Runway 使用预训练的 NLP 模型,如 GPT-3 和 BERT,这些模型通过大规模文本数…...

云计算vspere 安装过程
1 材料的准备 1 安装虚拟机 vmware workstation 2 安装esxi 主机 3 在esxi 主机上安装windows 2018 dns 服务器 4 在虚拟机上安装windows 2018 服务器 6 安装vcenter 5 登入界面测试 这里讲一下,由于部署vspere 需要在windows 2012 服务器上部…...

QT 实现QStackedWidget切换页面右移动画
1.实现效果 以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。 为了方便查看动画特效,设置了每个界面的背景图片。 2.实现思路 首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断…...

Android Camera2采集并编码为H.264
前言 本篇博文主要讲述的是基于Android原生MediaCodec通过Camera2 API进行图像数据采集并编码为H.264的实现过程,如果对此感兴趣的不妨驻足观看,也欢迎大家大家对本文中描述不当或者不正确的地方进行指正。如果对于Camera2预览还不熟悉的可以观看博主上…...

DHCP和DNS
DHCP(动态主机配置协议)和DNS(域名系统)是计算机网络中两个重要的协议,它们在网络的管理和使用中发挥着关键作用。 DHCP(动态主机配置协议) 基本功能 自动分配IP地址:DHCP允许网…...

ONES 功能上新|ONES Project 甘特图再度升级
ONES Project 甘特图支持展示工作项标题、进度百分比、依赖关系延迟时间等信息。 应用场景: 在使用甘特图规划项目任务、编排项目计划时,可以对甘特图区域进行配置,展示工作项的工作项标题、进度百分比以及依赖关系延迟时间等维度,…...

<工具 Claude Desktop> 配置 MCP server 连接本地 SQLite, 本机文件夹(目录) 网络驱动器 Windows 11 系统
也是在学习中... 起因: 抖音博客 艾克AI分享 他的视频 #143《Claude开源MCP彻底打破AI的信息孤岛》 提到: Claude开源的MCP太强了,视频后面是快速演示,反正看了好几遍也没弄明白。菜单都不一样,感觉用的不是同一家 Claude. 探…...

GIT的使用方法以及汉化方法
1.下载git软件,可以从官网下载 下载后默认安装即可。 2.找到一个文件夹,或者直接打开gitbash gitbash可以使用cd指令切换目录的 打开后输入 git clone https:[git仓库的网页]即可克隆仓库 就是这个地址 克隆后即可使用代码 如果忘记了命令可以使用 -…...

公因子的数目
给你两个正整数 a 和 b ,返回 a 和 b 的 公 因子的数目。 如果 x 可以同时整除 a 和 b ,则认为 x 是 a 和 b 的一个 公因子 。 输入:a 12, b 6 输出:4 解释:12 和 6 的公因子是 1、2、3、6 。 class Solution {pu…...

数据结构(三)——双向链表的介绍以及实现
前言 前面两期数据结构的文章我们介绍了顺序表和单向链表,那么本篇博文我们将来了解双向链表,作为最好用的一种链表,双向链表有什么特殊之处呢,接下来就让我们一起了解一下吧。 下面是前两篇数据结构的文章: 数据结…...

Webpack开发模式及处理样式资源
一、开发模式介绍 开发模式顾名思义就是我们开发代码时使用的模式。 这个模式下我们主要做两件事: 编译代码,使浏览器能识别运行 开发时我们有样式资源、字体图标、图片资源、html 资源等,webpack 默认都不能处理这些资源,所以我…...

leetcode--设计链表
707.设计链表 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性 prev 以指示链表中的…...

【MySQL】:数据库操作
MySQL 数据库基础理论 2.1 数据库系统概述 介绍数据库系统的基本概念、发展历程、分类及 MySQL 在其中的地位与特点。 2.2 MySQL 数据库体系结构 解析 MySQL 的整体架构,包括服务器层与存储引擎层的功能与交互机制,重点探讨 InnoDB、MyISAM 等存…...

刷蓝桥杯历年考题(更新至15届~)
第十五届 CA组省赛 AcWing5980.训练士兵 方法一:树状数组:O(nlogn) self-complete /*先枚举组团,后分析每个士兵,有一个特点,组团费用是固定的,那当然是让所有士兵一块训练,训练完的士兵也不会有损失当还…...

AI与BI的火花:大语言模型如何重塑商业智能的未来
大家好,我是独孤风。 在当今这个数据驱动的时代,企业对于信息的需求如同对于氧气的需求一般至关重要。商业智能(BI)作为企业获取、分析和呈现数据的关键工具,正在经历一场深刻的变革,而这一变革的催化剂正是…...

Qt 详解QtNFC 读写模式
文章目录 Qt NFC 读写模式详解1. NFC 读写模式简介1.1 什么是 NFC 读写模式?主要功能: 1.2 常见应用场景 2. Qt NFC 读写模式原理3. 配置 QtNFC 模块4. NFC 读写操作实现4.1 NFC 标签读取代码示例功能解析 4.2 NFC 标签写入代码示例功能解析 5. 使用注意…...

增删改查文档
列表 : 列表包含 : 模糊查找 分页 列表jsp页面 : 一 :导入外部文件 (举例 : 用户点进来就可以看到菜单,这是预加载属于,使用文档就绪函数实现) 二 : body 上 ① : 文档就绪函数 ${ function() //获取条件查询的字段 //组装对象 //调用文档就绪函数 } ② : 封装ajax方…...

C语言蓝桥杯2023年省赛真题
文章目录 持续更新中...第一题题目描述输入格式输出格式样例输出提示 2 第二题题目描述 第三题题目描述输入格式输出格式样例输入样例输出 第四题题目描述输入格式输出格式样例输入样例输出提示 第四题题目描述输入格式输出格式样例输入样例输出提示 第五题题目描述输入格式输出…...