C# 如何控制每个实例化脚本的bool个体
所以我想让这个脚本检查bool是否为真,如果为真,则播放一次音频,但如果为假,则不播放音频,但问题是,这个脚本存在于多个游戏对象中,并且总是不断打开和关闭,因此bool在这个游戏对象上可能为真,但在另一个对象上可能为假,因此当我尝试检查bool值时,它会被忽略返回true和false,因此在两个游戏对象满足相同条件之前,永远不会真正执行if条件来播放音乐…如何修复此问题 附言:游戏对象不是预设的C# 如何控制每个实例化脚本的bool个体,c#,unity3d,C#,Unity3d,所以我想让这个脚本检查bool是否为真,如果为真,则播放一次音频,但如果为假,则不播放音频,但问题是,这个脚本存在于多个游戏对象中,并且总是不断打开和关闭,因此bool在这个游戏对象上可能为真,但在另一个对象上可能为假,因此当我尝试检查bool值时,它会被忽略返回true和false,因此在两个游戏对象满足相同条件之前,永远不会真正执行if条件来播放音乐…如何修复此问题 附言:游戏对象不是预设的 private void Update() { if (isChas
private void Update()
{
if (isChasing && inSightArea)
{
if (!enemyFOV.chaseSound.isPlaying)
{
Debug.Log("music playing");
enemyFOV.chaseSound.Play();
}
Debug.Log(enemyFOV.chaseSound.isPlaying);
}
else
{
Debug.Log("is patrolling");
enemyFOV.chaseSound.Stop();
}
}
“music playing”调试日志似乎是在我想要的正确时间记录的,但是enemyFOV.chaseSound.Play()是错误的;不知何故,直到来自两个对象的两个bool由于某种原因返回true,才开始运行。我觉得您的
enemyFOV
是两个对象的相同的实例
因此,如果在一个实例中,isChasing&&inSightArea
为true
,但在另一个实例中则不是
=>一个对象启动声音,另一个对象立即停止声音
我宁愿存储所有当前正在追逐的对象,并让您的
EnemyFOV
类控制声音,例如
public class EnemyFOV : MonoBehaviour
{
// store all currently chasing instances
private readonly HashSet<YourScript> currentlyChasing = HashSet<YourScript>();
// your audiosource as you have it anyway
public AudioSource chaseSound;
// call this one instead
public void SetChasing(YourScript yourScript, bool iAmChasing)
{
if(iAmChasing)
{
// Store this instance
if(!currentlyChasing.Contains(yourScript)) currentlyChasing.Add(yourScript);
}
else
{
// remove this instance
if(currentlyChasing.Contains(yourScript)) currentlyChasing.Remove(yourScript);
}
// If there is at least one instance and no sound is playing
if(currentlyChasing.Count > 0 && !chaseSound.isPlaying)
{
// -> start the sound
Debug.Log("music playing");
chaseSound.Play();
}
// If there is no chasing instance but sound is playing
else if (currentlyChasing.Count == 0 && chaseSound.isPlaying)
{
// -> stop the sound
chaseSound.Stop();
}
}
}
private void Update()
{
enemyFOV.SetChasing(this, isChasing && inSightArea);
}