c# - 音频源即使被碰撞盒“触发”也不想工作
问题描述
我有一个奇怪的问题。我想用碰撞框触发音频文件。调试日志确认触发了音频源,但它会播放音频。这里可能是什么原因?
我已将音频侦听器附加到我的相机,并将音频源附加到带有此代码的对象:
using UnityEngine;
[CreateAssetMenu(menuName = "ScriptableCookbook/Actions/PlayAudioAction")]
public class PlayAudioAction : ScriptableAction
{
[SerializeField] private AudioClip clipToPlay = null;
private AudioSource audioSource;
public override void PerformAction(GameObject obj)
{
audioSource = obj.AddComponent<AudioSource>();
audioSource.clip = clipToPlay;
audioSource.playOnAwake = false;
audioSource.spatialBlend = 1;
audioSource.Play();
}
public override void StopAction(GameObject gameObject)
{
if (audioSource != null)
{
audioSource.Stop();
}
}
}
这些是具有盒子碰撞器(是触发器)的对象的检查器中的音频设置以及这些声音设置:
这就是声音本身:
解决方案
你太远了!
您启用了SpatialBlend = 1
在 Inspector 中,您可以看到衰减曲线,红线是您的音频听众所在的位置 => 距离太远,无法真正听到任何声音
您必须编辑该衰减,以便让您的音频听众听到更远的声音。
一般来说:是否有理由AudioSource
按需添加该组件?
而是从一开始就将其添加到您的对象上,正确调整设置并且仅在您的代码中执行
public override void PerformAction(GameObject obj)
{
audioSource = obj.GetComponent<AudioSource>();
if(audioSource) audioSource.Play();
}
public override void StopAction(GameObject gameObject)
{
if (audioSource)
{
audioSource.Stop();
}
}
推荐阅读
- javascript - 什么会使 google maps api 集群无法正常工作?
- python - Django Rest Framework 无法解析多部分/表单数据
- android - onSaveInstanceState 之后的 Androidx Navigation IllegalStateException
- laravel - Laravel + Vue 路由器 - 蛞蝓的最佳实践
- node.js - 节点,postgres pg-promise:仅在 azure webapp 容器中泄漏活动句柄
- go - 例行公事:选择真的选择随机案例吗?
- r - 展开 data.frame
- electron - 如何在电子原子的两个扩展监视器的总中心打开 newBrowserWindow
- user-interface - 当数组中元素的值发生变化时,React-Native 更新 UI,而不使用 ForceUpdate
- python - 如果列中的值匹配,则合并熊猫数据框中的计数和行