我试图在物体旋转到某个点时播放声音。该代码工作正常,但随后突然停止了,我不知道该怎么办。
该对象是一扇门,根据Unity的变换信息,该对象沿Z轴从-180到-300旋转。我希望门transform.rotation.z小于-190时播放声音“ portaFechando”,但它不起作用。
我只能听到“ portaAbrindo”的声音。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class abrirPorta : MonoBehaviour
{
Animator anim;
bool portaFechada = true;
public AudioSource audio;
public AudioClip abrindo;
public AudioClip fechando;
// 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 == true)
{
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 == false)
{
anim.SetBool("portaFechada", true);
anim.SetFloat("portaSpeed", -1);
portaFechada = true;
}
// tocando som de fechando checkando rotação (bugou)
if (portafechada == false && transform.rotation.z <= -190)
{
Debug.Log("Worked!");
audio.clip = fechando;
audio.Play();
}
}
}
答案 0 :(得分:2)
当前,您正在访问四元数的z分量,该分量不能度量围绕z轴的角度。
相反,请参考transform.eulerAngles.z
,它将是介于0到360之间的值。这里-190等于170,-300等于60,因此,您可以检查transform.eulerAngles.z
是否为小于或等于170。
我还建议跟踪自按下门关闭按钮以来是否已经发出了关闭声音。另外,您不仅希望在portafechada
为假时播放声音,还希望仅在为真时播放声音:
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();
}
}