我正在raycasting
了解unity3d
并遇到音频问题。我正在做的是有Main Camera
附加了一个名为NewCast
的脚本。 Main Camera
将光线投射到具有名为box collider
的组件的多维数据集。当看到那个立方体时,光线投射工作正常。我正在播放声音。这意味着当观察该物体光线的相机被投射到立方体时。但是为什么音频会播放多次。我只想播放那个音频一次,当我看到那个对象并一次又一次地重复这个过程时。包link。
代码:
public class NewCast : MonoBehaviour
{
private RaycastHit hit;
bool playAudio1;
[SerializeField]
private AudioSource source;
[SerializeField]
private AudioClip clip1;
private void Start()
{
source.clip = clip1;
playAudio1 = true;
}
private void Update()
{
if (Physics.Raycast(transform.position, transform.forward, out hit,9f))
{
if (hit.collider.gameObject.name == "Cube")
{
playAudio1 = false;
if (!playAudio1)
{
source.Play();
if (!source.isPlaying)
{
playAudio1 = true;
}
}
}
}
}
}
答案 0 :(得分:1)
每次撞击器击中时,您都将playAudio1
设置为false,这样下一个条件始终为真,因此声音将始终发挥......
if (Physics.Raycast(transform.position, transform.forward, out hit,9f))
{
if (hit.collider.gameObject.name == "Cube"){
if (!source.isPlaying){
source.Play();
}
}
}
如果你想每次看对象只播放ONCE:
public class NewCast : MonoBehaviour
{
private RaycastHit hit;
bool soundPlayed = false;
[SerializeField]
private AudioSource source;
[SerializeField]
private AudioClip clip1;
private void Start()
{
source.clip = clip1;
}
private void Update(){
if(Physics.Raycast(transform.position, transform.forward, out hit,9f)){
if (!soundPlayed && hit.collider.gameObject.name == "Cube"){
if (!source.isPlaying){
source.Play();
soundPlayed = true;
}
}
}else{
if(soundPlayed) soundPlayed = false;
}
}
}
答案 1 :(得分:-1)
自从我使用Unity之后的某个时间,但是Unity中的 TransDateString
10-2003
01-2005
05-2012
设置为自动循环。检查具有AudioSource
的脚本,并确保取消选中"正在循环播放"。
See the Unity Documentation
所以我猜到如果你把它添加到你的Start()函数中就可以了
AudioSource