Unity 声音的控制

闲谈:

游戏开发比普通软件开发难也是有原因的,第一 游戏功能需求变化多样内部逻辑交错纵横, 而软件相对固定,无非也就是点击跳转、数据存储 第二,游戏需要很多3D数学知识、物理知识,最起码得有高中物理的基础,力、向量、射线,除了这些数据存储一样不少

但是,心态要放平,愚公移山乐此不疲的态度,一点点加,一点点玩就行了!现查现学,现学现用,用完就忘是常态!

Unity 声音控制要根据需求来说。每个项目需求都不一样!

今天实现一个撞金币并且发出声音的业务需求!

场景导入声音到仓库

直接把声音拖到Unity  文件夹就行

你需要先简单了解

  1. 声音组件AudioSource类(用来播放和控制声音)

  2. AudioClip类 声音片段(用来存储音频)

播放声音的函数

1.AudioSource.Play()

直接播放当前AudioSource类对象中clip的内容

// Assuming an AudioSource component is attached to the same GameObject
public class AudioPlayer : MonoBehaviour
{private AudioSource audioSource;void Start(){audioSource = GetComponent<AudioSource>();}public void PlaySound(){if (audioSource.clip != null){audioSource.Play();}}
}

audioSource.clip 可以从外部赋值,也可以声明变量,外部赋值,也只能外部赋值

2.PlayOneShot:

PlayOneShot 方法是 Unity AudioSource 类的一个函数,它允许你在不中断当前正在播放的音频的情况下播放一个音频剪辑。这个方法特别适合用于播放短暂的声音效果,如爆炸声、点击声等。它接受两个参数:一个 AudioClip 对象和一个可选的音量倍数(float 类型),这个音量倍数会乘以 AudioSource 的音量。例如,如果你有一个音效用于玩家的跳跃动作,你可以使用 PlayOneShot 来播放这个跳跃音效,即使背景音乐已经在用同一个 AudioSource 播放。这样,跳跃音效就会与背景音乐同时播放,而不会停止或替换背景音乐。


using UnityEngine;
public class SoundManager : MonoBehaviour
{// 音频源组件的引用public AudioSource audioSource;// 要播放的音频剪辑public AudioClip jumpSound;void Start(){// 获取当前游戏对象上的AudioSource组件audioSource = GetComponent<AudioSource>();}// 用于播放跳跃声音的方法public void PlayJumpSound(){// 使用PlayOneShot播放jumpSound音频剪辑// 第二个参数是可选的,用于调整播放音量,如果省略,默认为1(即AudioSource的当前音量)audioSource.PlayOneShot(jumpSound, 1.0f);}
}

在这个例子中,audioSource 是附加到同一个游戏对象上的 AudioSource 组件的引用,jumpSound 是要播放的 AudioClip 对象。PlayJumpSound 方法通过 PlayOneShot 方法播放 jumpSound 音效,并将音量设置为 AudioSource 的当前音量。这种方式不会打断任何当前正在 AudioSource 上播放的音频。

3.PlayClipAtPoint

PlayClipAtPoint 是 Unity 中的一个静态方法,用于在 3D 空间的特定位置播放一个音频剪辑(AudioClip),而不需要音频源(AudioSource)组件。它会在指定位置创建一个临时的 AudioSource,播放音频一次,然后销毁该 AudioSource。这个方法非常适合播放不需要细致控制的瞬时音效,如爆炸声或玩家收集物品的声音。

使用 PlayClipAtPoint 方法时,你需要提供音频剪辑和一个 Vector3 位置。你还可以选择提供一个音量参数,但这不是必须的。这个方法会自动处理音频的播放和清理工作,使得你无需在场景中预先放置音频源。

using UnityEngine;public class AudioManager : MonoBehaviour
{// 要播放的音频剪辑public AudioClip explosionSound;// 在3D空间中的特定位置播放音频剪辑public void PlayExplosionSound(Vector3 position){// 使用PlayClipAtPoint在指定位置播放explosionSound音频剪辑// 第二个参数是音频的位置,第三个参数是可选的,用于调整音量,默认值是1.0AudioSource.PlayClipAtPoint(explosionSound, position, 1.0f);}
}

