敵に当たった時に「ボコッ」と効果音をPlayOneShotで鳴らします。
しかしこうすると、複数の弾が同時に当たった時、効果音が重なって「ボボゴゴッ」って感じになってうるさいし不快。
「複数の弾が当たっても一回しか音を出さないようにするには?」
低速ショットは、音を出すだけのオブジェクトを置いて解決。
Player.cs
else if (SlowSpeed)
{
Instantiate(P_Bullet, transform.position, Quaternion.Euler(0, 0, 0));
P_Pos = transform.position;
P_Pos += new Vector3(0.3f, 0, 0);
Instantiate(P_Bullet, P_Pos, Quaternion.Euler(0, 0, 0));
P_Pos = transform.position;
P_Pos += new Vector3(-0.3f, 0, 0);
Instantiate(P_Bullet, P_Pos, Quaternion.Euler(0, 0, 0));
P_Pos = transform.position;
P_Pos += new Vector3(0.6f, 0, 0);
Instantiate(P_Bullet, P_Pos, Quaternion.Euler(0, 0, 0));
P_Pos = transform.position;
P_Pos += new Vector3(-0.6f, 0, 0);
Instantiate(P_Bullet, P_Pos, Quaternion.Euler(0, 0, 0));
Instantiate(P_B_SE,transform.position,Quaternion.identity);
GameObject isP_B_SE = GameObject.Find("P_B_SE(Clone)");
}
P_B_SE.cs
void Start()
{
Right = GameObject.Find("Right/Right");
Left = GameObject.Find("Left/Left");
bc2d = GetComponent<BoxCollider2D>();
Player = GameObject.Find("Player(Clone)");
rb2d =GetComponent<Rigidbody2D>();
rb2d.velocity = new Vector2(0, 12);
Invoke("DEATH", 5);
}
void DEATH()
{
Destroy(gameObject);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.tag == "Enemy")
{
GetAudio.PlayOneShot(EnemyDamage);
StartCoroutine(Audio_Stop());
}
}
IEnumerator Audio_Stop()
{
yield return new WaitForSeconds(0.1f);
GetAudio.Stop();
Destroy(gameObject);
}
この低速ショットに重なってる白いオブジェクトが音を出す事で解決。
高速ショットは扇状なので、LineCastでセンサーを付けて、そのセンサーから音を出すようにしてみたけど上手くいかない
(少し上にずらしてあるのは、ぴったりの位置でRayを飛ばすと、Rayが当たる前に弾が敵に当たってしまう)
結局Rayの微調整が面倒で却下。
PlayOneShotメソッドは繰り返しできるから効果音用、だったと思います。
対してPlayメソッドはBGM用。
あえてPlayメソッドで音を出したらなんとなくきれいな音になりました。
Player.cs
public IEnumerator AT_Damage()
{
GetAudio.volume = 0.2f;
GetAudio.Play();
yield return new WaitForSeconds(0.5f);
GetAudio.volume = 0.2f;
}
public void AT_Act()
{
StartCoroutine(AT_Damage());
}
P_Bullet.cs
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.tag == "Enemy")
{
if(name != "P_Bullet(Clone)")
{
Player.GetComponent<Player>().AT_Act();
}
Destroy(gameObject);
}
}
当たった時の音(EnemyDamage)は0.1秒も無い(長さが00:00:00だった)
音の出始め?の「ボコッ」の「ボ」の部分くらいが聞こえればそれっぽくなったので、これで良しとします。