首页 >> 大全

Unity 声音的控制

2023-11-23 大全 34 作者:考证青年

闲谈:

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

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

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

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

场景导入声音到仓库

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

_控制声音的三种方法_控制声音的软件

你需要先简单了解 声音组件类(用来播放和控制声音) 类 声音片段(用来存储音频) 播放声音的函数 1..Play()

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

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

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

2.:

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


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

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

3.

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

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

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

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

我的撞金币案例

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("开始克隆障碍物");}
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了