Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当对象通过特定旋转时播放声音_C#_Unity3d - Fatal编程技术网

C# 当对象通过特定旋转时播放声音

C# 当对象通过特定旋转时播放声音,c#,unity3d,C#,Unity3d,我试着在物体旋转通过某个点时播放声音。代码运行得很好,但后来突然停止了,我不知道还能做什么 该对象是一扇门,根据Unity的变换信息,它沿Z轴从-180旋转到-300。我想在门变换.rotation.z小于-190时播放声音“portaFechando”,但它不起作用 我能听到“portaAbrindo”的声音 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 公共课堂:单一行为 { 动画师; bool-portaFechada=true;

我试着在物体旋转通过某个点时播放声音。代码运行得很好,但后来突然停止了,我不知道还能做什么

该对象是一扇门,根据Unity的变换信息,它沿Z轴从-180旋转到-300。我想在门变换.rotation.z小于-190时播放声音“portaFechando”,但它不起作用

我能听到“portaAbrindo”的声音

使用系统集合;
使用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();
    }
}