C# 当对象通过特定旋转时播放声音
我试着在物体旋转通过某个点时播放声音。代码运行得很好,但后来突然停止了,我不知道还能做什么 该对象是一扇门,根据Unity的变换信息,它沿Z轴从-180旋转到-300。我想在门变换.rotation.z小于-190时播放声音“portaFechando”,但它不起作用 我能听到“portaAbrindo”的声音C# 当对象通过特定旋转时播放声音,c#,unity3d,C#,Unity3d,我试着在物体旋转通过某个点时播放声音。代码运行得很好,但后来突然停止了,我不知道还能做什么 该对象是一扇门,根据Unity的变换信息,它沿Z轴从-180旋转到-300。我想在门变换.rotation.z小于-190时播放声音“portaFechando”,但它不起作用 我能听到“portaAbrindo”的声音 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共课堂:单一行为 { 动画师; bool-portaFechada=true;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共课堂:单一行为
{
动画师;
bool-portaFechada=true;
公共音频源音频;
公共录音带;
公共音频剪辑;
//在第一帧更新之前调用Start
void Start()
{
anim=GetComponent();
}
//每帧调用一次更新
无效更新()
{
//检查输入参数a端口
if(Input.GetKeyDown(“space”)&&portaFechada==true)
{
anim.SetBool(“portaFechada”,假);
动画设置浮点(“portaSpeed”,1);
portaFechada=false;
audio.clip=abrindo;
音频播放();
}
//检查输入参数fechar porta
else if(Input.GetKeyDown(“space”)&&portaFechada==false)
{
anim.SetBool(“portaFechada”,真);
动画设置浮点(“portaSpeed”,-1);
portaFechada=true;
}
//tocando som de fechando checkando rotação(布古)
如果(portafechada==false&&transform.rotation.z当前正在访问四元数的z分量,它不是围绕z轴的角度度量
相反,请参考transform.eulerAngles.z
,该值将介于0和360之间。此处,-190相当于170,-300相当于60,因此,您可以检查transform.eulerAngles.z
是否小于或等于170
我还建议跟踪关门按钮按下后是否已播放关门声音。此外,不要仅在portaechada
为false时播放声音,而要仅在为true时播放:
Animator anim;
bool portaFechada = true;
public AudioSource audio;
public AudioClip abrindo;
public AudioClip fechando;
private bool playedSoundAlready = true;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
// checkando input para abrir a porta
if (Input.GetKeyDown("space") && portaFechada)
{
anim.SetBool("portaFechada", false);
anim.SetFloat("portaSpeed", 1);
portaFechada = false;
audio.clip = abrindo;
audio.Play();
}
// checkando input para fechar porta
else if (Input.GetKeyDown("space") && !portaFechada)
{
anim.SetBool("portaFechada", true);
anim.SetFloat("portaSpeed", -1);
portaFechada = true;
playedSoundAlready = false;
}
// tocando som de fechando checkando rotação (bugou)
if (!playedSoundAlready && portaFechada && transform.eulerAngles.z <= 170)
{
playedSoundAlready = true;
Debug.Log("Worked!");
audio.clip = fechando;
audio.Play();
}
}
动画师动画;
bool-portaFechada=true;
公共音频源音频;
公共录音带;
公共音频剪辑;
private bool playedsoundready=true;
//在第一帧更新之前调用Start
void Start()
{
anim=GetComponent();
}
//每帧调用一次更新
无效更新()
{
//检查输入参数a端口
if(Input.GetKeyDown(“space”)和portaFechada)
{
anim.SetBool(“portaFechada”,假);
动画设置浮点(“portaSpeed”,1);
portaFechada=false;
audio.clip=abrindo;
音频播放();
}
//检查输入参数fechar porta
else if(Input.GetKeyDown(“space”)和&!portaFechada)
{
anim.SetBool(“portaFechada”,真);
动画设置浮点(“portaSpeed”,-1);
portaFechada=true;
PlayedSoundready=false;
}
//tocando som de fechando checkando rotação(布古)
如果(!playedsoundready&&portaFechada&&transform.eulerAngles.z),我已经尝试过您的解决方案,但现在它只播放“fechando”声音。“abrindo”不再播放了。@GuiVasconcelos我在复制和粘贴东西时读错了角度。现在试试答案中的情况。@GuiVasconcelos我添加了一点来检查结束音是否已经播放了,因为您似乎还没有检查。谢谢,但它仍然不起作用。我仍然只是听到“fechando”而不是声音“abrindo”不再是了。如果我从PortaleChada中删除!的话,abrindo声音就会播放。我想这是一个逻辑冲突。@GuiVasconcelos试试看。我检查了PortaleChada
的错误值。我还改变了检查关闭声音是否已经播放的方法。让我知道这是否有效
Animator anim;
bool portaFechada = true;
public AudioSource audio;
public AudioClip abrindo;
public AudioClip fechando;
private bool playedSoundAlready = true;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
// checkando input para abrir a porta
if (Input.GetKeyDown("space") && portaFechada)
{
anim.SetBool("portaFechada", false);
anim.SetFloat("portaSpeed", 1);
portaFechada = false;
audio.clip = abrindo;
audio.Play();
}
// checkando input para fechar porta
else if (Input.GetKeyDown("space") && !portaFechada)
{
anim.SetBool("portaFechada", true);
anim.SetFloat("portaSpeed", -1);
portaFechada = true;
playedSoundAlready = false;
}
// tocando som de fechando checkando rotação (bugou)
if (!playedSoundAlready && portaFechada && transform.eulerAngles.z <= 170)
{
playedSoundAlready = true;
Debug.Log("Worked!");
audio.clip = fechando;
audio.Play();
}
}