在这段代码中,我们有一个名为 explosionSound 的 AudioClip 变量。PlayExplosionSound 方法被调用时,它将使用 PlayClipAtPoint 方法在指定的 position 位置播放 explosionSound 音效。这个方法自动创建一个临时的 AudioSource 来播放音效,并在音效播放结束后销毁该 AudioSource。这种方式是处理不与特定游戏对象关联的音效的理想选择。

我的撞金币案例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Collision222 : MonoBehaviour
{// 克隆金币//挂在到主角上,分别检测 金币克隆区和障碍物克隆区//让主角去触发,金币触发器,如果触发了就开始克隆金币public GameObject CoinMuban;GameObject TempTriggerCoin;public Transform oneCoinParent;public AudioClip coinSound; // 金币音效,从外边拖拽赋值public AudioClip MonsterAudio;// 掉血音效,从外边拖拽赋值private void OnTriggerEnter(Collider other)//当我触发到别人 就把别人的碰撞器存在other里面{TempTriggerCoin = other.transform.gameObject;if (other.transform.gameObject.name== "TriggerCoin01"){CloneCoin();//开始克隆金币}if (other.transform.gameObject.name == "TriggerStru"){CloneStruction();//开始克隆障碍物}if (other.transform.gameObject.tag == "Coin"){//开始加分Debug.Log("开始加分");Destroy(other.transform.gameObject);AudioSource.PlayClipAtPoint(coinSound, other.transform.position);//临时播放,完毕销毁}if (other.transform.gameObject.tag == "Monster"){//开始加分Debug.Log("开始掉血");}}void CloneCoin(){for (int i = 0; i < 10; i++){Vector3 clonePos = new Vector3(156, 0.5f, TempTriggerCoin.transform.position.z + 50+i*3);Debug.Log("开始克隆金币");GameObject.Instantiate(CoinMuban, clonePos, Quaternion.Euler(0, 0, 0), oneCoinParent);}       }void CloneStruction(){Debug.Log("开始克隆障碍物");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人类和 AI 能够“双向奔赴”吗? | 近匠

新技术时代已经开启&#xff0c;人类首次接触生成式人工智能&#xff0c;使用对话的方式和大语言模型交互&#xff0c; 过往的经验究竟还能不能作用于这些前沿技术&#xff1f; 针对这一问题&#xff0c;本期《新程序员》采访了一 位拥有20年技术领导经验的技术预测者&#xff…

2011年01月25日 Go生态洞察:Go与JSON的高效结合

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

C#,数值计算——函数计算,切比雪夫近似算法(Chebyshev approximation)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Chebyshev approximation /// </summary> public class Chebyshev { private int n { get; set; } private int m { get; set; } privat…

2023年下半年架构案例真题及答案

案例的考点&#xff1a; 大数据架构 Lambda架构和Kappa架构 jwt特点 数据持久层&#xff0c;Redis数据丢失&#xff0c;数据库读写分离方案 Hibernat架构 SysML七个关系&#xff0c;填需求图 大数据的必选题&#xff1a; 某网作为某电视台在互联网上的大型门户入口&#…

第二证券:长期停牌一般是多久?

股票停牌不仅仅是个股的问题&#xff0c;它或许会影响到商场的整体运作和投资者的利益。那么&#xff0c;长期停牌一般是多久呢&#xff1f;从不同的视点分析&#xff0c;可以得到不同的答案。 1. 官方规则 首要&#xff0c;咱们需求查看相关规则。依据证监会规则&#xff0c…

Kafka入门

kafka无疑是当今互联网公司使用最广泛的分布式实时消息流系统&#xff0c;它的高吞吐量&#xff0c;高可靠等特点为并发下的大批量实时请求处理提供了可靠保障。很多同学在项目中都用到过kafka&#xff0c;但是对kafka的设计原理以及处理机制并不是十分清楚。为了知其然知其所以…

通达OA V12版,引入thinkphp5.1框架,及获取session

通达OA V12版&#xff0c;引入thinkphp5.1框架 如下过程引入如下问题&#xff0c;按上述问题解决htmlentities(): charset cp936 not supported, assuming utf-8 内容绝对原创&#xff0c;希望对您有帮助。您的打赏&#xff0c;是让我持续更新的牛奶和面包 如下过程引入 在D:/…

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面&#xff0c;让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…

uniapp u-tabs表单如何默认选中

首先先了解该组件&#xff1b;该组件&#xff0c;是一个tabs标签组件&#xff0c;在标签多的时候&#xff0c;可以配置为左右滑动&#xff0c;标签少的时候&#xff0c;可以禁止滑动。 该组件的一个特点是配置为滚动模式时&#xff0c;激活的tab会自动移动到组件的中间位置。 …

asp.net core mvc之路由

一、默认路由 &#xff08;Startup.cs文件&#xff09; routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…

生产过程建模在MES管理系统中的重要性

在现代制造业中&#xff0c;为了提升生产效能和满足市场需求&#xff0c;企业纷纷引入MES管理系统解决方案。然而&#xff0c;要成功实施MES管理系统&#xff0c;首要任务是深入理解和有效管理生产过程。为此&#xff0c;建立一个准确且可靠的生产过程模型变得至关重要。 生产…

Web服务器实战

网站需求 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于www.openlab.com/student 网站访问学生信息&#xff0c;www.openlab.com/data网站访问教学资料 www…

【2021研电赛】基于深度学习的蛋白质与化合物结合性质预测

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力&#xff0c;更有重磅电子产品免费领取! 获奖情况&#xff1a;三等奖 1.作品简介 针对药物发现过程中的药物筛选问题&#xff0c;本设计基于深度学习提出新的神经网络结构和数据处理方式用于预测蛋白质与化合物之…

更改 npm的默认缓存地址

npm的默认缓存一般在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache&#xff0c;而c盘往往空间不大。 1、在其他盘新建两个文件夹&#xff0c;如D盘&#xff0c;node_cache和node_global。如下图所示。 2、在cmd中执行npm config set prefix “node_cache的路径”&a…

关于AM5-DB低压备自投装置如何应用在某变电站项目的-安科瑞 蒋静

摘 要&#xff1a;随着电力需求的不断增加&#xff0c;电力系统供电可靠性要求越来越高&#xff0c;许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性&#xff0c;该类装置能够在工作电源因故障断开后&#xff0c;自动且迅速地将备用电源投…

什么是进销存系统?有哪些流程?

这篇给大家详细介绍一下&#xff0c;到底什么是进销存系统&#xff0c;它的发展历程如何&#xff1f;企业该如何利用进销存系统获得竞争优势&#xff1f; 至于为什么越来越多的企业都选择进销存系统&#xff0c;让我们先来看一下这个实例。 假设有一家零售超市&#xff0c;他…

目标跟踪(DeepSORT)

本文首先将介绍在目标跟踪任务中常用的匈牙利算法&#xff08;Hungarian Algorithm&#xff09;和卡尔曼滤波&#xff08;Kalman Filter&#xff09;&#xff0c;然后介绍经典算法DeepSORT的工作流程以及对相关源码进行解析。 目前主流的目标跟踪算法都是基于Tracking-by-Detec…

PBJ | IF=13.8 利用ChIP-seq和ATAC-seq技术揭示MdRAD5B调控苹果耐旱性的双重分子作用机制

2023年10月24日&#xff0c;西北农林科技大学园艺学院管清美教授团队在Plant Biotechnology Journal&#xff08;最新IF&#xff1a;13.8&#xff09;上发表题为“The chromatin remodeller MdRAD5B enhances drought tolerance by coupling MdLHP1-mediated H3K27me3 in apple…

计算机网络期末复习-Part1

1、列举几种接入网技术&#xff1a;ADSL&#xff0c;HFC&#xff0c;FTTH&#xff0c;LAN&#xff0c;WLAN ADSL&#xff08;Asymmetric Digital Subscriber Line&#xff09;&#xff1a;非对称数字用户线路。ADSL 是一种用于通过电话线连接到互联网的技术&#xff0c;它提供…

安卓系统手机便签app使用哪一款?

在现代快节奏的生活中&#xff0c;我们经常会遇到各种繁忙的事务和容易遗忘的备忘事项。为避免大家遗忘重要的事情&#xff0c;大家可以在常用的手机上安装记录备忘事项的工具&#xff0c;为了帮助安卓用户高效地记录和管理这些信息&#xff0c;今天我将向大家推荐一款功能强大…