東方Projectっぽいシューティング１　複数の弾が当たった時の効果音

自機の弾を、高速時は扇状に５発、
![スクリーンショット (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489977/ddb324c8-24c2-5253-eeee-6c30d88df3cb.png)


低速時には横に並んで正面に５発撃ちます。
![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489977/6a766a35-0d14-5e6b-de76-1a42d0d16221.png)



敵に当たった時に「ﾎﾞｺｯ」と効果音をPlayOneShotで鳴らします。
しかしこうすると、複数の弾が同時に当たった時、効果音が重なって「ﾎﾞﾎﾞｺﾞｺﾞｯ｣って感じになってうるさいし不快。

「複数の弾が当たっても一回しか音を出さないようにするには？」
低速ショットは、音を出すだけのオブジェクトを置いて解決。
```C#: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)");                  
                }
```
```C#: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);
    }
```
結果
![スクリーンショット (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489977/244d081f-b126-5145-4adb-3551446f29e0.png)

この低速ショットに重なってる白いオブジェクトが音を出す事で解決。

高速ショットは扇状なので、LineCastでセンサーを付けて、そのセンサーから音を出すようにしてみたけど上手くいかない
![スクリーンショット (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489977/f6b8eaff-9595-cc4f-f556-71f456fe3516.png)

（少し上にずらしてあるのは、ぴったりの位置でRayを飛ばすと、Rayが当たる前に弾が敵に当たってしまう）

結局Rayの微調整が面倒で却下。


PlayOneShotメソッドは繰り返しできるから効果音用、だったと思います。
対してPlayメソッドはBGM用。

あえてPlayメソッドで音を出したらなんとなくきれいな音になりました。
```C#: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());
    }
```
```C#: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だった)
音の出始め？の「ﾎﾞｺｯ｣の「ﾎﾞ｣の部分くらいが聞こえればそれっぽくなったので、これで良しとします。