Unity 声音的控制

news2024/12/26 12:03:24

闲谈:

游戏开发比普通软件开发难也是有原因的,第一 游戏功能需求变化多样内部逻辑交错纵横, 而软件相对固定,无非也就是点击跳转、数据存储 第二,游戏需要很多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.0
        AudioSource.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.coloradmin.cn/o/1180030.html

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

相关文章

Python开发运维:Python3.7安装Django3.2

目录 一、理论 1.pip 2.Django 3.Pycharm国内镜像源 二、实验 1.Python3.7安装Django3.2 三、问题 1.安装django3.2报错 2.pip更新报错 一、理论 1.pip &#xff08;1&#xff09;概念 1&#xff09;pip pip 是 Python 的包安装程序。其实&#xff0c;pip 就是 Pyt…

应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。

谷歌浏览器出现以下问题 解决 点击以下 new_chrome.exe 就可以了&#xff08; new_chrome.exe 点击之后就消失了&#xff09;

北方寒流来袭,供暖已至,你家的暖气热了吗?

如果说诗句“忽如一夜春风来&#xff0c;千树万树梨花开”来形容春天的到来&#xff0c;那么“夜凉如水&#xff0c;寒风乍起添衣裳”就可以形容现在北方的天气了&#xff0c;11月初的早晨&#xff0c;伴随着萧瑟秋风卷动着枯黄落叶的声音&#xff0c;感觉就像是在落魄时买了一…

HarmonyOS应用开发Tabs组件的使用

Entry Component struct TabsPage {State currentIndex: number 0;private tabsController: TabsController new TabsController();private controller: TabsController new TabsController()/*** 自定义TabBar* param title* param targetIndex* param selectedImg* param …

wx 小程序不打开调试模式无法获取数据

问题开始 最近学习小程序&#xff0c;发布了一个体验版的小程序&#xff0c;发现正常扫码进入后接口数据是无法访问的。也就是原始数据,不过开启调试模式后,数据又一切正常&#xff0c;但是总不能让每个人都开启调试模式用吧&#xff0c;终于查阅资料后找到了解决问题的办法 …

viple入门(三)

&#xff08;1&#xff09;条件循环活动 条件循环活动中&#xff0c;必须给定条件&#xff0c;条件成立&#xff0c;则执行条件循环的后续程序。 条件不成立&#xff0c;则不执行后续程序。 从报错信息来看&#xff0c;程序提示&#xff1a;条件循环要和结束循环活动一起使用。…

抖音大型直播的画质优化实践

面临挑战 随着抖音内容生态的不断丰富&#xff0c;越来越多的大型赛事在抖音平台进行直播&#xff0c;世界杯/春晚/亚运会等各项赛事节目引来大量用户观看。卡塔尔世界杯期间&#xff0c;抖音提供的稳定高质直播画面为观众带来了完美的观赛体验&#xff0c;决赛的 PCU 高达 370…

电子牵:利用无代码开发优化电商平台、客服系统与CRM的连接

电子牵的无代码开发优势 在当前的电商环境中&#xff0c;优化运营并提高效率的需求日益增强。电子牵&#xff0c;这个专业的电子签名平台&#xff0c;提供了一种高效的解决方案。电子牵可以帮助用户迅速并有效地完成合同签署&#xff0c;进一步提升产品或平台的签署效率。更为…

【Hadoop】YARN容量调度器详解

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&am…

03-react基础知识-HOOK

一、useState 二、 useEffect 三、 useCallback 四、 useMemo 五、 useContext 含义&#xff1a;useContex用于在组件中获取上层组件通过 Context 提供的数据。它可以让你跨越组件树层级来访问共享的数据&#xff0c;避免了通过层层传递 props 的带来的问题。 1.实现数据的跨…

【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题

一&#xff0c;Redis与ssm整合 1.1 pom.xml配置 在pom.xml中配置相关的redis文件 redis文件&#xff1a; <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>red…

【排版教程】使用Latex ACM 双栏会议模板如何添加跨栏的图片

0 前言 模板中默认的图片插入的写法是下图这样的单栏图片&#xff0c;但是一般我们自己绘制的系统整体结构框图都是比较长的&#xff08;横向长度&#xff09; 我们想插入一个类似于这样的长图片 但是模板中给的这个例子&#xff0c;是插入的一个pdf文件。在实际使用中&…

2023年【金属非金属矿山(地下矿山)安全管理人员】实操考试视频及金属非金属矿山(地下矿山)安全管理人员操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员实操考试视频考前必练&#xff01;安全生产模拟考试一点通每个月更新金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员操作证考试题目及答案…

传输线在阻抗匹配时串联端接电阻为什么要靠近发送端

在进行阻抗匹配的时候我们可以在电阻源端放置一个串联端接电阻&#xff0c;但是有时候受到空间的限制可能会把电阻摆的稍微远一点&#xff0c;那么这个时候大家可能会有疑问&#xff0c;电阻离发送端远一点或者电阻放置在接收端&#xff0c;那么电阻还能消除传输线的反射吗&…

uniApp封装请求

一、request封装 创建一个api文件夹&#xff0c;用于存放所有的API接口文件。在api文件夹中创建一个request.js文件&#xff0c;用于配置接口的路由信息、请求地址和请求方法等信息。示例代码如下&#xff1a; const BASE_URL http://example.com/api // 替换为你的接口基础U…

小白学爬虫:通过关键词搜索1688商品列表数据接口|1688商品列表数据接口|1688商品列表数据采集|1688API接口

通过关键词搜索1688商品列表数据接口可以使用1688开放平台提供的API接口实现。以下是使用关键词搜索商品列表数据的基本步骤&#xff1a; 1、注册并获取AppKey。 2、构造请求参数&#xff0c;包括搜索关键词、页码、每页条数等。 3、通过API接口链接&#xff0c;将请求参数发送…

第四章《全景图:机器学习路线图》笔记

4.1 通俗讲解机器学习是什么 4.1.1 究竟什么是机器学习 卡内基梅隆大学机器学习领域的著名学者汤姆米切尔曾经在 1997 年对机器学习做出过更为严谨和经典的定义: A program can be said to learn from experience E with respect to some class of tasks T and performance …

发票识别神器:自动化读取纸质发票信息,提高工作效率

当今数字化时代&#xff0c;纸质发票的处理和管理成为许多企业和个人面临的挑战。手动处理大量纸质发票不仅费时费力&#xff0c;还容易导致错误和遗漏。因此&#xff0c;自动识别纸质发票上的信息的软件成为一个备受关注的话题。 幸运的是&#xff0c;现在有一款先进的软件能…

[C/C++]数据结构 链表OJ题 : 链表中倒数第k个结点

描述 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 方法一: 暴力求解 先遍历一遍整个链表获取链表长度len,则倒数第k个结点就是整数第len-k个结点 struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {struct ListNode* cur pListHead;int len …

RK3568驱动指南|第七篇 设备树-第61章 实例分析:pinctrl

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…